_ZN7shaderc8CompilerC2Ev:
  391|    125|  Compiler() : compiler_(shaderc_compiler_initialize()) {}
_ZN7shaderc14CompileOptionsC2Ev:
  142|    125|  CompileOptions() { options_ = shaderc_compile_options_initialize(); }
_ZN7shaderc14CompileOptions20SetOptimizationLevelE26shaderc_optimization_level:
  177|    125|  void SetOptimizationLevel(shaderc_optimization_level level) {
  178|    125|    shaderc_compile_options_set_optimization_level(options_, level);
  179|    125|  }
_ZN7shaderc14CompileOptions21SetHlslFunctionality1Eb:
  351|    125|  void SetHlslFunctionality1(bool enable) {
  352|    125|    shaderc_compile_options_set_hlsl_functionality1(options_, enable);
  353|    125|  }
_ZN7shaderc14CompileOptions17SetHlsl16BitTypesEb:
  356|    125|  void SetHlsl16BitTypes(bool enable) {
  357|    125|    shaderc_compile_options_set_hlsl_16bit_types(options_, enable);
  358|    125|  }
_ZN7shaderc14CompileOptions10SetInvertYEb:
  368|    125|  void SetInvertY(bool enable) {
  369|    125|    shaderc_compile_options_set_invert_y(options_, enable);
  370|    125|  }
_ZN7shaderc14CompileOptions11SetNanClampEb:
  376|    125|  void SetNanClamp(bool enable) {
  377|    125|    shaderc_compile_options_set_nan_clamp(options_, enable);
  378|    125|  }
_ZN7shaderc14CompileOptions19SetPreserveBindingsEb:
  316|    125|  void SetPreserveBindings(bool preserve_bindings) {
  317|    125|    shaderc_compile_options_set_preserve_bindings(options_, preserve_bindings);
  318|    125|  }
_ZN7shaderc14CompileOptions19SetAutoMapLocationsEb:
  326|    125|  void SetAutoMapLocations(bool auto_map) {
  327|    125|    shaderc_compile_options_set_auto_map_locations(options_, auto_map);
  328|    125|  }
_ZN7shaderc14CompileOptions14SetHlslOffsetsEb:
  293|    125|  void SetHlslOffsets(bool hlsl_offsets) {
  294|    125|    shaderc_compile_options_set_hlsl_offsets(options_, hlsl_offsets);
  295|    125|  }
_ZN7shaderc14CompileOptions19SetAutoBindUniformsEb:
  273|    125|  void SetAutoBindUniforms(bool auto_bind) {
  274|    125|    shaderc_compile_options_set_auto_bind_uniforms(options_, auto_bind);
  275|    125|  }
_ZN7shaderc14CompileOptions17SetSourceLanguageE23shaderc_source_language:
  236|    125|  void SetSourceLanguage(shaderc_source_language lang) {
  237|    125|    shaderc_compile_options_set_source_language(options_, lang);
  238|    125|  }
_ZNK7shaderc8Compiler14PreprocessGlslERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE19shaderc_shader_kindPKcRKNS_14CompileOptionsE:
  611|    125|      const char* input_file_name, const CompileOptions& options) const {
  612|    125|    return PreprocessGlsl(source_text.data(), source_text.size(), shader_kind,
  613|    125|                          input_file_name, options);
  614|    125|  }
_ZNK7shaderc8Compiler14PreprocessGlslEPKcm19shaderc_shader_kindS2_RKNS_14CompileOptionsE:
  598|    125|      const CompileOptions& options) const {
  599|    125|    shaderc_compilation_result_t compilation_result =
  600|    125|        shaderc_compile_into_preprocessed_text(
  601|    125|            compiler_, source_text, source_text_size, shader_kind,
  602|    125|            input_file_name, "main", options.options_);
  603|    125|    return PreprocessedSourceCompilationResult(compilation_result);
  604|    125|  }
_ZN7shaderc17CompilationResultIcEC2EP26shaderc_compilation_result:
   49|    150|      : compilation_result_(compilation_result) {}
_ZNK7shaderc8Compiler16CompileGlslToSpvERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE19shaderc_shader_kindPKcRKNS_14CompileOptionsE:
  471|     25|                                        const CompileOptions& options) const {
  472|     25|    return CompileGlslToSpv(source_text.data(), source_text.size(), shader_kind,
  473|     25|                            input_file_name, options);
  474|     25|  }
_ZNK7shaderc8Compiler16CompileGlslToSpvEPKcm19shaderc_shader_kindS2_RKNS_14CompileOptionsE:
  446|     25|                                        const CompileOptions& options) const {
  447|     25|    return CompileGlslToSpv(source_text, source_text_size, shader_kind,
  448|     25|                            input_file_name, "main", options);
  449|     25|  }
_ZNK7shaderc8Compiler16CompileGlslToSpvEPKcm19shaderc_shader_kindS2_S2_RKNS_14CompileOptionsE:
  431|     25|                                        const CompileOptions& options) const {
  432|     25|    shaderc_compilation_result_t compilation_result = shaderc_compile_into_spv(
  433|     25|        compiler_, source_text, source_text_size, shader_kind, input_file_name,
  434|     25|        entry_point_name, options.options_);
  435|     25|    return SpvCompilationResult(compilation_result);
  436|     25|  }
_ZN7shaderc17CompilationResultIjEC2EP26shaderc_compilation_result:
   49|     25|      : compilation_result_(compilation_result) {}
_ZNK7shaderc8Compiler24CompileGlslToSpvAssemblyERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE19shaderc_shader_kindPKcRKNS_14CompileOptionsE:
  587|     25|      const char* input_file_name, const CompileOptions& options) const {
  588|     25|    return CompileGlslToSpvAssembly(source_text, shader_kind, input_file_name,
  589|     25|                                    "main", options);
  590|     25|  }
_ZNK7shaderc8Compiler24CompileGlslToSpvAssemblyERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE19shaderc_shader_kindPKcSC_RKNS_14CompileOptionsE:
  576|     25|      const CompileOptions& options) const {
  577|     25|    return CompileGlslToSpvAssembly(source_text.data(), source_text.size(),
  578|     25|                                    shader_kind, input_file_name,
  579|     25|                                    entry_point_name, options);
  580|     25|  }
_ZNK7shaderc8Compiler24CompileGlslToSpvAssemblyEPKcm19shaderc_shader_kindS2_S2_RKNS_14CompileOptionsE:
  550|     25|      const char* entry_point_name, const CompileOptions& options) const {
  551|     25|    shaderc_compilation_result_t compilation_result =
  552|     25|        shaderc_compile_into_spv_assembly(
  553|     25|            compiler_, source_text, source_text_size, shader_kind,
  554|     25|            input_file_name, entry_point_name, options.options_);
  555|     25|    return AssemblyCompilationResult(compilation_result);
  556|     25|  }
_ZN7shaderc14CompileOptionsD2Ev:
  143|    125|  ~CompileOptions() { shaderc_compile_options_release(options_); }
_ZN7shaderc8CompilerD2Ev:
  392|    125|  ~Compiler() { shaderc_compiler_release(compiler_); }
_ZN7shaderc17CompilationResultIjED2Ev:
   51|     25|  ~CompilationResult() { shaderc_result_release(compilation_result_); }
_ZN7shaderc17CompilationResultIcED2Ev:
   51|    150|  ~CompilationResult() { shaderc_result_release(compilation_result_); }
_ZNK7shaderc17CompilationResultIcE20GetCompilationStatusEv:
   77|    150|  shaderc_compilation_status GetCompilationStatus() const {
   78|    150|    if (!compilation_result_) {
  ------------------
  |  Branch (78:9): [True: 0, False: 150]
  ------------------
   79|      0|      return shaderc_compilation_status_null_result_object;
   80|      0|    }
   81|    150|    return shaderc_result_get_compilation_status(compilation_result_);
   82|    150|  }
_ZNK7shaderc17CompilationResultIcE6cbeginEv:
   87|     50|  const_iterator cbegin() const {
   88|     50|    if (!compilation_result_) return nullptr;
  ------------------
  |  Branch (88:9): [True: 0, False: 50]
  ------------------
   89|     50|    return reinterpret_cast<const_iterator>(
   90|     50|        shaderc_result_get_bytes(compilation_result_));
   91|     50|  }
_ZNK7shaderc17CompilationResultIcE4cendEv:
   96|     25|  const_iterator cend() const {
   97|     25|    if (!compilation_result_) return nullptr;
  ------------------
  |  Branch (97:9): [True: 0, False: 25]
  ------------------
   98|     25|    return cbegin() +
   99|     25|           shaderc_result_get_length(compilation_result_) /
  100|     25|               sizeof(OutputElementType);
  101|     25|  }
_ZNK7shaderc17CompilationResultIjE20GetCompilationStatusEv:
   77|     25|  shaderc_compilation_status GetCompilationStatus() const {
   78|     25|    if (!compilation_result_) {
  ------------------
  |  Branch (78:9): [True: 0, False: 25]
  ------------------
   79|      0|      return shaderc_compilation_status_null_result_object;
   80|      0|    }
   81|     25|    return shaderc_result_get_compilation_status(compilation_result_);
   82|     25|  }

shaderc_compile_options_initialize:
  394|    125|shaderc_compile_options_t shaderc_compile_options_initialize() {
  395|    125|  return new (std::nothrow) shaderc_compile_options;
  396|    125|}
shaderc_compile_options_release:
  406|    125|void shaderc_compile_options_release(shaderc_compile_options_t options) {
  407|    125|  delete options;
  408|    125|}
shaderc_compile_options_set_source_language:
  417|    125|    shaderc_compile_options_t options, shaderc_source_language set_lang) {
  418|    125|  auto lang = shaderc_util::Compiler::SourceLanguage::GLSL;
  419|    125|  if (set_lang == shaderc_source_language_hlsl)
  ------------------
  |  Branch (419:7): [True: 49, False: 76]
  ------------------
  420|     49|    lang = shaderc_util::Compiler::SourceLanguage::HLSL;
  421|    125|  options->compiler.SetSourceLanguage(lang);
  422|    125|}
shaderc_compile_options_set_optimization_level:
  430|    125|    shaderc_compile_options_t options, shaderc_optimization_level level) {
  431|    125|  auto opt_level = shaderc_util::Compiler::OptimizationLevel::Zero;
  432|    125|  switch (level) {
  433|     53|    case shaderc_optimization_level_size:
  ------------------
  |  Branch (433:5): [True: 53, False: 72]
  ------------------
  434|     53|      opt_level = shaderc_util::Compiler::OptimizationLevel::Size;
  435|     53|      break;
  436|     23|    case shaderc_optimization_level_performance:
  ------------------
  |  Branch (436:5): [True: 23, False: 102]
  ------------------
  437|     23|      opt_level = shaderc_util::Compiler::OptimizationLevel::Performance;
  438|     23|      break;
  439|     49|    default:
  ------------------
  |  Branch (439:5): [True: 49, False: 76]
  ------------------
  440|     49|      break;
  441|    125|  }
  442|       |
  443|    125|  options->compiler.SetOptimizationLevel(opt_level);
  444|    125|}
shaderc_compile_options_set_auto_bind_uniforms:
  506|    125|    shaderc_compile_options_t options, bool auto_bind) {
  507|    125|  options->compiler.SetAutoBindUniforms(auto_bind);
  508|    125|}
shaderc_compile_options_set_hlsl_offsets:
  521|    125|                                              bool hlsl_offsets) {
  522|    125|  options->compiler.SetHlslOffsets(hlsl_offsets);
  523|    125|}
shaderc_compile_options_set_preserve_bindings:
  539|    125|    shaderc_compile_options_t options, bool preserve_bindings) {
  540|    125|  options->compiler.SetPreserveBindings(preserve_bindings);
  541|    125|}
shaderc_compile_options_set_auto_map_locations:
  549|    125|    shaderc_compile_options_t options, bool auto_map) {
  550|    125|  options->compiler.SetAutoMapLocations(auto_map);
  551|    125|}
shaderc_compile_options_set_hlsl_functionality1:
  567|    125|    shaderc_compile_options_t options, bool enable) {
  568|    125|  options->compiler.EnableHlslFunctionality1(enable);
  569|    125|}
shaderc_compile_options_set_hlsl_16bit_types:
  572|    125|    shaderc_compile_options_t options, bool enable) {
  573|    125|  options->compiler.EnableHlsl16BitTypes(enable);
  574|    125|}
shaderc_compile_options_set_invert_y:
  582|    125|                                          bool enable) {
  583|    125|  options->compiler.EnableInvertY(enable);
  584|    125|}
shaderc_compile_options_set_nan_clamp:
  587|    125|                                           bool enable) {
  588|    125|  options->compiler.SetNanClamp(enable);
  589|    125|}
shaderc_compiler_initialize:
  591|    150|shaderc_compiler_t shaderc_compiler_initialize() {
  592|    150|  shaderc_compiler_t compiler = new (std::nothrow) shaderc_compiler;
  593|    150|  if (compiler) {
  ------------------
  |  Branch (593:7): [True: 150, False: 0]
  ------------------
  594|    150|    compiler->initializer.reset(new shaderc_util::GlslangInitializer);
  595|    150|  }
  596|    150|  return compiler;
  597|    150|}
shaderc_compiler_release:
  599|    150|void shaderc_compiler_release(shaderc_compiler_t compiler) { delete compiler; }
shaderc_compile_into_spv:
  684|     50|    const shaderc_compile_options_t additional_options) {
  685|     50|  return CompileToSpecifiedOutputType(
  686|     50|      compiler, source_text, source_text_size, shader_kind, input_file_name,
  687|     50|      entry_point_name, additional_options,
  688|     50|      shaderc_util::Compiler::OutputType::SpirvBinary);
  689|     50|}
shaderc_compile_into_spv_assembly:
  695|     25|    const shaderc_compile_options_t additional_options) {
  696|     25|  return CompileToSpecifiedOutputType(
  697|     25|      compiler, source_text, source_text_size, shader_kind, input_file_name,
  698|     25|      entry_point_name, additional_options,
  699|     25|      shaderc_util::Compiler::OutputType::SpirvAssemblyText);
  700|     25|}
shaderc_compile_into_preprocessed_text:
  706|    125|    const shaderc_compile_options_t additional_options) {
  707|    125|  return CompileToSpecifiedOutputType(
  708|    125|      compiler, source_text, source_text_size, shader_kind, input_file_name,
  709|    125|      entry_point_name, additional_options,
  710|    125|      shaderc_util::Compiler::OutputType::PreprocessedText);
  711|    125|}
shaderc_result_get_length:
  753|     25|size_t shaderc_result_get_length(const shaderc_compilation_result_t result) {
  754|     25|  return result->output_data_size;
  755|     25|}
shaderc_result_get_bytes:
  768|     50|    const shaderc_compilation_result_t result) {
  769|     50|  return result->GetBytes();
  770|     50|}
shaderc_result_release:
  772|    200|void shaderc_result_release(shaderc_compilation_result_t result) {
  773|    200|  delete result;
  774|    200|}
shaderc_result_get_compilation_status:
  782|    200|    const shaderc_compilation_result_t result) {
  783|    200|  return result->compilation_status;
  784|    200|}
shaderc.cc:_ZN12_GLOBAL__N_128CompileToSpecifiedOutputTypeEP16shaderc_compilerPKcm19shaderc_shader_kindS3_S3_P23shaderc_compile_optionsN12shaderc_util8Compiler10OutputTypeE:
  607|    200|    shaderc_util::Compiler::OutputType output_type) {
  608|    200|  auto* result = new (std::nothrow) shaderc_compilation_result_vector;
  609|    200|  if (!result) return nullptr;
  ------------------
  |  Branch (609:7): [True: 0, False: 200]
  ------------------
  610|       |
  611|    200|  if (!input_file_name) {
  ------------------
  |  Branch (611:7): [True: 0, False: 200]
  ------------------
  612|      0|    result->messages = "Input file name string was null.";
  613|      0|    result->num_errors = 1;
  614|      0|    result->compilation_status = shaderc_compilation_status_compilation_error;
  615|      0|    return result;
  616|      0|  }
  617|    200|  result->compilation_status = shaderc_compilation_status_invalid_stage;
  618|    200|  bool compilation_succeeded = false;  // In case we exit early.
  619|    200|  std::vector<uint32_t> compilation_output_data;
  620|    200|  size_t compilation_output_data_size_in_bytes = 0u;
  621|    200|  if (!compiler->initializer) return result;
  ------------------
  |  Branch (621:7): [True: 0, False: 200]
  ------------------
  622|    200|  TRY_IF_EXCEPTIONS_ENABLED {
  ------------------
  |  |   36|    200|#define TRY_IF_EXCEPTIONS_ENABLED try
  ------------------
  623|    200|    std::stringstream errors;
  624|    200|    size_t total_warnings = 0;
  625|    200|    size_t total_errors = 0;
  626|    200|    std::string input_file_name_str(input_file_name);
  627|    200|    EShLanguage forced_stage = GetForcedStage(shader_kind);
  628|    200|    shaderc_util::string_piece source_string =
  629|    200|        shaderc_util::string_piece(source_text, source_text + source_text_size);
  630|    200|    StageDeducer stage_deducer(shader_kind);
  631|    200|    if (additional_options) {
  ------------------
  |  Branch (631:9): [True: 175, False: 25]
  ------------------
  632|    175|      InternalFileIncluder includer(additional_options->include_resolver,
  633|    175|                                    additional_options->include_result_releaser,
  634|    175|                                    additional_options->include_user_data);
  635|       |      // Depends on return value optimization to avoid extra copy.
  636|    175|      std::tie(compilation_succeeded, compilation_output_data,
  637|    175|               compilation_output_data_size_in_bytes) =
  638|    175|          additional_options->compiler.Compile(
  639|    175|              source_string, forced_stage, input_file_name_str,
  640|    175|              entry_point_name,
  641|       |              // stage_deducer has a flag: error_, which we need to check later.
  642|       |              // We need to make this a reference wrapper, so that std::function
  643|       |              // won't make a copy for this callable object.
  644|    175|              std::ref(stage_deducer), includer, output_type, &errors,
  645|    175|              &total_warnings, &total_errors);
  646|    175|    } else {
  647|       |      // Compile with default options.
  648|     25|      InternalFileIncluder includer;
  649|     25|      std::tie(compilation_succeeded, compilation_output_data,
  650|     25|               compilation_output_data_size_in_bytes) =
  651|     25|          shaderc_util::Compiler().Compile(
  652|     25|              source_string, forced_stage, input_file_name_str,
  653|     25|              entry_point_name, std::ref(stage_deducer), includer, output_type,
  654|     25|              &errors, &total_warnings, &total_errors);
  655|     25|    }
  656|       |
  657|    200|    result->messages = errors.str();
  658|    200|    result->SetOutputData(std::move(compilation_output_data));
  659|    200|    result->output_data_size = compilation_output_data_size_in_bytes;
  660|    200|    result->num_warnings = total_warnings;
  661|    200|    result->num_errors = total_errors;
  662|    200|    if (compilation_succeeded) {
  ------------------
  |  Branch (662:9): [True: 25, False: 175]
  ------------------
  663|     25|      result->compilation_status = shaderc_compilation_status_success;
  664|    175|    } else {
  665|       |      // Check whether the error is caused by failing to deduce the shader
  666|       |      // stage. If it is the case, set the error type to shader kind error.
  667|       |      // Otherwise, set it to compilation error.
  668|    175|      result->compilation_status =
  669|    175|          stage_deducer.error() ? shaderc_compilation_status_invalid_stage
  ------------------
  |  Branch (669:11): [True: 0, False: 175]
  ------------------
  670|    175|                                : shaderc_compilation_status_compilation_error;
  671|    175|    }
  672|    200|  }
  673|    200|  CATCH_IF_EXCEPTIONS_ENABLED(...) {
  674|      0|    result->compilation_status = shaderc_compilation_status_internal_error;
  675|      0|  }
  676|    200|  return result;
  677|    200|}
shaderc.cc:_ZN12_GLOBAL__N_114GetForcedStageE19shaderc_shader_kind:
   46|    200|EShLanguage GetForcedStage(shaderc_shader_kind kind) {
   47|    200|  switch (kind) {
  ------------------
  |  Branch (47:11): [True: 200, False: 0]
  ------------------
   48|     40|    case shaderc_glsl_vertex_shader:
  ------------------
  |  Branch (48:5): [True: 40, False: 160]
  ------------------
   49|     40|      return EShLangVertex;
   50|      4|    case shaderc_glsl_fragment_shader:
  ------------------
  |  Branch (50:5): [True: 4, False: 196]
  ------------------
   51|      4|      return EShLangFragment;
   52|      2|    case shaderc_glsl_compute_shader:
  ------------------
  |  Branch (52:5): [True: 2, False: 198]
  ------------------
   53|      2|      return EShLangCompute;
   54|      9|    case shaderc_glsl_geometry_shader:
  ------------------
  |  Branch (54:5): [True: 9, False: 191]
  ------------------
   55|      9|      return EShLangGeometry;
   56|     38|    case shaderc_glsl_tess_control_shader:
  ------------------
  |  Branch (56:5): [True: 38, False: 162]
  ------------------
   57|     38|      return EShLangTessControl;
   58|     11|    case shaderc_glsl_tess_evaluation_shader:
  ------------------
  |  Branch (58:5): [True: 11, False: 189]
  ------------------
   59|     11|      return EShLangTessEvaluation;
   60|       |
   61|      1|    case shaderc_glsl_raygen_shader:
  ------------------
  |  Branch (61:5): [True: 1, False: 199]
  ------------------
   62|      1|      return EShLangRayGenNV;
   63|      0|    case shaderc_glsl_anyhit_shader:
  ------------------
  |  Branch (63:5): [True: 0, False: 200]
  ------------------
   64|      0|      return EShLangAnyHitNV;
   65|      3|    case shaderc_glsl_closesthit_shader:
  ------------------
  |  Branch (65:5): [True: 3, False: 197]
  ------------------
   66|      3|      return EShLangClosestHitNV;
   67|      1|    case shaderc_glsl_miss_shader:
  ------------------
  |  Branch (67:5): [True: 1, False: 199]
  ------------------
   68|      1|      return EShLangMissNV;
   69|      1|    case shaderc_glsl_intersection_shader:
  ------------------
  |  Branch (69:5): [True: 1, False: 199]
  ------------------
   70|      1|      return EShLangIntersectNV;
   71|      3|    case shaderc_glsl_callable_shader:
  ------------------
  |  Branch (71:5): [True: 3, False: 197]
  ------------------
   72|      3|      return EShLangCallableNV;
   73|      1|    case shaderc_glsl_task_shader:
  ------------------
  |  Branch (73:5): [True: 1, False: 199]
  ------------------
   74|      1|      return EShLangTaskNV;
   75|     22|    case shaderc_glsl_mesh_shader:
  ------------------
  |  Branch (75:5): [True: 22, False: 178]
  ------------------
   76|     22|      return EShLangMeshNV;
   77|       |
   78|      1|    case shaderc_glsl_infer_from_source:
  ------------------
  |  Branch (78:5): [True: 1, False: 199]
  ------------------
   79|     11|    case shaderc_glsl_default_vertex_shader:
  ------------------
  |  Branch (79:5): [True: 10, False: 190]
  ------------------
   80|     14|    case shaderc_glsl_default_fragment_shader:
  ------------------
  |  Branch (80:5): [True: 3, False: 197]
  ------------------
   81|     14|    case shaderc_glsl_default_compute_shader:
  ------------------
  |  Branch (81:5): [True: 0, False: 200]
  ------------------
   82|     18|    case shaderc_glsl_default_geometry_shader:
  ------------------
  |  Branch (82:5): [True: 4, False: 196]
  ------------------
   83|     23|    case shaderc_glsl_default_tess_control_shader:
  ------------------
  |  Branch (83:5): [True: 5, False: 195]
  ------------------
   84|     24|    case shaderc_glsl_default_tess_evaluation_shader:
  ------------------
  |  Branch (84:5): [True: 1, False: 199]
  ------------------
   85|     26|    case shaderc_glsl_default_raygen_shader:
  ------------------
  |  Branch (85:5): [True: 2, False: 198]
  ------------------
   86|     28|    case shaderc_glsl_default_anyhit_shader:
  ------------------
  |  Branch (86:5): [True: 2, False: 198]
  ------------------
   87|     31|    case shaderc_glsl_default_closesthit_shader:
  ------------------
  |  Branch (87:5): [True: 3, False: 197]
  ------------------
   88|     62|    case shaderc_glsl_default_miss_shader:
  ------------------
  |  Branch (88:5): [True: 31, False: 169]
  ------------------
   89|     62|    case shaderc_glsl_default_intersection_shader:
  ------------------
  |  Branch (89:5): [True: 0, False: 200]
  ------------------
   90|     63|    case shaderc_glsl_default_callable_shader:
  ------------------
  |  Branch (90:5): [True: 1, False: 199]
  ------------------
   91|     64|    case shaderc_glsl_default_task_shader:
  ------------------
  |  Branch (91:5): [True: 1, False: 199]
  ------------------
   92|     64|    case shaderc_glsl_default_mesh_shader:
  ------------------
  |  Branch (92:5): [True: 0, False: 200]
  ------------------
   93|     64|    case shaderc_spirv_assembly:
  ------------------
  |  Branch (93:5): [True: 0, False: 200]
  ------------------
   94|     64|      return EShLangCount;
   95|    200|  }
   96|    200|  assert(0 && "Unhandled shaderc_shader_kind");
   97|      0|  return EShLangCount;
   98|    200|}
shaderc.cc:_ZN12_GLOBAL__N_112StageDeducerC2E19shaderc_shader_kind:
  113|    200|      : kind_(kind), error_(false) {}
shaderc.cc:_ZN12_GLOBAL__N_120InternalFileIncluderC2EPFP22shaderc_include_resultPvPKciS5_mEPFvS3_S2_ES3_:
  204|    175|      : resolver_(resolver),
  205|    175|        result_releaser_(result_releaser),
  206|    175|        user_data_(user_data) {}
shaderc.cc:_ZN12_GLOBAL__N_112StageDeducerclEPNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEERKN12shaderc_util12string_pieceE:
  125|     20|                         const shaderc_util::string_piece& /*error_tag*/) {
  126|     20|    EShLanguage stage = GetDefaultStage(kind_);
  127|     20|    if (stage == EShLangCount) {
  ------------------
  |  Branch (127:9): [True: 0, False: 20]
  ------------------
  128|      0|      error_ = true;
  129|     20|    } else {
  130|     20|      error_ = false;
  131|     20|    }
  132|     20|    return stage;
  133|     20|  }
shaderc.cc:_ZNK12_GLOBAL__N_112StageDeducer15GetDefaultStageE19shaderc_shader_kind:
  141|     20|  EShLanguage GetDefaultStage(shaderc_shader_kind kind) const {
  142|     20|    switch (kind) {
  ------------------
  |  Branch (142:13): [True: 20, False: 0]
  ------------------
  143|      0|      case shaderc_glsl_vertex_shader:
  ------------------
  |  Branch (143:7): [True: 0, False: 20]
  ------------------
  144|      0|      case shaderc_glsl_fragment_shader:
  ------------------
  |  Branch (144:7): [True: 0, False: 20]
  ------------------
  145|      0|      case shaderc_glsl_compute_shader:
  ------------------
  |  Branch (145:7): [True: 0, False: 20]
  ------------------
  146|      0|      case shaderc_glsl_geometry_shader:
  ------------------
  |  Branch (146:7): [True: 0, False: 20]
  ------------------
  147|      0|      case shaderc_glsl_tess_control_shader:
  ------------------
  |  Branch (147:7): [True: 0, False: 20]
  ------------------
  148|      0|      case shaderc_glsl_tess_evaluation_shader:
  ------------------
  |  Branch (148:7): [True: 0, False: 20]
  ------------------
  149|      0|      case shaderc_glsl_infer_from_source:
  ------------------
  |  Branch (149:7): [True: 0, False: 20]
  ------------------
  150|      0|      case shaderc_glsl_raygen_shader:
  ------------------
  |  Branch (150:7): [True: 0, False: 20]
  ------------------
  151|      0|      case shaderc_glsl_anyhit_shader:
  ------------------
  |  Branch (151:7): [True: 0, False: 20]
  ------------------
  152|      0|      case shaderc_glsl_closesthit_shader:
  ------------------
  |  Branch (152:7): [True: 0, False: 20]
  ------------------
  153|      0|      case shaderc_glsl_miss_shader:
  ------------------
  |  Branch (153:7): [True: 0, False: 20]
  ------------------
  154|      0|      case shaderc_glsl_intersection_shader:
  ------------------
  |  Branch (154:7): [True: 0, False: 20]
  ------------------
  155|      0|      case shaderc_glsl_callable_shader:
  ------------------
  |  Branch (155:7): [True: 0, False: 20]
  ------------------
  156|      0|      case shaderc_glsl_task_shader:
  ------------------
  |  Branch (156:7): [True: 0, False: 20]
  ------------------
  157|      0|      case shaderc_glsl_mesh_shader:
  ------------------
  |  Branch (157:7): [True: 0, False: 20]
  ------------------
  158|      0|        return EShLangCount;
  159|      4|      case shaderc_glsl_default_vertex_shader:
  ------------------
  |  Branch (159:7): [True: 4, False: 16]
  ------------------
  160|      4|        return EShLangVertex;
  161|      0|      case shaderc_glsl_default_fragment_shader:
  ------------------
  |  Branch (161:7): [True: 0, False: 20]
  ------------------
  162|      0|        return EShLangFragment;
  163|      0|      case shaderc_glsl_default_compute_shader:
  ------------------
  |  Branch (163:7): [True: 0, False: 20]
  ------------------
  164|      0|        return EShLangCompute;
  165|      0|      case shaderc_glsl_default_geometry_shader:
  ------------------
  |  Branch (165:7): [True: 0, False: 20]
  ------------------
  166|      0|        return EShLangGeometry;
  167|      2|      case shaderc_glsl_default_tess_control_shader:
  ------------------
  |  Branch (167:7): [True: 2, False: 18]
  ------------------
  168|      2|        return EShLangTessControl;
  169|      0|      case shaderc_glsl_default_tess_evaluation_shader:
  ------------------
  |  Branch (169:7): [True: 0, False: 20]
  ------------------
  170|      0|        return EShLangTessEvaluation;
  171|      0|      case shaderc_glsl_default_raygen_shader:
  ------------------
  |  Branch (171:7): [True: 0, False: 20]
  ------------------
  172|      0|        return EShLangRayGenNV;
  173|      0|      case shaderc_glsl_default_anyhit_shader:
  ------------------
  |  Branch (173:7): [True: 0, False: 20]
  ------------------
  174|      0|        return EShLangAnyHitNV;
  175|      0|      case shaderc_glsl_default_closesthit_shader:
  ------------------
  |  Branch (175:7): [True: 0, False: 20]
  ------------------
  176|      0|        return EShLangClosestHitNV;
  177|     14|      case shaderc_glsl_default_miss_shader:
  ------------------
  |  Branch (177:7): [True: 14, False: 6]
  ------------------
  178|     14|        return EShLangMissNV;
  179|      0|      case shaderc_glsl_default_intersection_shader:
  ------------------
  |  Branch (179:7): [True: 0, False: 20]
  ------------------
  180|      0|        return EShLangIntersectNV;
  181|      0|      case shaderc_glsl_default_callable_shader:
  ------------------
  |  Branch (181:7): [True: 0, False: 20]
  ------------------
  182|      0|        return EShLangCallableNV;
  183|      0|      case shaderc_glsl_default_task_shader:
  ------------------
  |  Branch (183:7): [True: 0, False: 20]
  ------------------
  184|      0|        return EShLangTaskNV;
  185|      0|      case shaderc_glsl_default_mesh_shader:
  ------------------
  |  Branch (185:7): [True: 0, False: 20]
  ------------------
  186|      0|        return EShLangMeshNV;
  187|      0|      case shaderc_spirv_assembly:
  ------------------
  |  Branch (187:7): [True: 0, False: 20]
  ------------------
  188|      0|        return EShLangCount;
  189|     20|    }
  190|     20|    assert(0 && "Unhandled shaderc_shader_kind");
  191|      0|    return EShLangCount;
  192|     20|  }
shaderc.cc:_ZN12_GLOBAL__N_120InternalFileIncluderC2Ev:
  208|     25|      : resolver_(nullptr), result_releaser_(nullptr), user_data_(nullptr) {}
shaderc.cc:_ZNK12_GLOBAL__N_112StageDeducer5errorEv:
  136|    175|  bool error() const { return error_; }

_ZN26shaderc_compilation_resultD2Ev:
   30|    200|  virtual ~shaderc_compilation_result() {}
_ZN33shaderc_compilation_result_vectorD2Ev:
   52|    200|  ~shaderc_compilation_result_vector() = default;
_ZNK33shaderc_compilation_result_vector8GetBytesEv:
   58|     50|  const char* GetBytes() const override {
   59|     50|    return reinterpret_cast<const char*>(output_data_.data());
   60|     50|  }
_ZN33shaderc_compilation_result_vector13SetOutputDataEONSt3__16vectorIjNS0_9allocatorIjEEEE:
   54|    200|  void SetOutputData(std::vector<uint32_t>&& data) {
   55|    200|    output_data_ = std::move(data);
   56|    200|  }

_ZN12shaderc_util8CompilerC2Ev:
  192|    150|      : default_version_(110),
  193|    150|        default_profile_(ENoProfile),
  194|    150|        force_version_profile_(false),
  195|    150|        warnings_as_errors_(false),
  196|    150|        suppress_warnings_(false),
  197|    150|        generate_debug_info_(false),
  198|    150|        enabled_opt_passes_(),
  199|    150|        target_env_(TargetEnv::Vulkan),
  200|    150|        target_env_version_(TargetEnvVersion::Default),
  201|    150|        target_spirv_version_(SpirvVersion::v1_0),
  202|    150|        target_spirv_version_is_forced_(false),
  203|    150|        source_language_(SourceLanguage::GLSL),
  204|    150|        limits_(kDefaultTBuiltInResource),
  205|    150|        auto_bind_uniforms_(false),
  206|    150|        auto_combined_image_sampler_(false),
  207|       |        auto_binding_base_(),
  208|    150|        auto_map_locations_(false),
  209|    150|        preserve_bindings_(false),
  210|    150|        hlsl_iomap_(false),
  211|    150|        hlsl_offsets_(false),
  212|    150|        hlsl_legalization_enabled_(true),
  213|    150|        hlsl_functionality1_enabled_(false),
  214|    150|        hlsl_16bit_types_enabled_(false),
  215|    150|        invert_y_enabled_(false),
  216|    150|        nan_clamp_(false),
  217|    150|        hlsl_explicit_bindings_() {}
_ZN12shaderc_util8Compiler19SetAutoBindUniformsEb:
  291|    125|  void SetAutoBindUniforms(bool auto_bind) { auto_bind_uniforms_ = auto_bind; }
_ZN12shaderc_util8Compiler14SetHlslOffsetsEb:
  333|    125|  void SetHlslOffsets(bool hlsl_offsets) { hlsl_offsets_ = hlsl_offsets; }
_ZN12shaderc_util8Compiler19SetPreserveBindingsEb:
  318|    125|  void SetPreserveBindings(bool preserve_bindings) {
  319|    125|    preserve_bindings_ = preserve_bindings;
  320|    125|  }
_ZN12shaderc_util8Compiler19SetAutoMapLocationsEb:
  326|    125|  void SetAutoMapLocations(bool auto_map) { auto_map_locations_ = auto_map; }
_ZN12shaderc_util17GlslangClientInfoC2Ev:
  624|    355|  GlslangClientInfo() {}

_ZN12shaderc_util16CountingIncluderC2Ev:
   36|    200|  CountingIncluder() {
   37|    200|    num_include_directives_.store(0);
   38|    200|  }
_ZNK12shaderc_util16CountingIncluder22num_include_directivesEv:
   78|     45|  int num_include_directives() const { return num_include_directives_.load(); }

_ZN12shaderc_util6formatINSt3__113unordered_mapINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES8_NS1_4hashIS8_EENS1_8equal_toIS8_EENS6_INS1_4pairIKS8_S8_EEEEEEEES8_RKT_RSE_SL_SL_:
   26|    200|                   const std::string& infix, const std::string& postfix) {
   27|    200|  std::stringstream s;
   28|    200|  for (const auto& pair : map) {
  ------------------
  |  Branch (28:25): [True: 0, False: 200]
  ------------------
   29|      0|    s << prefix << pair.first << infix << pair.second << postfix;
   30|      0|  }
   31|    200|  return s.str();
   32|    200|}

_ZN12shaderc_util11posix_mutexC2Ev:
   81|    200|  posix_mutex() { pthread_mutex_init(&mutex_, nullptr); }
_ZN12shaderc_util11posix_mutexD2Ev:
   83|    200|  ~posix_mutex() { pthread_mutex_destroy(&mutex_); }

_ZN12shaderc_util12string_pieceC2EPKcS2_:
   37|   150M|  string_piece(const char* begin, const char* end) : begin_(begin), end_(end) {
   38|       |    assert((begin == nullptr) == (end == nullptr) &&
   39|   150M|           "either both begin and end must be nullptr or neither must be");
   40|   150M|  }
_ZN12shaderc_util12string_pieceC2Ev:
   35|  5.96M|  string_piece() {}
_ZN12shaderc_util12string_pieceC2EPKc:
   42|  38.7M|  string_piece(const char* string) : begin_(string), end_(string) {
   43|  38.7M|    if (string) {
  ------------------
  |  Branch (43:9): [True: 38.7M, False: 0]
  ------------------
   44|  38.7M|      end_ += strlen(string);
   45|  38.7M|    }
   46|  38.7M|  }
_ZN12shaderc_util12string_pieceC2ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
   48|    635|  string_piece(const std::string& str) {
   49|    635|    if (!str.empty()) {
  ------------------
  |  Branch (49:9): [True: 635, False: 0]
  ------------------
   50|    635|      begin_ = &(str.front());
   51|    635|      end_ = &(str.back()) + 1;
   52|    635|    }
   53|    635|  }
_ZN12shaderc_util12string_pieceC2ERKS0_:
   55|  41.4M|  string_piece(const string_piece& other) {
   56|  41.4M|    begin_ = other.begin_;
   57|  41.4M|    end_ = other.end_;
   58|  41.4M|  }
_ZN12shaderc_util12string_piece5clearEv:
   63|  5.96M|  void clear() {
   64|  5.96M|    begin_ = nullptr;
   65|  5.96M|    end_ = nullptr;
   66|  5.96M|  }
_ZNK12shaderc_util12string_piece4dataEv:
   70|  1.87M|  const char* data() const { return begin_; }
_ZNK12shaderc_util12string_piece6substrEmm:
   76|  10.6M|  string_piece substr(size_t pos, size_t len = npos) const {
   77|  10.6M|    assert(len == npos || pos + len <= size());
   78|  10.6M|    return string_piece(begin_ + pos, len == npos ? end_ : begin_ + pos + len);
  ------------------
  |  Branch (78:39): [True: 3.74M, False: 6.92M]
  ------------------
   79|  10.6M|  }
_ZNK12shaderc_util12string_piece17find_first_not_ofERKS0_m:
  101|  1.87M|                           size_t pos = 0) const {
  102|  1.87M|    if (pos >= size()) {
  ------------------
  |  Branch (102:9): [True: 0, False: 1.87M]
  ------------------
  103|      0|      return npos;
  104|      0|    }
  105|  4.16M|    for (auto it = begin_ + pos; it != end_; ++it) {
  ------------------
  |  Branch (105:34): [True: 4.16M, False: 0]
  ------------------
  106|  4.16M|      if (to_search.find_first_of(*it) == npos) {
  ------------------
  |  Branch (106:11): [True: 1.87M, False: 2.29M]
  ------------------
  107|  1.87M|        return it - begin_;
  108|  1.87M|      }
  109|  4.16M|    }
  110|      0|    return npos;
  111|  1.87M|  }
_ZNK12shaderc_util12string_piece13find_first_ofERKS0_m:
  123|  20.5M|  size_t find_first_of(const string_piece& to_search, size_t pos = 0) const {
  124|  20.5M|    if (pos >= size()) {
  ------------------
  |  Branch (124:9): [True: 285, False: 20.5M]
  ------------------
  125|    285|      return npos;
  126|    285|    }
  127|   320M|    for (auto it = begin_ + pos; it != end_; ++it) {
  ------------------
  |  Branch (127:34): [True: 311M, False: 9.37M]
  ------------------
  128|   311M|      for (char c : to_search) {
  ------------------
  |  Branch (128:19): [True: 311M, False: 299M]
  ------------------
  129|   311M|        if (c == *it) {
  ------------------
  |  Branch (129:13): [True: 11.1M, False: 299M]
  ------------------
  130|  11.1M|          return it - begin_;
  131|  11.1M|        }
  132|   311M|      }
  133|   311M|    }
  134|  9.37M|    return npos;
  135|  20.5M|  }
_ZNK12shaderc_util12string_piece13find_first_ofEcm:
  139|  20.5M|  size_t find_first_of(char to_search, size_t pos = 0) const {
  140|  20.5M|    return find_first_of(string_piece(&to_search, &to_search + 1), pos);
  141|  20.5M|  }
_ZNK12shaderc_util12string_piece6lstripERKS0_:
  195|  3.74M|  string_piece lstrip(const string_piece& chars_to_strip) const {
  196|  3.74M|    iterator begin = begin_;
  197|  3.80M|    for (; begin < end_; ++begin)
  ------------------
  |  Branch (197:12): [True: 3.80M, False: 0]
  ------------------
  198|  3.80M|      if (chars_to_strip.find_first_of(*begin) == npos) break;
  ------------------
  |  Branch (198:11): [True: 3.74M, False: 55.7k]
  ------------------
  199|  3.74M|    if (begin >= end_) return string_piece();
  ------------------
  |  Branch (199:9): [True: 0, False: 3.74M]
  ------------------
  200|  3.74M|    return string_piece(begin, end_);
  201|  3.74M|  }
_ZNK12shaderc_util12string_piece6rstripERKS0_:
  204|  3.74M|  string_piece rstrip(const string_piece& chars_to_strip) const {
  205|  3.74M|    iterator end = end_;
  206|  5.62M|    for (; begin_ < end; --end)
  ------------------
  |  Branch (206:12): [True: 5.62M, False: 0]
  ------------------
  207|  5.62M|      if (chars_to_strip.find_first_of(*(end - 1)) == npos) break;
  ------------------
  |  Branch (207:11): [True: 3.74M, False: 1.87M]
  ------------------
  208|  3.74M|    if (begin_ >= end) return string_piece();
  ------------------
  |  Branch (208:9): [True: 0, False: 3.74M]
  ------------------
  209|  3.74M|    return string_piece(begin_, end);
  210|  3.74M|  }
_ZNK12shaderc_util12string_piece5stripERKS0_:
  214|  3.74M|  string_piece strip(const string_piece& chars_to_strip) const {
  215|  3.74M|    return lstrip(chars_to_strip).rstrip(chars_to_strip);
  216|  3.74M|  }
_ZNK12shaderc_util12string_piece16strip_whitespaceEv:
  218|  3.74M|  string_piece strip_whitespace() const { return strip(" \t\n\r\f\v"); }
_ZNK12shaderc_util12string_pieceeqERKS0_:
  224|  30.8M|  bool operator==(const string_piece& other) const {
  225|       |    // Either end_ and _begin_ are nullptr or neither of them are.
  226|  30.8M|    assert(((end_ == nullptr) == (begin_ == nullptr)));
  227|  30.8M|    assert(((other.end_ == nullptr) == (other.begin_ == nullptr)));
  228|  30.8M|    if (size() != other.size()) {
  ------------------
  |  Branch (228:9): [True: 30.8M, False: 1.52k]
  ------------------
  229|  30.8M|      return false;
  230|  30.8M|    }
  231|  1.52k|    return (memcmp(begin_, other.begin_, end_ - begin_) == 0);
  232|  30.8M|  }
_ZNK12shaderc_util12string_piece5beginEv:
  239|   426M|  iterator begin() const { return begin_; }
_ZNK12shaderc_util12string_piece3endEv:
  242|   665M|  iterator end() const { return end_; }
_ZNK12shaderc_util12string_piece11starts_withERKS0_:
  256|   115M|  bool starts_with(const string_piece& other) const {
  257|   115M|    const char* iter = begin_;
  258|   115M|    const char* other_iter = other.begin();
  259|   128M|    while (iter != end_ && other_iter != other.end()) {
  ------------------
  |  Branch (259:12): [True: 128M, False: 0]
  |  Branch (259:28): [True: 126M, False: 1.87M]
  ------------------
  260|   126M|      if (*iter++ != *other_iter++) {
  ------------------
  |  Branch (260:11): [True: 113M, False: 13.1M]
  ------------------
  261|   113M|        return false;
  262|   113M|      }
  263|   126M|    }
  264|  1.87M|    return other_iter == other.end();
  265|   115M|  }
_ZNK12shaderc_util12string_piece4findERKS0_m:
  271|     65|  size_t find(const string_piece& substr, size_t pos = 0) const {
  272|     65|    if (empty()) return npos;
  ------------------
  |  Branch (272:9): [True: 0, False: 65]
  ------------------
  273|     65|    if (pos >= size()) return npos;
  ------------------
  |  Branch (273:9): [True: 0, False: 65]
  ------------------
  274|     65|    if (substr.empty()) return 0;
  ------------------
  |  Branch (274:9): [True: 0, False: 65]
  ------------------
  275|     65|    for (auto it = begin_ + pos;
  276|   112M|         end() - it >= static_cast<decltype(end() - it)>(substr.size()); ++it) {
  ------------------
  |  Branch (276:10): [True: 112M, False: 63]
  ------------------
  277|   112M|      if (string_piece(it, end()).starts_with(substr)) return it - begin_;
  ------------------
  |  Branch (277:11): [True: 2, False: 112M]
  ------------------
  278|   112M|    }
  279|     63|    return npos;
  280|     65|  }
_ZNK12shaderc_util12string_piece5emptyEv:
  291|  5.73M|  bool empty() const { return begin_ == end_; }
_ZNK12shaderc_util12string_piece4sizeEv:
  294|   198M|  size_t size() const { return end_ - begin_; }
_ZNK12shaderc_util12string_piece10get_fieldsEcb:
  300|    285|                                       bool keep_delimiter = false) const {
  301|    285|    std::vector<string_piece> fields;
  302|    285|    size_t first = 0;
  303|    285|    size_t field_break = find_first_of(delimiter);
  304|  3.18M|    while (field_break != npos) {
  ------------------
  |  Branch (304:12): [True: 3.18M, False: 285]
  ------------------
  305|  3.18M|      fields.push_back(substr(first, field_break - first + keep_delimiter));
  306|  3.18M|      first = field_break + 1;
  307|  3.18M|      field_break = find_first_of(delimiter, first);
  308|  3.18M|    }
  309|    285|    if (size() - first > 0) {
  ------------------
  |  Branch (309:9): [True: 0, False: 285]
  ------------------
  310|      0|      fields.push_back(substr(first, size() - first));
  311|      0|    }
  312|    285|    return fields;
  313|    285|  }
_ZN12shaderc_utillsERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEERKNS_12string_pieceE:
  325|  7.04M|inline std::ostream& operator<<(std::ostream& os, const string_piece& piece) {
  326|       |  // Either end_ and _begin_ are nullptr or neither of them are.
  327|  7.04M|  assert(((piece.end_ == nullptr) == (piece.begin_ == nullptr)));
  328|  7.04M|  if (piece.end_ != piece.begin_) {
  ------------------
  |  Branch (328:7): [True: 7.04M, False: 0]
  ------------------
  329|  7.04M|    os.write(piece.begin_, piece.end_ - piece.begin_);
  330|  7.04M|  }
  331|  7.04M|  return os;
  332|  7.04M|}
_ZN12shaderc_utileqEPKcNS_12string_pieceE:
  334|  27.8M|inline bool operator==(const char* first, const string_piece second) {
  335|  27.8M|  return second == string_piece(first);
  336|  27.8M|}

_ZN12shaderc_util14IsKnownVersionEi:
   25|      2|inline bool IsKnownVersion(int version) {
   26|      2|  switch (version) {
   27|      0|    case 100:
  ------------------
  |  Branch (27:5): [True: 0, False: 2]
  ------------------
   28|      0|    case 110:
  ------------------
  |  Branch (28:5): [True: 0, False: 2]
  ------------------
   29|      0|    case 120:
  ------------------
  |  Branch (29:5): [True: 0, False: 2]
  ------------------
   30|      0|    case 130:
  ------------------
  |  Branch (30:5): [True: 0, False: 2]
  ------------------
   31|      0|    case 140:
  ------------------
  |  Branch (31:5): [True: 0, False: 2]
  ------------------
   32|      0|    case 150:
  ------------------
  |  Branch (32:5): [True: 0, False: 2]
  ------------------
   33|      0|    case 300:
  ------------------
  |  Branch (33:5): [True: 0, False: 2]
  ------------------
   34|      0|    case 310:
  ------------------
  |  Branch (34:5): [True: 0, False: 2]
  ------------------
   35|      0|    case 320:
  ------------------
  |  Branch (35:5): [True: 0, False: 2]
  ------------------
   36|      0|    case 330:
  ------------------
  |  Branch (36:5): [True: 0, False: 2]
  ------------------
   37|      0|    case 400:
  ------------------
  |  Branch (37:5): [True: 0, False: 2]
  ------------------
   38|      0|    case 410:
  ------------------
  |  Branch (38:5): [True: 0, False: 2]
  ------------------
   39|      0|    case 420:
  ------------------
  |  Branch (39:5): [True: 0, False: 2]
  ------------------
   40|      0|    case 430:
  ------------------
  |  Branch (40:5): [True: 0, False: 2]
  ------------------
   41|      0|    case 440:
  ------------------
  |  Branch (41:5): [True: 0, False: 2]
  ------------------
   42|      2|    case 450:
  ------------------
  |  Branch (42:5): [True: 2, False: 0]
  ------------------
   43|      2|    case 460:
  ------------------
  |  Branch (43:5): [True: 0, False: 2]
  ------------------
   44|      2|      return true;
   45|      0|    default:
  ------------------
  |  Branch (45:5): [True: 0, False: 2]
  ------------------
   46|      0|      break;
   47|      2|  }
   48|      0|  return false;
   49|      2|}

_ZN12shaderc_util18GlslangInitializerC2Ev:
  115|    150|GlslangInitializer::GlslangInitializer() {
  116|    150|  static std::mutex first_call_mutex;
  117|       |
  118|       |  // If this is the first call, glslang_mutex_ needs to be created, but in
  119|       |  // thread safe manner.
  120|    150|  {
  121|    150|    const std::lock_guard<std::mutex> first_call_lock(first_call_mutex);
  122|    150|    if (glslang_mutex_ == nullptr) {
  ------------------
  |  Branch (122:9): [True: 1, False: 149]
  ------------------
  123|      1|      glslang_mutex_ = new std::mutex();
  124|      1|    }
  125|    150|  }
  126|       |
  127|    150|  const std::lock_guard<std::mutex> glslang_lock(*glslang_mutex_);
  128|       |
  129|    150|  if (initialize_count_ == 0) {
  ------------------
  |  Branch (129:7): [True: 125, False: 25]
  ------------------
  130|    125|    glslang::InitializeProcess();
  131|    125|  }
  132|       |
  133|    150|  initialize_count_++;
  134|    150|}
_ZN12shaderc_util18GlslangInitializerD2Ev:
  136|    150|GlslangInitializer::~GlslangInitializer() {
  137|    150|  const std::lock_guard<std::mutex> glslang_lock(*glslang_mutex_);
  138|       |
  139|    150|  initialize_count_--;
  140|       |
  141|    150|  if (initialize_count_ == 0) {
  ------------------
  |  Branch (141:7): [True: 125, False: 25]
  ------------------
  142|    125|    glslang::FinalizeProcess();
  143|       |    // There is no delete for glslang_mutex_ here, because we cannot guarantee
  144|       |    // there isn't a caller waiting for glslang_mutex_ in GlslangInitializer().
  145|       |    //
  146|       |    // This means that this class does leak one std::mutex worth of memory after
  147|       |    // the final instance is destroyed, but this allows us to defer allocating
  148|       |    // and constructing until we are sure we need to.
  149|    125|  }
  150|    150|}
_ZNK12shaderc_util8Compiler7CompileERKNS_12string_pieceE11EShLanguageRKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEPKcRKNS5_8functionIFS4_PNS5_13basic_ostreamIcS8_EES3_EEERNS_16CountingIncluderENS0_10OutputTypeESJ_PmSR_:
  182|    200|    size_t* total_errors) const {
  183|       |  // Compilation results to be returned:
  184|       |  // Initialize the result tuple as a failed compilation. In error cases, we
  185|       |  // should return result_tuple directly without setting its members.
  186|    200|  auto result_tuple =
  187|    200|      std::make_tuple(false, std::vector<uint32_t>(), (size_t)0u);
  188|       |  // Get the reference of the members of the result tuple. We should set their
  189|       |  // values for succeeded compilation before returning the result tuple.
  190|    200|  bool& succeeded = std::get<0>(result_tuple);
  191|    200|  std::vector<uint32_t>& compilation_output_data = std::get<1>(result_tuple);
  192|    200|  size_t& compilation_output_data_size_in_bytes = std::get<2>(result_tuple);
  193|       |
  194|       |  // Check target environment.
  195|    200|  const auto target_client_info = GetGlslangClientInfo(
  196|    200|      error_tag, target_env_, target_env_version_, target_spirv_version_,
  197|    200|      target_spirv_version_is_forced_);
  198|    200|  if (!target_client_info.error.empty()) {
  ------------------
  |  Branch (198:7): [True: 0, False: 200]
  ------------------
  199|      0|    *error_stream << target_client_info.error;
  200|      0|    *total_warnings = 0;
  201|      0|    *total_errors = 1;
  202|      0|    return result_tuple;
  203|      0|  }
  204|       |
  205|       |#if !SHADERC_ENABLE_HLSL
  206|       |  if (source_language_ == SourceLanguage::HLSL) {
  207|       |    std::string err =
  208|       |        "Shaderc was built without HLSL support. See "
  209|       |        "https://github.com/KhronosGroup/glslang/issues/4210";
  210|       |    *error_stream << err << '\n';
  211|       |    succeeded = false;
  212|       |    compilation_output_data = ConvertStringToVector(err);
  213|       |    compilation_output_data_size_in_bytes = err.size();
  214|       |    return result_tuple;
  215|       |  }
  216|       |#endif
  217|       |
  218|    200|  EShLanguage used_shader_stage = forced_shader_stage;
  219|    200|  const std::string macro_definitions =
  220|    200|      shaderc_util::format(predefined_macros_, "#define ", " ", "\n");
  221|    200|  const std::string pound_extension =
  222|    200|      "#extension GL_GOOGLE_include_directive : enable\n";
  223|    200|  const std::string preamble = macro_definitions + pound_extension;
  224|       |
  225|    200|  std::string preprocessed_shader;
  226|       |
  227|       |  // If only preprocessing, we definitely need to preprocess. Otherwise, if
  228|       |  // we don't know the stage until now, we need the preprocessed shader to
  229|       |  // deduce the shader stage.
  230|    200|  if (output_type == OutputType::PreprocessedText ||
  ------------------
  |  Branch (230:7): [True: 125, False: 75]
  ------------------
  231|    155|      used_shader_stage == EShLangCount) {
  ------------------
  |  Branch (231:7): [True: 30, False: 45]
  ------------------
  232|    155|    bool success;
  233|    155|    std::string glslang_errors;
  234|    155|    std::tie(success, preprocessed_shader, glslang_errors) =
  235|    155|        PreprocessShader(error_tag, input_source_string, preamble, includer);
  236|       |
  237|    155|    success &= PrintFilteredErrors(error_tag, error_stream, warnings_as_errors_,
  238|    155|                                   /* suppress_warnings = */ true,
  239|    155|                                   glslang_errors.c_str(), total_warnings,
  240|    155|                                   total_errors);
  241|    155|    if (!success) return result_tuple;
  ------------------
  |  Branch (241:9): [True: 110, False: 45]
  ------------------
  242|       |    // Because of the behavior change of the #line directive, the #line
  243|       |    // directive introducing each file's content must use the syntax for the
  244|       |    // specified version. So we need to probe this shader's version and
  245|       |    // profile.
  246|     45|    int version;
  247|     45|    EProfile profile;
  248|     45|    std::tie(version, profile) = DeduceVersionProfile(preprocessed_shader);
  249|     45|    const bool is_for_next_line = LineDirectiveIsForNextLine(version, profile);
  250|       |
  251|     45|    preprocessed_shader =
  252|     45|        CleanupPreamble(preprocessed_shader, error_tag, pound_extension,
  253|     45|                        includer.num_include_directives(), is_for_next_line);
  254|       |
  255|     45|    if (output_type == OutputType::PreprocessedText) {
  ------------------
  |  Branch (255:9): [True: 25, False: 20]
  ------------------
  256|       |      // Set the values of the result tuple.
  257|     25|      succeeded = true;
  258|     25|      compilation_output_data = ConvertStringToVector(preprocessed_shader);
  259|     25|      compilation_output_data_size_in_bytes = preprocessed_shader.size();
  260|     25|      return result_tuple;
  261|     25|    } else if (used_shader_stage == EShLangCount) {
  ------------------
  |  Branch (261:16): [True: 20, False: 0]
  ------------------
  262|     20|      std::string errors;
  263|     20|      std::tie(used_shader_stage, errors) =
  264|     20|          GetShaderStageFromSourceCode(error_tag, preprocessed_shader);
  265|     20|      if (!errors.empty()) {
  ------------------
  |  Branch (265:11): [True: 0, False: 20]
  ------------------
  266|      0|        *error_stream << errors;
  267|      0|        return result_tuple;
  268|      0|      }
  269|     20|      if (used_shader_stage == EShLangCount) {
  ------------------
  |  Branch (269:11): [True: 20, False: 0]
  ------------------
  270|     20|        if ((used_shader_stage = stage_callback(error_stream, error_tag)) ==
  ------------------
  |  Branch (270:13): [True: 0, False: 20]
  ------------------
  271|     20|            EShLangCount) {
  272|      0|          return result_tuple;
  273|      0|        }
  274|     20|      }
  275|     20|    }
  276|     45|  }
  277|       |
  278|       |  // Parsing requires its own Glslang symbol tables.
  279|     65|  glslang::TShader shader(used_shader_stage);
  280|     65|  const char* shader_strings = input_source_string.data();
  281|     65|  const int shader_lengths = static_cast<int>(input_source_string.size());
  282|     65|  const char* string_names = error_tag.c_str();
  283|     65|  shader.setStringsWithLengthsAndNames(&shader_strings, &shader_lengths,
  284|     65|                                       &string_names, 1);
  285|     65|  shader.setPreamble(preamble.c_str());
  286|     65|  shader.setEntryPoint(entry_point_name);
  287|     65|  shader.setAutoMapBindings(auto_bind_uniforms_);
  288|     65|  if (auto_combined_image_sampler_) {
  ------------------
  |  Branch (288:7): [True: 0, False: 65]
  ------------------
  289|      0|    shader.setTextureSamplerTransformMode(
  290|      0|        EShTexSampTransUpgradeTextureRemoveSampler);
  291|      0|  }
  292|     65|  shader.setAutoMapLocations(auto_map_locations_);
  293|     65|  const auto& bases = auto_binding_base_[static_cast<int>(used_shader_stage)];
  294|     65|  shader.setShiftImageBinding(bases[static_cast<int>(UniformKind::Image)]);
  295|     65|  shader.setShiftSamplerBinding(bases[static_cast<int>(UniformKind::Sampler)]);
  296|     65|  shader.setShiftTextureBinding(bases[static_cast<int>(UniformKind::Texture)]);
  297|     65|  shader.setShiftUboBinding(bases[static_cast<int>(UniformKind::Buffer)]);
  298|     65|  shader.setShiftSsboBinding(
  299|     65|      bases[static_cast<int>(UniformKind::StorageBuffer)]);
  300|     65|  shader.setShiftUavBinding(
  301|     65|      bases[static_cast<int>(UniformKind::UnorderedAccessView)]);
  302|     65|#if SHADERC_ENABLE_HLSL
  303|     65|  shader.setHlslIoMapping(hlsl_iomap_);
  304|     65|#endif
  305|     65|  shader.setResourceSetBinding(
  306|     65|      hlsl_explicit_bindings_[static_cast<int>(used_shader_stage)]);
  307|     65|  shader.setEnvClient(target_client_info.client,
  308|     65|                      target_client_info.client_version);
  309|     65|  shader.setEnvTarget(target_client_info.target_language,
  310|     65|                      target_client_info.target_language_version);
  311|     65|#if SHADERC_ENABLE_HLSL
  312|     65|  if (hlsl_functionality1_enabled_) {
  ------------------
  |  Branch (312:7): [True: 38, False: 27]
  ------------------
  313|     38|    shader.setEnvTargetHlslFunctionality1();
  314|     38|  }
  315|     65|#endif
  316|     65|  if (vulkan_rules_relaxed_) {
  ------------------
  |  Branch (316:7): [True: 0, False: 65]
  ------------------
  317|      0|    glslang::EShSource language = glslang::EShSourceNone;
  318|      0|    switch (source_language_) {
  ------------------
  |  Branch (318:13): [True: 0, False: 0]
  ------------------
  319|      0|      case SourceLanguage::GLSL:
  ------------------
  |  Branch (319:7): [True: 0, False: 0]
  ------------------
  320|      0|        language = glslang::EShSourceGlsl;
  321|      0|        break;
  322|      0|      case SourceLanguage::HLSL:
  ------------------
  |  Branch (322:7): [True: 0, False: 0]
  ------------------
  323|      0|        language = glslang::EShSourceHlsl;
  324|      0|        break;
  325|      0|    }
  326|       |    // This option will only be used if the Vulkan client is used.
  327|       |    // If new versions of GL_KHR_vulkan_glsl come out, it would make sense to
  328|       |    // let callers specify which version to use. For now, just use 100.
  329|      0|    shader.setEnvInput(language, used_shader_stage, glslang::EShClientVulkan,
  330|      0|                       100);
  331|      0|    shader.setEnvInputVulkanRulesRelaxed();
  332|      0|  }
  333|     65|  shader.setInvertY(invert_y_enabled_);
  334|     65|  shader.setNanMinMaxClamp(nan_clamp_);
  335|       |
  336|     65|  const EShMessages rules =
  337|     65|      GetMessageRules(target_env_, source_language_, hlsl_offsets_,
  338|     65|                      hlsl_16bit_types_enabled_, generate_debug_info_);
  339|       |
  340|     65|  bool success = shader.parse(&limits_, default_version_, default_profile_,
  341|     65|                              force_version_profile_, kNotForwardCompatible,
  342|     65|                              rules, includer);
  343|       |
  344|     65|  success &= PrintFilteredErrors(error_tag, error_stream, warnings_as_errors_,
  345|     65|                                 suppress_warnings_, shader.getInfoLog(),
  346|     65|                                 total_warnings, total_errors);
  347|     65|  if (!success) return result_tuple;
  ------------------
  |  Branch (347:7): [True: 65, False: 0]
  ------------------
  348|       |
  349|      0|  glslang::TProgram program;
  350|      0|  program.addShader(&shader);
  351|      0|  success = program.link(EShMsgDefault) && program.mapIO();
  ------------------
  |  Branch (351:13): [True: 0, False: 0]
  |  Branch (351:44): [True: 0, False: 0]
  ------------------
  352|      0|  success &= PrintFilteredErrors(error_tag, error_stream, warnings_as_errors_,
  353|      0|                                 suppress_warnings_, program.getInfoLog(),
  354|      0|                                 total_warnings, total_errors);
  355|      0|  if (!success) return result_tuple;
  ------------------
  |  Branch (355:7): [True: 0, False: 0]
  ------------------
  356|       |
  357|       |  // 'spirv' is an alias for the compilation_output_data. This alias is added
  358|       |  // to serve as an input for the call to DissassemblyBinary.
  359|      0|  std::vector<uint32_t>& spirv = compilation_output_data;
  360|      0|  glslang::SpvOptions options;
  361|      0|  options.generateDebugInfo = generate_debug_info_;
  362|      0|  options.disableOptimizer = true;
  363|      0|  options.optimizeSize = false;
  364|       |  // Note the call to GlslangToSpv also populates compilation_output_data.
  365|      0|  glslang::GlslangToSpv(*program.getIntermediate(used_shader_stage), spirv,
  366|      0|                        &options);
  367|       |
  368|       |  // Set the tool field (the top 16-bits) in the generator word to
  369|       |  // 'Shaderc over Glslang'.
  370|      0|  const uint32_t shaderc_generator_word = 13;  // From SPIR-V XML Registry
  371|      0|  const uint32_t generator_word_index = 2;     // SPIR-V 2.3: Physical layout
  372|      0|  assert(spirv.size() > generator_word_index);
  373|      0|  spirv[generator_word_index] =
  374|      0|      (spirv[generator_word_index] & 0xffff) | (shaderc_generator_word << 16);
  375|       |
  376|      0|  std::vector<PassId> opt_passes;
  377|       |
  378|      0|  if (hlsl_legalization_enabled_ && source_language_ == SourceLanguage::HLSL) {
  ------------------
  |  Branch (378:7): [True: 0, False: 0]
  |  Branch (378:37): [True: 0, False: 0]
  ------------------
  379|       |    // If from HLSL, run this passes to "legalize" the SPIR-V for Vulkan
  380|       |    // eg. forward and remove memory writes of opaque types.
  381|      0|    opt_passes.push_back(PassId::kLegalizationPasses);
  382|      0|  }
  383|       |
  384|      0|  opt_passes.insert(opt_passes.end(), enabled_opt_passes_.begin(),
  385|      0|                    enabled_opt_passes_.end());
  386|       |
  387|      0|  if (!opt_passes.empty()) {
  ------------------
  |  Branch (387:7): [True: 0, False: 0]
  ------------------
  388|      0|    spvtools::OptimizerOptions opt_options;
  389|      0|    opt_options.set_preserve_bindings(preserve_bindings_);
  390|      0|    opt_options.set_max_id_bound(max_id_bound_);
  391|       |
  392|      0|    std::string opt_errors;
  393|      0|    if (!SpirvToolsOptimize(target_env_, target_env_version_, opt_passes,
  ------------------
  |  Branch (393:9): [True: 0, False: 0]
  ------------------
  394|      0|                            opt_options, &spirv, &opt_errors)) {
  395|      0|      *error_stream << "shaderc: internal error: compilation succeeded but "
  396|      0|                       "failed to optimize: "
  397|      0|                    << opt_errors << "\n";
  398|      0|      return result_tuple;
  399|      0|    }
  400|      0|  }
  401|       |
  402|      0|  if (output_type == OutputType::SpirvAssemblyText) {
  ------------------
  |  Branch (402:7): [True: 0, False: 0]
  ------------------
  403|      0|    std::string text_or_error;
  404|      0|    if (!SpirvToolsDisassemble(target_env_, target_env_version_, spirv,
  ------------------
  |  Branch (404:9): [True: 0, False: 0]
  ------------------
  405|      0|                               &text_or_error)) {
  406|      0|      *error_stream << "shaderc: internal error: compilation succeeded but "
  407|      0|                       "failed to disassemble: "
  408|      0|                    << text_or_error << "\n";
  409|      0|      return result_tuple;
  410|      0|    }
  411|      0|    succeeded = true;
  412|      0|    compilation_output_data = ConvertStringToVector(text_or_error);
  413|      0|    compilation_output_data_size_in_bytes = text_or_error.size();
  414|      0|    return result_tuple;
  415|      0|  } else {
  416|      0|    succeeded = true;
  417|       |    // Note compilation_output_data is already populated in GlslangToSpv().
  418|      0|    compilation_output_data_size_in_bytes = spirv.size() * sizeof(spirv[0]);
  419|      0|    return result_tuple;
  420|      0|  }
  421|      0|}
_ZN12shaderc_util8Compiler17SetSourceLanguageENS0_14SourceLanguageE:
  441|    125|void Compiler::SetSourceLanguage(Compiler::SourceLanguage lang) {
  442|    125|  source_language_ = lang;
  443|    125|}
_ZN12shaderc_util8Compiler20SetOptimizationLevelENS0_17OptimizationLevelE:
  462|    125|void Compiler::SetOptimizationLevel(Compiler::OptimizationLevel level) {
  463|       |  // Clear previous settings first.
  464|    125|  enabled_opt_passes_.clear();
  465|       |
  466|    125|  switch (level) {
  467|     53|    case OptimizationLevel::Size:
  ------------------
  |  Branch (467:5): [True: 53, False: 72]
  ------------------
  468|     53|      if (!generate_debug_info_) {
  ------------------
  |  Branch (468:11): [True: 53, False: 0]
  ------------------
  469|     53|        enabled_opt_passes_.push_back(PassId::kStripDebugInfo);
  470|     53|      }
  471|     53|      enabled_opt_passes_.push_back(PassId::kSizePasses);
  472|     53|      break;
  473|     23|    case OptimizationLevel::Performance:
  ------------------
  |  Branch (473:5): [True: 23, False: 102]
  ------------------
  474|     23|      if (!generate_debug_info_) {
  ------------------
  |  Branch (474:11): [True: 23, False: 0]
  ------------------
  475|     23|        enabled_opt_passes_.push_back(PassId::kStripDebugInfo);
  476|     23|      }
  477|     23|      enabled_opt_passes_.push_back(PassId::kPerformancePasses);
  478|     23|      break;
  479|     49|    default:
  ------------------
  |  Branch (479:5): [True: 49, False: 76]
  ------------------
  480|     49|      break;
  481|    125|  }
  482|    125|}
_ZN12shaderc_util8Compiler24EnableHlslFunctionality1Eb:
  488|    125|void Compiler::EnableHlslFunctionality1(bool enable) {
  489|    125|  hlsl_functionality1_enabled_ = enable;
  490|    125|}
_ZN12shaderc_util8Compiler20EnableHlsl16BitTypesEb:
  496|    125|void Compiler::EnableHlsl16BitTypes(bool enable) {
  497|    125|  hlsl_16bit_types_enabled_ = enable;
  498|    125|}
_ZN12shaderc_util8Compiler13EnableInvertYEb:
  500|    125|void Compiler::EnableInvertY(bool enable) { invert_y_enabled_ = enable; }
_ZN12shaderc_util8Compiler11SetNanClampEb:
  502|    125|void Compiler::SetNanClamp(bool enable) { nan_clamp_ = enable; }
_ZNK12shaderc_util8Compiler16PreprocessShaderERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS_12string_pieceESC_RNS_16CountingIncluderE:
  508|    155|    const string_piece& shader_preamble, CountingIncluder& includer) const {
  509|       |  // The stage does not matter for preprocessing.
  510|    155|  glslang::TShader shader(EShLangVertex);
  511|    155|  const char* shader_strings = shader_source.data();
  512|    155|  const int shader_lengths = static_cast<int>(shader_source.size());
  513|    155|  const char* string_names = error_tag.c_str();
  514|    155|  shader.setStringsWithLengthsAndNames(&shader_strings, &shader_lengths,
  515|    155|                                       &string_names, 1);
  516|    155|  shader.setPreamble(shader_preamble.data());
  517|    155|  auto target_client_info = GetGlslangClientInfo(
  518|    155|      error_tag, target_env_, target_env_version_, target_spirv_version_,
  519|    155|      target_spirv_version_is_forced_);
  520|    155|  if (!target_client_info.error.empty()) {
  ------------------
  |  Branch (520:7): [True: 0, False: 155]
  ------------------
  521|      0|    return std::make_tuple(false, "", target_client_info.error);
  522|      0|  }
  523|    155|  shader.setEnvClient(target_client_info.client,
  524|    155|                      target_client_info.client_version);
  525|    155|#if SHADERC_ENABLE_HLSL
  526|    155|  if (hlsl_functionality1_enabled_) {
  ------------------
  |  Branch (526:7): [True: 71, False: 84]
  ------------------
  527|     71|    shader.setEnvTargetHlslFunctionality1();
  528|     71|  }
  529|    155|#endif
  530|    155|  shader.setInvertY(invert_y_enabled_);
  531|    155|  shader.setNanMinMaxClamp(nan_clamp_);
  532|       |
  533|       |  // The preprocessor might be sensitive to the target environment.
  534|       |  // So combine the existing rules with the just-give-me-preprocessor-output
  535|       |  // flag.
  536|    155|  const auto rules = static_cast<EShMessages>(
  537|    155|      EShMsgOnlyPreprocessor |
  538|    155|      GetMessageRules(target_env_, source_language_, hlsl_offsets_,
  539|    155|                      hlsl_16bit_types_enabled_, false));
  540|       |
  541|    155|  std::string preprocessed_shader;
  542|    155|  const bool success = shader.preprocess(
  543|    155|      &limits_, default_version_, default_profile_, force_version_profile_,
  544|    155|      kNotForwardCompatible, rules, &preprocessed_shader, includer);
  545|       |
  546|    155|  if (success) {
  ------------------
  |  Branch (546:7): [True: 45, False: 110]
  ------------------
  547|     45|    return std::make_tuple(true, preprocessed_shader, shader.getInfoLog());
  548|     45|  }
  549|    110|  return std::make_tuple(false, "", shader.getInfoLog());
  550|    155|}
_ZNK12shaderc_util8Compiler15CleanupPreambleERKNS_12string_pieceES3_S3_ib:
  556|     45|                                      bool is_for_next_line) const {
  557|       |  // Those #define directives in preamble will become empty lines after
  558|       |  // preprocessing. We also injected an #extension directive to turn on #include
  559|       |  // directive support. In the original preprocessing output from glslang, it
  560|       |  // appears before the user source string. We need to do proper adjustment:
  561|       |  // * Remove empty lines generated from #define directives in preamble.
  562|       |  // * If there is no #include directive in the source code, we do not need to
  563|       |  //   output the injected #extension directive. Otherwise,
  564|       |  // * If there exists a #version directive in the source code, it should be
  565|       |  //   placed at the first line. Its original line will be filled with an empty
  566|       |  //   line as placeholder to maintain the code structure.
  567|       |
  568|     45|  const std::vector<string_piece> lines =
  569|     45|      preprocessed_shader.get_fields('\n', /* keep_delimiter = */ true);
  570|       |
  571|     45|  std::ostringstream output_stream;
  572|       |
  573|     45|  size_t pound_extension_index = lines.size();
  574|     45|  size_t pound_version_index = lines.size();
  575|  1.18M|  for (size_t i = 0; i < lines.size(); ++i) {
  ------------------
  |  Branch (575:22): [True: 1.18M, False: 43]
  ------------------
  576|  1.18M|    if (lines[i] == pound_extension) {
  ------------------
  |  Branch (576:9): [True: 45, False: 1.18M]
  ------------------
  577|     45|      pound_extension_index = std::min(i, pound_extension_index);
  578|  1.18M|    } else if (lines[i].starts_with("#version")) {
  ------------------
  |  Branch (578:16): [True: 2, False: 1.18M]
  ------------------
  579|       |      // In a preprocessed shader, directives are in a canonical format, so we
  580|       |      // can confidently compare to '#version' verbatim, without worrying about
  581|       |      // whitespace.
  582|      2|      pound_version_index = i;
  583|      2|      if (num_include_directives > 0) output_stream << lines[i];
  ------------------
  |  Branch (583:11): [True: 0, False: 2]
  ------------------
  584|      2|      break;
  585|      2|    }
  586|  1.18M|  }
  587|       |  // We know that #extension directive exists and appears before #version
  588|       |  // directive (if any).
  589|     45|  assert(pound_extension_index < lines.size());
  590|       |
  591|     45|  for (size_t i = 0; i < pound_extension_index; ++i) {
  ------------------
  |  Branch (591:22): [True: 0, False: 45]
  ------------------
  592|       |    // All empty lines before the #line directive we injected are generated by
  593|       |    // preprocessing preamble. Do not output them.
  594|      0|    if (lines[i].strip_whitespace().empty()) continue;
  ------------------
  |  Branch (594:9): [True: 0, False: 0]
  ------------------
  595|      0|    output_stream << lines[i];
  596|      0|  }
  597|       |
  598|     45|  if (num_include_directives > 0) {
  ------------------
  |  Branch (598:7): [True: 0, False: 45]
  ------------------
  599|      0|    output_stream << pound_extension;
  600|       |    // Also output a #line directive for the main file.
  601|      0|    output_stream << GetLineDirective(is_for_next_line, error_tag);
  602|      0|  }
  603|       |
  604|  1.19M|  for (size_t i = pound_extension_index + 1; i < lines.size(); ++i) {
  ------------------
  |  Branch (604:46): [True: 1.19M, False: 45]
  ------------------
  605|  1.19M|    if (i == pound_version_index) {
  ------------------
  |  Branch (605:9): [True: 2, False: 1.19M]
  ------------------
  606|      2|      if (num_include_directives > 0) {
  ------------------
  |  Branch (606:11): [True: 0, False: 2]
  ------------------
  607|      0|        output_stream << "\n";
  608|      2|      } else {
  609|      2|        output_stream << lines[i];
  610|      2|      }
  611|  1.19M|    } else {
  612|  1.19M|      output_stream << lines[i];
  613|  1.19M|    }
  614|  1.19M|  }
  615|       |
  616|     45|  return output_stream.str();
  617|     45|}
_ZNK12shaderc_util8Compiler28GetShaderStageFromSourceCodeENS_12string_pieceERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  620|     20|    string_piece filename, const std::string& preprocessed_shader) const {
  621|     20|  const string_piece kPragmaShaderStageDirective = "#pragma shader_stage";
  622|     20|  const string_piece kLineDirective = "#line";
  623|       |
  624|     20|  int version;
  625|     20|  EProfile profile;
  626|     20|  std::tie(version, profile) = DeduceVersionProfile(preprocessed_shader);
  627|     20|  const bool is_for_next_line = LineDirectiveIsForNextLine(version, profile);
  628|       |
  629|     20|  std::vector<string_piece> lines =
  630|     20|      string_piece(preprocessed_shader).get_fields('\n');
  631|       |  // The filename, logical line number (which starts from 1 and is sensitive to
  632|       |  // #line directives), and stage value for #pragma shader_stage() directives.
  633|     20|  std::vector<std::tuple<string_piece, size_t, string_piece>> stages;
  634|       |  // The physical line numbers of the first #pragma shader_stage() line and
  635|       |  // first non-preprocessing line in the preprocessed shader text.
  636|     20|  size_t first_pragma_physical_line = lines.size() + 1;
  637|     20|  size_t first_non_pp_line = lines.size() + 1;
  638|       |
  639|    772|  for (size_t i = 0, logical_line_no = 1; i < lines.size(); ++i) {
  ------------------
  |  Branch (639:43): [True: 752, False: 20]
  ------------------
  640|    752|    const string_piece current_line = lines[i].strip_whitespace();
  641|    752|    if (current_line.starts_with(kPragmaShaderStageDirective)) {
  ------------------
  |  Branch (641:9): [True: 0, False: 752]
  ------------------
  642|      0|      const string_piece stage_value =
  643|      0|          current_line.substr(kPragmaShaderStageDirective.size()).strip("()");
  644|      0|      stages.emplace_back(filename, logical_line_no, stage_value);
  645|      0|      first_pragma_physical_line = std::min(first_pragma_physical_line, i + 1);
  646|    752|    } else if (!current_line.empty() && !current_line.starts_with("#")) {
  ------------------
  |  Branch (646:16): [True: 752, False: 0]
  |  Branch (646:16): [True: 752, False: 0]
  |  Branch (646:41): [True: 752, False: 0]
  ------------------
  647|    752|      first_non_pp_line = std::min(first_non_pp_line, i + 1);
  648|    752|    }
  649|       |
  650|       |    // Update logical line number for the next line.
  651|    752|    if (current_line.starts_with(kLineDirective)) {
  ------------------
  |  Branch (651:9): [True: 0, False: 752]
  ------------------
  652|      0|      string_piece name;
  653|      0|      std::tie(logical_line_no, name) = DecodeLineDirective(current_line);
  654|      0|      if (!name.empty()) filename = name;
  ------------------
  |  Branch (654:11): [True: 0, False: 0]
  ------------------
  655|       |      // Note that for core profile, the meaning of #line changed since version
  656|       |      // 330. The line number given by #line used to mean the logical line
  657|       |      // number of the #line line. Now it means the logical line number of the
  658|       |      // next line after the #line line.
  659|      0|      if (!is_for_next_line) ++logical_line_no;
  ------------------
  |  Branch (659:11): [True: 0, False: 0]
  ------------------
  660|    752|    } else {
  661|    752|      ++logical_line_no;
  662|    752|    }
  663|    752|  }
  664|     20|  if (stages.empty()) return std::make_pair(EShLangCount, "");
  ------------------
  |  Branch (664:7): [True: 20, False: 0]
  ------------------
  665|       |
  666|      0|  std::string error_message;
  667|       |
  668|      0|  const string_piece& first_pragma_filename = std::get<0>(stages[0]);
  669|      0|  const std::string first_pragma_line = std::to_string(std::get<1>(stages[0]));
  670|      0|  const string_piece& first_pragma_stage = std::get<2>(stages[0]);
  671|       |
  672|      0|  if (first_pragma_physical_line > first_non_pp_line) {
  ------------------
  |  Branch (672:7): [True: 0, False: 0]
  ------------------
  673|      0|    error_message += first_pragma_filename.str() + ":" + first_pragma_line +
  674|      0|                     ": error: '#pragma': the first 'shader_stage' #pragma "
  675|      0|                     "must appear before any non-preprocessing code\n";
  676|      0|  }
  677|       |
  678|      0|  EShLanguage stage = MapStageNameToLanguage(first_pragma_stage);
  679|      0|  if (stage == EShLangCount) {
  ------------------
  |  Branch (679:7): [True: 0, False: 0]
  ------------------
  680|      0|    error_message +=
  681|      0|        first_pragma_filename.str() + ":" + first_pragma_line +
  682|      0|        ": error: '#pragma': invalid stage for 'shader_stage' #pragma: '" +
  683|      0|        first_pragma_stage.str() + "'\n";
  684|      0|  }
  685|       |
  686|      0|  for (size_t i = 1; i < stages.size(); ++i) {
  ------------------
  |  Branch (686:22): [True: 0, False: 0]
  ------------------
  687|      0|    const string_piece& current_stage = std::get<2>(stages[i]);
  688|      0|    if (current_stage != first_pragma_stage) {
  ------------------
  |  Branch (688:9): [True: 0, False: 0]
  ------------------
  689|      0|      const string_piece& current_filename = std::get<0>(stages[i]);
  690|      0|      const std::string current_line = std::to_string(std::get<1>(stages[i]));
  691|      0|      error_message += current_filename.str() + ":" + current_line +
  692|      0|                       ": error: '#pragma': conflicting stages for "
  693|      0|                       "'shader_stage' #pragma: '" +
  694|      0|                       current_stage.str() + "' (was '" +
  695|      0|                       first_pragma_stage.str() + "' at " +
  696|      0|                       first_pragma_filename.str() + ":" + first_pragma_line +
  697|      0|                       ")\n";
  698|      0|    }
  699|      0|  }
  700|       |
  701|      0|  return std::make_pair(error_message.empty() ? stage : EShLangCount,
  ------------------
  |  Branch (701:25): [True: 0, False: 0]
  ------------------
  702|      0|                        error_message);
  703|     20|}
_ZNK12shaderc_util8Compiler20DeduceVersionProfileERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  706|     65|    const std::string& preprocessed_shader) const {
  707|     65|  int version = default_version_;
  708|     65|  EProfile profile = default_profile_;
  709|     65|  if (!force_version_profile_) {
  ------------------
  |  Branch (709:7): [True: 65, False: 0]
  ------------------
  710|     65|    std::tie(version, profile) =
  711|     65|        GetVersionProfileFromSourceCode(preprocessed_shader);
  712|     65|    if (version == 0 && profile == ENoProfile) {
  ------------------
  |  Branch (712:9): [True: 63, False: 2]
  |  Branch (712:25): [True: 63, False: 0]
  ------------------
  713|     63|      version = default_version_;
  714|     63|      profile = default_profile_;
  715|     63|    }
  716|     65|  }
  717|     65|  return std::make_pair(version, profile);
  718|     65|}
_ZNK12shaderc_util8Compiler31GetVersionProfileFromSourceCodeERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  721|     65|    const std::string& preprocessed_shader) const {
  722|     65|  string_piece pound_version = preprocessed_shader;
  723|     65|  const size_t pound_version_loc = pound_version.find("#version");
  724|     65|  if (pound_version_loc == string_piece::npos) {
  ------------------
  |  Branch (724:7): [True: 63, False: 2]
  ------------------
  725|     63|    return std::make_pair(0, ENoProfile);
  726|     63|  }
  727|      2|  pound_version =
  728|      2|      pound_version.substr(pound_version_loc + std::strlen("#version"));
  729|      2|  pound_version = pound_version.substr(0, pound_version.find_first_of("\n"));
  730|       |
  731|      2|  std::string version_profile;
  732|     18|  for (const auto character : pound_version) {
  ------------------
  |  Branch (732:29): [True: 18, False: 2]
  ------------------
  733|     18|    if (character != ' ') version_profile += character;
  ------------------
  |  Branch (733:9): [True: 14, False: 4]
  ------------------
  734|     18|  }
  735|       |
  736|      2|  int version;
  737|      2|  EProfile profile;
  738|      2|  if (!ParseVersionProfile(version_profile, &version, &profile)) {
  ------------------
  |  Branch (738:7): [True: 0, False: 2]
  ------------------
  739|      0|    return std::make_pair(0, ENoProfile);
  740|      0|  }
  741|      2|  return std::make_pair(version, profile);
  742|      2|}
_ZN12shaderc_util21ConvertStringToVectorERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE:
  747|     25|std::vector<uint32_t> ConvertStringToVector(const std::string& str) {
  748|     25|  size_t num_bytes_str = str.size() + 1u;
  749|     25|  size_t vector_length =
  750|     25|      (num_bytes_str + sizeof(uint32_t) - 1) / sizeof(uint32_t);
  751|     25|  std::vector<uint32_t> result_vec(vector_length, 0);
  752|     25|  std::strncpy(reinterpret_cast<char*>(result_vec.data()), str.c_str(),
  753|     25|               str.size());
  754|     25|  return result_vec;
  755|     25|}
_ZN12shaderc_util20GetGlslangClientInfoERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEENS_8Compiler9TargetEnvENS9_16TargetEnvVersionENS9_12SpirvVersionEb:
  761|    355|    bool spv_version_is_forced) {
  762|    355|  GlslangClientInfo result;
  763|    355|  std::ostringstream errs;
  764|       |
  765|    355|  using shaderc_util::Compiler;
  766|    355|  switch (env) {
  767|    355|    case Compiler::TargetEnv::Vulkan:
  ------------------
  |  Branch (767:5): [True: 355, False: 0]
  ------------------
  768|    355|      result.client = glslang::EShClientVulkan;
  769|    355|      if (env_version == Compiler::TargetEnvVersion::Default ||
  ------------------
  |  Branch (769:11): [True: 355, False: 0]
  ------------------
  770|    355|          env_version == Compiler::TargetEnvVersion::Vulkan_1_0) {
  ------------------
  |  Branch (770:11): [True: 0, False: 0]
  ------------------
  771|    355|        result.client_version = glslang::EShTargetVulkan_1_0;
  772|    355|      } else if (env_version == Compiler::TargetEnvVersion::Vulkan_1_1) {
  ------------------
  |  Branch (772:18): [True: 0, False: 0]
  ------------------
  773|      0|        result.client_version = glslang::EShTargetVulkan_1_1;
  774|      0|        result.target_language_version = glslang::EShTargetSpv_1_3;
  775|      0|      } else if (env_version == Compiler::TargetEnvVersion::Vulkan_1_2) {
  ------------------
  |  Branch (775:18): [True: 0, False: 0]
  ------------------
  776|      0|        result.client_version = glslang::EShTargetVulkan_1_2;
  777|      0|        result.target_language_version = glslang::EShTargetSpv_1_5;
  778|      0|      } else if (env_version == Compiler::TargetEnvVersion::Vulkan_1_3) {
  ------------------
  |  Branch (778:18): [True: 0, False: 0]
  ------------------
  779|      0|        result.client_version = glslang::EShTargetVulkan_1_3;
  780|      0|        result.target_language_version = glslang::EShTargetSpv_1_6;
  781|      0|      } else if (env_version == Compiler::TargetEnvVersion::Vulkan_1_4) {
  ------------------
  |  Branch (781:18): [True: 0, False: 0]
  ------------------
  782|      0|        result.client_version = glslang::EShTargetVulkan_1_4;
  783|      0|        result.target_language_version = glslang::EShTargetSpv_1_6;
  784|      0|      } else {
  785|      0|        errs << "error:" << error_tag << ": Invalid target client version "
  786|      0|             << static_cast<uint32_t>(env_version) << " for Vulkan environment "
  787|      0|             << int(env);
  788|      0|      }
  789|    355|      break;
  790|      0|    case Compiler::TargetEnv::OpenGLCompat:
  ------------------
  |  Branch (790:5): [True: 0, False: 355]
  ------------------
  791|      0|      errs << "error: OpenGL compatibility profile is not supported";
  792|      0|      break;
  793|      0|    case Compiler::TargetEnv::OpenGL:
  ------------------
  |  Branch (793:5): [True: 0, False: 355]
  ------------------
  794|      0|      result.client = glslang::EShClientOpenGL;
  795|      0|      if (env_version == Compiler::TargetEnvVersion::Default ||
  ------------------
  |  Branch (795:11): [True: 0, False: 0]
  ------------------
  796|      0|          env_version == Compiler::TargetEnvVersion::OpenGL_4_5) {
  ------------------
  |  Branch (796:11): [True: 0, False: 0]
  ------------------
  797|      0|        result.client_version = glslang::EShTargetOpenGL_450;
  798|      0|      } else {
  799|      0|        errs << "error:" << error_tag << ": Invalid target client version "
  800|      0|             << static_cast<uint32_t>(env_version) << " for OpenGL environment "
  801|      0|             << int(env);
  802|      0|      }
  803|      0|      break;
  804|      0|    default:
  ------------------
  |  Branch (804:5): [True: 0, False: 355]
  ------------------
  805|      0|      errs << "error:" << error_tag << ": Invalid target client environment "
  806|      0|           << int(env);
  807|      0|      break;
  808|    355|  }
  809|       |
  810|    355|  if (spv_version_is_forced && errs.str().empty()) {
  ------------------
  |  Branch (810:7): [True: 0, False: 355]
  |  Branch (810:7): [True: 0, False: 355]
  |  Branch (810:32): [True: 0, False: 0]
  ------------------
  811|      0|    switch (spv_version) {
  812|      0|      case Compiler::SpirvVersion::v1_0:
  ------------------
  |  Branch (812:7): [True: 0, False: 0]
  ------------------
  813|      0|        result.target_language_version = glslang::EShTargetSpv_1_0;
  814|      0|        break;
  815|      0|      case Compiler::SpirvVersion::v1_1:
  ------------------
  |  Branch (815:7): [True: 0, False: 0]
  ------------------
  816|      0|        result.target_language_version = glslang::EShTargetSpv_1_1;
  817|      0|        break;
  818|      0|      case Compiler::SpirvVersion::v1_2:
  ------------------
  |  Branch (818:7): [True: 0, False: 0]
  ------------------
  819|      0|        result.target_language_version = glslang::EShTargetSpv_1_2;
  820|      0|        break;
  821|      0|      case Compiler::SpirvVersion::v1_3:
  ------------------
  |  Branch (821:7): [True: 0, False: 0]
  ------------------
  822|      0|        result.target_language_version = glslang::EShTargetSpv_1_3;
  823|      0|        break;
  824|      0|      case Compiler::SpirvVersion::v1_4:
  ------------------
  |  Branch (824:7): [True: 0, False: 0]
  ------------------
  825|      0|        result.target_language_version = glslang::EShTargetSpv_1_4;
  826|      0|        break;
  827|      0|      case Compiler::SpirvVersion::v1_5:
  ------------------
  |  Branch (827:7): [True: 0, False: 0]
  ------------------
  828|      0|        result.target_language_version = glslang::EShTargetSpv_1_5;
  829|      0|        break;
  830|      0|      case Compiler::SpirvVersion::v1_6:
  ------------------
  |  Branch (830:7): [True: 0, False: 0]
  ------------------
  831|      0|        result.target_language_version = glslang::EShTargetSpv_1_6;
  832|      0|        break;
  833|      0|      default:
  ------------------
  |  Branch (833:7): [True: 0, False: 0]
  ------------------
  834|      0|        errs << "error:" << error_tag << ": Unknown SPIR-V version " << std::hex
  835|      0|             << uint32_t(spv_version);
  836|      0|        break;
  837|      0|    }
  838|      0|  }
  839|    355|  result.error = errs.str();
  840|    355|  return result;
  841|    355|}
compiler.cc:_ZN12_GLOBAL__N_126LineDirectiveIsForNextLineEi8EProfile:
   42|     65|inline bool LineDirectiveIsForNextLine(int version, EProfile profile) {
   43|     65|  return profile == EEsProfile || version >= 330;
  ------------------
  |  Branch (43:10): [True: 0, False: 65]
  |  Branch (43:35): [True: 2, False: 63]
  ------------------
   44|     65|}
compiler.cc:_ZN12_GLOBAL__N_115GetMessageRulesEN12shaderc_util8Compiler9TargetEnvENS1_14SourceLanguageEbbb:
   77|    220|                            bool debug_info) {
   78|    220|  using shaderc_util::Compiler;
   79|    220|  EShMessages result = EShMsgCascadingErrors;
   80|    220|  if (lang == Compiler::SourceLanguage::HLSL) {
  ------------------
  |  Branch (80:7): [True: 115, False: 105]
  ------------------
   81|    115|    result = static_cast<EShMessages>(result | EShMsgReadHlsl);
   82|    115|  }
   83|    220|  switch (env) {
  ------------------
  |  Branch (83:11): [True: 220, False: 0]
  ------------------
   84|      0|    case Compiler::TargetEnv::OpenGLCompat:
  ------------------
  |  Branch (84:5): [True: 0, False: 220]
  ------------------
   85|       |      // The compiler will have already errored out before now.
   86|       |      // But we need to handle this enum.
   87|      0|      break;
   88|      0|    case Compiler::TargetEnv::OpenGL:
  ------------------
  |  Branch (88:5): [True: 0, False: 220]
  ------------------
   89|      0|      result = static_cast<EShMessages>(result | EShMsgSpvRules);
   90|      0|      break;
   91|    220|    case Compiler::TargetEnv::Vulkan:
  ------------------
  |  Branch (91:5): [True: 220, False: 0]
  ------------------
   92|    220|      result =
   93|    220|          static_cast<EShMessages>(result | EShMsgSpvRules | EShMsgVulkanRules);
   94|    220|      break;
   95|    220|  }
   96|    220|  if (hlsl_offsets) {
  ------------------
  |  Branch (96:7): [True: 112, False: 108]
  ------------------
   97|    112|    result = static_cast<EShMessages>(result | EShMsgHlslOffsets);
   98|    112|  }
   99|    220|  if (hlsl_16bit_types) {
  ------------------
  |  Branch (99:7): [True: 114, False: 106]
  ------------------
  100|    114|    result = static_cast<EShMessages>(result | EShMsgHlslEnable16BitTypes);
  101|    114|  }
  102|    220|  if (debug_info) {
  ------------------
  |  Branch (102:7): [True: 0, False: 220]
  ------------------
  103|      0|    result = static_cast<EShMessages>(result | EShMsgDebugInfo);
  104|      0|  }
  105|    220|  return result;
  106|    220|}

_ZN12shaderc_util18ParseGlslangOutputERKNS_12string_pieceEbbPS0_S3_S3_:
  132|  1.98M|                               string_piece* line_number, string_piece* rest) {
  133|  1.98M|  string_piece rest_of_message(message);
  134|  1.98M|  source_name->clear();
  135|  1.98M|  line_number->clear();
  136|  1.98M|  rest->clear();
  137|       |
  138|       |  // The glslang warning/error messages are typically of the following form:
  139|       |  //   <message-type> <location-specification> <message-body>
  140|       |  //
  141|       |  // <message-type> can be "WARNING:", "ERROR:", or "Warning, ". "WARNING:"
  142|       |  // means a warning message for a certain line, while "Warning, " means a
  143|       |  // global one.
  144|       |  //
  145|       |  // <location-specification> is of the form:
  146|       |  //   <filename-or-string-number>:<line-number>:
  147|       |  // It doesn't exist if the warning/error message is a global one.
  148|       |  //
  149|       |  // See Glslang's TInfoSink class implementation for details.
  150|       |
  151|  1.98M|  bool is_error = false;
  152|       |
  153|       |  // Handle <message-type>.
  154|  1.98M|  switch (DeduceMessageType(&rest_of_message)) {
  155|      0|    case MessageType::Warning:
  ------------------
  |  Branch (155:5): [True: 0, False: 1.98M]
  ------------------
  156|      0|      if (suppress_warnings) return MessageType::Ignored;
  ------------------
  |  Branch (156:11): [True: 0, False: 0]
  ------------------
  157|      0|      break;
  158|  1.87M|    case MessageType::Error:
  ------------------
  |  Branch (158:5): [True: 1.87M, False: 113k]
  ------------------
  159|  1.87M|      is_error = true;
  160|  1.87M|      break;
  161|      0|    case MessageType::GlobalWarning:
  ------------------
  |  Branch (161:5): [True: 0, False: 1.98M]
  ------------------
  162|      0|      if (suppress_warnings) return MessageType::Ignored;
  ------------------
  |  Branch (162:11): [True: 0, False: 0]
  ------------------
  163|      0|      *rest = rest_of_message;
  164|      0|      return warnings_as_errors ? MessageType::GlobalError
  ------------------
  |  Branch (164:14): [True: 0, False: 0]
  ------------------
  165|      0|                                : MessageType::GlobalWarning;
  166|   113k|    case MessageType::Unknown:
  ------------------
  |  Branch (166:5): [True: 113k, False: 1.87M]
  ------------------
  167|   113k|      *rest = rest_of_message;
  168|   113k|      return MessageType::Unknown;
  169|      0|    default:
  ------------------
  |  Branch (169:5): [True: 0, False: 1.98M]
  ------------------
  170|      0|      break;
  171|  1.98M|  }
  172|       |
  173|  1.87M|  rest_of_message = rest_of_message.strip_whitespace();
  174|  1.87M|  if (rest_of_message.empty()) return MessageType::Unknown;
  ------------------
  |  Branch (174:7): [True: 0, False: 1.87M]
  ------------------
  175|       |
  176|       |  // Now we have stripped the <message-type>. Try to see if we can find
  177|       |  // a <location-specification>.
  178|  1.87M|  if (DeduceLocationSpec(&rest_of_message, source_name, line_number)) {
  ------------------
  |  Branch (178:7): [True: 1.87M, False: 264]
  ------------------
  179|  1.87M|    *rest = rest_of_message;
  180|  1.87M|    return (is_error || warnings_as_errors) ? MessageType::Error
  ------------------
  |  Branch (180:13): [True: 1.87M, False: 0]
  |  Branch (180:25): [True: 0, False: 0]
  ------------------
  181|  1.87M|                                            : MessageType::Warning;
  182|  1.87M|  } else {
  183|       |    // No <location-specification>. This is a global warning/error message.
  184|       |    // A special kind of global message is summary message, which should
  185|       |    // start with a number.
  186|    264|    *rest = rest_of_message;
  187|    264|    if (IsSummaryMessage(rest_of_message)) {
  ------------------
  |  Branch (187:9): [True: 170, False: 94]
  ------------------
  188|    170|      return (is_error || warnings_as_errors) ? MessageType::ErrorSummary
  ------------------
  |  Branch (188:15): [True: 170, False: 0]
  |  Branch (188:27): [True: 0, False: 0]
  ------------------
  189|    170|                                              : MessageType::WarningSummary;
  190|    170|    }
  191|     94|    return (is_error || warnings_as_errors) ? MessageType::GlobalError
  ------------------
  |  Branch (191:13): [True: 94, False: 0]
  |  Branch (191:25): [True: 0, False: 0]
  ------------------
  192|     94|                                            : MessageType::GlobalWarning;
  193|    264|  }
  194|      0|  return MessageType::Unknown;
  195|  1.87M|}
_ZN12shaderc_util19PrintFilteredErrorsERKNS_12string_pieceEPNSt3__113basic_ostreamIcNS3_11char_traitsIcEEEEbbPKcPmSB_:
  200|    220|                         size_t* total_warnings, size_t* total_errors) {
  201|    220|  const char* ignored_error_strings[] = {
  202|    220|      "Warning, version 310 is not yet complete; most version-specific "
  203|    220|      "features are present, but some are missing.",
  204|    220|      "Warning, version 400 is not yet complete; most version-specific "
  205|    220|      "features are present, but some are missing.",
  206|    220|      "Warning, version 410 is not yet complete; most version-specific "
  207|    220|      "features are present, but some are missing.",
  208|    220|      "Warning, version 420 is not yet complete; most version-specific "
  209|    220|      "features are present, but some are missing.",
  210|    220|      "Warning, version 430 is not yet complete; most version-specific "
  211|    220|      "features are present, but some are missing.",
  212|    220|      "Warning, version 440 is not yet complete; most version-specific "
  213|    220|      "features are present, but some are missing.",
  214|    220|      "Warning, version 450 is not yet complete; most version-specific "
  215|    220|      "features are present, but some are missing.",
  216|    220|      "Linked vertex stage:", "Linked fragment stage:",
  217|    220|      "Linked tessellation control stage:",
  218|    220|      "Linked tessellation evaluation stage:", "Linked geometry stage:",
  219|    220|      "Linked compute stage:", ""};
  220|    220|  size_t existing_total_errors = *total_errors;
  221|    220|  string_piece error_messages(error_list);
  222|  1.98M|  for (const string_piece& message : error_messages.get_fields('\n')) {
  ------------------
  |  Branch (222:36): [True: 1.98M, False: 220]
  ------------------
  223|  1.98M|    if (std::find(std::begin(ignored_error_strings),
  ------------------
  |  Branch (223:9): [True: 1.98M, False: 170]
  ------------------
  224|  1.98M|                  std::end(ignored_error_strings),
  225|  1.98M|                  message) == std::end(ignored_error_strings)) {
  226|  1.98M|      string_piece source_name;
  227|  1.98M|      string_piece line_number;
  228|  1.98M|      string_piece rest;
  229|  1.98M|      const MessageType type =
  230|  1.98M|          ParseGlslangOutput(message, warnings_as_errors, suppress_warnings,
  231|  1.98M|                             &source_name, &line_number, &rest);
  232|  1.98M|      string_piece name = file_name;
  233|  1.98M|      if (!source_name.empty()) {
  ------------------
  |  Branch (233:11): [True: 1.87M, False: 114k]
  ------------------
  234|       |        // -1 is the string number for the preamble injected by us.
  235|  1.87M|        name = source_name == "-1" ? "<command line>" : source_name;
  ------------------
  |  Branch (235:16): [True: 0, False: 1.87M]
  ------------------
  236|  1.87M|      }
  237|  1.98M|      switch (type) {
  ------------------
  |  Branch (237:15): [True: 1.98M, False: 0]
  ------------------
  238|  1.87M|        case MessageType::Error:
  ------------------
  |  Branch (238:9): [True: 1.87M, False: 114k]
  ------------------
  239|  1.87M|        case MessageType::Warning:
  ------------------
  |  Branch (239:9): [True: 0, False: 1.98M]
  ------------------
  240|  1.87M|          assert(!name.empty() && !line_number.empty() && !rest.empty());
  241|  1.87M|          *error_stream << name << ":" << line_number << ": "
  242|  1.87M|                        << (type == MessageType::Error ? "error: "
  ------------------
  |  Branch (242:29): [True: 1.87M, False: 0]
  ------------------
  243|  1.87M|                                                       : "warning: ")
  244|  1.87M|                        << rest.strip_whitespace() << std::endl;
  245|  1.87M|          *total_errors += type == MessageType::Error;
  246|  1.87M|          *total_warnings += type == MessageType::Warning;
  247|  1.87M|          break;
  248|    170|        case MessageType::ErrorSummary:
  ------------------
  |  Branch (248:9): [True: 170, False: 1.98M]
  ------------------
  249|    170|        case MessageType::WarningSummary:
  ------------------
  |  Branch (249:9): [True: 0, False: 1.98M]
  ------------------
  250|    170|          break;
  251|     94|        case MessageType::GlobalError:
  ------------------
  |  Branch (251:9): [True: 94, False: 1.98M]
  ------------------
  252|     94|        case MessageType::GlobalWarning:
  ------------------
  |  Branch (252:9): [True: 0, False: 1.98M]
  ------------------
  253|     94|          assert(!rest.empty());
  254|     94|          *total_errors += type == MessageType::GlobalError;
  255|     94|          *total_warnings += type == MessageType::GlobalWarning;
  256|     94|          *error_stream << name << ": "
  257|     94|                        << (type == MessageType::GlobalError ? "error"
  ------------------
  |  Branch (257:29): [True: 94, False: 0]
  ------------------
  258|     94|                                                             : "warning")
  259|     94|                        << ": " << rest.strip_whitespace() << std::endl;
  260|     94|          break;
  261|   113k|        case MessageType::Unknown:
  ------------------
  |  Branch (261:9): [True: 113k, False: 1.87M]
  ------------------
  262|   113k|          *error_stream << name << ":";
  263|   113k|          *error_stream << " " << message << std::endl;
  264|   113k|          break;
  265|      0|        case MessageType::Ignored:
  ------------------
  |  Branch (265:9): [True: 0, False: 1.98M]
  ------------------
  266|      0|          break;
  267|  1.98M|      }
  268|  1.98M|    }
  269|  1.98M|  }
  270|    220|  return (existing_total_errors == *total_errors);
  271|    220|}
message.cc:_ZN12shaderc_util12_GLOBAL__N_117DeduceMessageTypeEPNS_12string_pieceE:
   29|  1.98M|MessageType DeduceMessageType(string_piece* message) {
   30|  1.98M|  static const char kErrorMessage[] = "ERROR: ";
   31|  1.98M|  static const char kWarningMessage[] = "WARNING: ";
   32|  1.98M|  static const char kGlobalWarningMessage[] = "Warning, ";
   33|       |
   34|  1.98M|  if (message->starts_with(kErrorMessage)) {
  ------------------
  |  Branch (34:7): [True: 1.87M, False: 113k]
  ------------------
   35|  1.87M|    *message = message->substr(::strlen(kErrorMessage));
   36|  1.87M|    return MessageType::Error;
   37|  1.87M|  } else if (message->starts_with(kWarningMessage)) {
  ------------------
  |  Branch (37:14): [True: 0, False: 113k]
  ------------------
   38|      0|    *message = message->substr(::strlen(kWarningMessage));
   39|      0|    return MessageType::Warning;
   40|   113k|  } else if (message->starts_with(kGlobalWarningMessage)) {
  ------------------
  |  Branch (40:14): [True: 0, False: 113k]
  ------------------
   41|      0|    *message = message->substr(::strlen(kGlobalWarningMessage));
   42|      0|    return MessageType::GlobalWarning;
   43|      0|  }
   44|   113k|  return MessageType::Unknown;
   45|  1.98M|}
message.cc:_ZN12shaderc_util12_GLOBAL__N_118DeduceLocationSpecEPNS_12string_pieceES2_S2_:
   54|  1.87M|                        string_piece* line_number) {
   55|  1.87M|  if (!message || message->empty()) {
  ------------------
  |  Branch (55:7): [True: 0, False: 1.87M]
  |  Branch (55:19): [True: 0, False: 1.87M]
  ------------------
   56|      0|    return false;
   57|      0|  }
   58|       |
   59|       |  // When we find a pattern like this:
   60|       |  //     colon
   61|       |  //     digits
   62|       |  //     colon
   63|       |  //     space
   64|       |  // Then deduce that the source_name is the text before the first colon,
   65|       |  // the line number is the digits, and the message is the text after the
   66|       |  // second colon.
   67|       |
   68|  1.87M|  const size_t size = message->size();
   69|  1.87M|  if (size <= 4) {
  ------------------
  |  Branch (69:7): [True: 0, False: 1.87M]
  ------------------
   70|       |    // A valid message must have a colon, a digit, a colon, and a space.
   71|      0|    return false;
   72|      0|  }
   73|       |  // The last possible position of the first colon.
   74|  1.87M|  const size_t first_colon_cutoff = size - 4;
   75|       |  // The last possible position of the second colon.
   76|  1.87M|  const size_t next_colon_cutoff = size - 2;
   77|       |
   78|  1.87M|  for (size_t first_colon_pos = message->find_first_of(':'), next_colon_pos = 0;
   79|       |
   80|       |       // There is a first colon, and it's not too close to the end
   81|  1.87M|       (first_colon_pos != string_piece::npos) &&
  ------------------
  |  Branch (81:8): [True: 1.87M, False: 170]
  ------------------
   82|  1.87M|       (first_colon_pos <= first_colon_cutoff);
  ------------------
  |  Branch (82:8): [True: 1.87M, False: 0]
  ------------------
   83|       |
   84|       |       // Try the next pair of colons.
   85|  1.87M|       first_colon_pos = next_colon_pos) {
   86|       |    // We're guaranteed to have at least 3 more characters.
   87|       |    // Guarantee progress toward the end of the string.
   88|  1.87M|    next_colon_pos = message->find_first_of(':', first_colon_pos + 1);
   89|  1.87M|    if ((next_colon_pos == string_piece::npos) ||
  ------------------
  |  Branch (89:9): [True: 94, False: 1.87M]
  ------------------
   90|  1.87M|        (next_colon_pos > next_colon_cutoff)) {
  ------------------
  |  Branch (90:9): [True: 0, False: 1.87M]
  ------------------
   91|       |      // No valid solution.
   92|     94|      return false;
   93|     94|    }
   94|  1.87M|    if (first_colon_pos + 1 == next_colon_pos) {
  ------------------
  |  Branch (94:9): [True: 0, False: 1.87M]
  ------------------
   95|       |      // There is no room for digits.
   96|      0|      continue;
   97|      0|    }
   98|  1.87M|    if ((message->data()[next_colon_pos + 1] != ' ')) {
  ------------------
  |  Branch (98:9): [True: 0, False: 1.87M]
  ------------------
   99|       |      // There is no space character after the second colon.
  100|      0|      continue;
  101|      0|    }
  102|  1.87M|    if (message->find_first_not_of("0123456789", first_colon_pos + 1) ==
  ------------------
  |  Branch (102:9): [True: 1.87M, False: 0]
  ------------------
  103|  1.87M|        next_colon_pos) {
  104|       |      // We found the first solution.
  105|  1.87M|      *source_name = message->substr(0, first_colon_pos);
  106|  1.87M|      *line_number = message->substr(first_colon_pos + 1,
  107|  1.87M|                                     next_colon_pos - 1 - first_colon_pos);
  108|  1.87M|      *message = message->substr(next_colon_pos + 2);
  109|  1.87M|      return true;
  110|  1.87M|    }
  111|  1.87M|  }
  112|       |
  113|    170|  return false;
  114|  1.87M|}
message.cc:_ZN12shaderc_util12_GLOBAL__N_116IsSummaryMessageERKNS_12string_pieceE:
  117|    264|bool IsSummaryMessage(const string_piece& message) {
  118|    264|  const size_t space_loc = message.find_first_of(' ');
  119|    264|  if (space_loc == string_piece::npos) return false;
  ------------------
  |  Branch (119:7): [True: 0, False: 264]
  ------------------
  120|    264|  const string_piece number = message.substr(0, space_loc);
  121|    264|  const string_piece rest = message.substr(space_loc + 1);
  122|    264|  if (!std::all_of(number.begin(), number.end(), ::isdigit)) return false;
  ------------------
  |  Branch (122:7): [True: 94, False: 170]
  ------------------
  123|    170|  if (!rest.starts_with("compilation errors.")) return false;
  ------------------
  |  Branch (123:7): [True: 0, False: 170]
  ------------------
  124|    170|  return true;
  125|    170|}

_ZN12shaderc_util19ParseVersionProfileERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEEPiP8EProfile:
   32|      2|                         EProfile* profile) {
   33|      2|  if (version_profile.size() < kMinVersionProfileLength ||
  ------------------
  |  Branch (33:7): [True: 0, False: 2]
  ------------------
   34|      2|      version_profile.size() > kMaxVersionProfileLength ||
  ------------------
  |  Branch (34:7): [True: 0, False: 2]
  ------------------
   35|      2|      !::isdigit(version_profile.front()))
  ------------------
  |  Branch (35:7): [True: 0, False: 2]
  ------------------
   36|      0|    return false;
   37|       |
   38|      2|  std::string profile_string;
   39|      2|  std::istringstream(version_profile) >> *version >> profile_string;
   40|       |
   41|      2|  if (!IsKnownVersion(*version)) {
  ------------------
  |  Branch (41:7): [True: 0, False: 2]
  ------------------
   42|      0|    return false;
   43|      0|  }
   44|      2|  if (profile_string.empty()) {
  ------------------
  |  Branch (44:7): [True: 0, False: 2]
  ------------------
   45|      0|    *profile = ENoProfile;
   46|      2|  } else if (profile_string == "core") {
  ------------------
  |  Branch (46:14): [True: 2, False: 0]
  ------------------
   47|      2|    *profile = ECoreProfile;
   48|      2|  } else if (profile_string == "es") {
  ------------------
  |  Branch (48:14): [True: 0, False: 0]
  ------------------
   49|      0|    *profile = EEsProfile;
   50|      0|  } else if (profile_string == "compatibility") {
  ------------------
  |  Branch (50:14): [True: 0, False: 0]
  ------------------
   51|      0|    *profile = ECompatibilityProfile;
   52|      0|  } else {
   53|      0|    return false;
   54|      0|  }
   55|       |
   56|      2|  return true;
   57|      2|}

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

_ZN7glslang11HlslGrammar5parseEv:
   65|     95|{
   66|     95|    advanceToken();
   67|     95|    return acceptCompilationUnit();
   68|     95|}
_ZN7glslang11HlslGrammar8expectedEPKc:
   71|     38|{
   72|     38|    parseContext.error(token.loc, "Expected", syntax, "");
   73|     38|}
_ZN7glslang11HlslGrammar16acceptIdentifierERNS_9HlslTokenE:
   87|   833k|{
   88|       |    // IDENTIFIER
   89|   833k|    if (peekTokenClass(EHTokIdentifier)) {
  ------------------
  |  Branch (89:9): [True: 196k, False: 636k]
  ------------------
   90|   196k|        idToken = token;
   91|   196k|        advanceToken();
   92|   196k|        return true;
   93|   196k|    }
   94|       |
   95|       |    // THIS
   96|       |    // -> maps to the IDENTIFIER spelled with the internal special name for 'this'
   97|   636k|    if (peekTokenClass(EHTokThis)) {
  ------------------
  |  Branch (97:9): [True: 0, False: 636k]
  ------------------
   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|   636k|    const char* idString = getTypeString(peek());
  113|   636k|    if (idString == nullptr)
  ------------------
  |  Branch (113:9): [True: 636k, False: 0]
  ------------------
  114|   636k|        return false;
  115|       |
  116|      0|    token.string     = NewPoolTString(idString);
  117|      0|    token.tokenClass = EHTokIdentifier;
  118|      0|    idToken = token;
  119|      0|    typeIdentifiers = true;
  120|       |
  121|      0|    advanceToken();
  122|       |
  123|      0|    return true;
  124|   636k|}
_ZN7glslang11HlslGrammar21acceptCompilationUnitEv:
  130|     95|{
  131|     95|    if (! acceptDeclarationList(unitNode))
  ------------------
  |  Branch (131:9): [True: 38, False: 57]
  ------------------
  132|     38|        return false;
  133|       |
  134|     57|    if (! peekTokenClass(EHTokNone))
  ------------------
  |  Branch (134:9): [True: 0, False: 57]
  ------------------
  135|      0|        return false;
  136|       |
  137|       |    // set root of AST
  138|     57|    if (unitNode && !unitNode->getAsAggregate())
  ------------------
  |  Branch (138:9): [True: 0, False: 57]
  |  Branch (138:21): [True: 0, False: 0]
  ------------------
  139|      0|        unitNode = intermediate.growAggregate(nullptr, unitNode);
  140|     57|    intermediate.setTreeRoot(unitNode);
  141|       |
  142|     57|    return true;
  143|     57|}
_ZN7glslang11HlslGrammar21acceptDeclarationListERP11TIntermNode:
  156|     95|{
  157|   196k|    do {
  158|       |        // HLSL allows extra semicolons between global declarations
  159|   196k|        do { } while (acceptTokenClass(EHTokSemicolon));
  ------------------
  |  Branch (159:23): [True: 0, False: 196k]
  ------------------
  160|       |
  161|       |        // EOF or RIGHT_BRACE
  162|   196k|        if (peekTokenClass(EHTokNone) || peekTokenClass(EHTokRightBrace))
  ------------------
  |  Branch (162:13): [True: 57, False: 196k]
  |  Branch (162:42): [True: 0, False: 196k]
  ------------------
  163|     57|            return true;
  164|       |
  165|       |        // declaration
  166|   196k|        if (! acceptDeclaration(nodeList)) {
  ------------------
  |  Branch (166:13): [True: 38, False: 196k]
  ------------------
  167|     38|            expected("declaration");
  168|     38|            return false;
  169|     38|        }
  170|   196k|    } while (true);
  ------------------
  |  Branch (170:14): [True: 196k, Folded]
  ------------------
  171|       |
  172|      0|    return true;
  173|     95|}
_ZN7glslang11HlslGrammar17acceptDeclarationERP11TIntermNode:
  334|   196k|{
  335|       |    // NAMESPACE IDENTIFIER LEFT_BRACE declaration_list RIGHT_BRACE
  336|   196k|    if (acceptTokenClass(EHTokNamespace)) {
  ------------------
  |  Branch (336:9): [True: 0, False: 196k]
  ------------------
  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|   196k|    bool declarator_list = false; // true when processing comma separation
  360|       |
  361|       |    // attributes
  362|   196k|    TFunctionDeclarator declarator;
  363|   196k|    acceptAttributes(declarator.attributes);
  364|       |
  365|       |    // typedef
  366|   196k|    bool typedefDecl = acceptTokenClass(EHTokTypedef);
  367|       |
  368|   196k|    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|   196k|    bool forbidDeclarators = (peekTokenClass(EHTokCBuffer) || peekTokenClass(EHTokTBuffer));
  ------------------
  |  Branch (379:31): [True: 0, False: 196k]
  |  Branch (379:63): [True: 0, False: 196k]
  ------------------
  380|       |    // fully_specified_type
  381|   196k|    if (! acceptFullySpecifiedType(declaredType, nodeList, declarator.attributes, forbidDeclarators))
  ------------------
  |  Branch (381:9): [True: 38, False: 196k]
  ------------------
  382|     38|        return false;
  383|       |
  384|       |    // cbuffer and tbuffer end with the closing '}'.
  385|       |    // No semicolon is included.
  386|   196k|    if (forbidDeclarators)
  ------------------
  |  Branch (386:9): [True: 0, False: 196k]
  ------------------
  387|      0|        return true;
  388|       |
  389|       |    // Check if there are invalid in/out qualifiers
  390|   196k|    switch (declaredType.getQualifier().storage) {
  391|      0|    case EvqIn:
  ------------------
  |  Branch (391:5): [True: 0, False: 196k]
  ------------------
  392|      0|    case EvqOut:
  ------------------
  |  Branch (392:5): [True: 0, False: 196k]
  ------------------
  393|      0|    case EvqInOut:
  ------------------
  |  Branch (393:5): [True: 0, False: 196k]
  ------------------
  394|      0|        parseContext.error(token.loc, "in/out qualifiers are only valid on parameters", token.getCStrOrEmpty(), "");
  395|      0|        break;
  396|   196k|    default:
  ------------------
  |  Branch (396:5): [True: 196k, False: 0]
  ------------------
  397|   196k|        break;
  398|   196k|    }
  399|       |
  400|       |    // declarator_list
  401|       |    //    : declarator
  402|       |    //         : identifier
  403|   196k|    HlslToken idToken;
  404|   196k|    TIntermAggregate* initializers = nullptr;
  405|   392k|    while (acceptIdentifier(idToken)) {
  ------------------
  |  Branch (405:12): [True: 196k, False: 196k]
  ------------------
  406|   196k|        TString *fullName = idToken.string;
  407|   196k|        if (parseContext.symbolTable.atGlobalLevel())
  ------------------
  |  Branch (407:13): [True: 196k, False: 0]
  ------------------
  408|   196k|            parseContext.getFullNamespaceName(fullName);
  409|   196k|        if (peekTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (409:13): [True: 196k, False: 0]
  ------------------
  410|       |            // looks like function parameters
  411|       |
  412|       |            // merge in the attributes into the return type
  413|   196k|            parseContext.transferTypeAttributes(token.loc, declarator.attributes, declaredType, true);
  414|       |
  415|       |            // Potentially rename shader entry point function.  No-op most of the time.
  416|   196k|            parseContext.renameShaderFunction(fullName);
  417|       |
  418|       |            // function_parameters
  419|   196k|            declarator.function = new TFunction(fullName, declaredType);
  420|   196k|            if (!acceptFunctionParameters(*declarator.function)) {
  ------------------
  |  Branch (420:17): [True: 0, False: 196k]
  ------------------
  421|      0|                expected("function parameter list");
  422|      0|                return false;
  423|      0|            }
  424|       |
  425|       |            // post_decls
  426|   196k|            acceptPostDecls(declarator.function->getWritableType().getQualifier());
  427|       |
  428|       |            // compound_statement (function body definition) or just a prototype?
  429|   196k|            declarator.loc = token.loc;
  430|   196k|            if (peekTokenClass(EHTokLeftBrace)) {
  ------------------
  |  Branch (430:17): [True: 0, False: 196k]
  ------------------
  431|      0|                if (declarator_list)
  ------------------
  |  Branch (431:21): [True: 0, False: 0]
  ------------------
  432|      0|                    parseContext.error(idToken.loc, "function body can't be in a declarator list", "{", "");
  433|      0|                if (typedefDecl)
  ------------------
  |  Branch (433:21): [True: 0, False: 0]
  ------------------
  434|      0|                    parseContext.error(idToken.loc, "function body can't be in a typedef", "{", "");
  435|      0|                return acceptFunctionDefinition(declarator, nodeList, nullptr);
  436|   196k|            } else {
  437|   196k|                if (typedefDecl)
  ------------------
  |  Branch (437:21): [True: 0, False: 196k]
  ------------------
  438|      0|                    parseContext.error(idToken.loc, "function typedefs not implemented", "{", "");
  439|   196k|                parseContext.handleFunctionDeclarator(declarator.loc, *declarator.function, true);
  440|   196k|            }
  441|   196k|        } else {
  442|       |            // A variable declaration.
  443|       |
  444|       |            // merge in the attributes, the first time around, into the shared type
  445|      0|            if (! declarator_list)
  ------------------
  |  Branch (445:17): [True: 0, False: 0]
  ------------------
  446|      0|                parseContext.transferTypeAttributes(token.loc, declarator.attributes, declaredType);
  447|       |
  448|       |            // Fix the storage qualifier if it's a global.
  449|      0|            if (declaredType.getQualifier().storage == EvqTemporary && parseContext.symbolTable.atGlobalLevel())
  ------------------
  |  Branch (449:17): [True: 0, False: 0]
  |  Branch (449:72): [True: 0, False: 0]
  ------------------
  450|      0|                declaredType.getQualifier().storage = EvqUniform;
  451|       |
  452|       |            // recognize array_specifier
  453|      0|            TArraySizes* arraySizes = nullptr;
  454|      0|            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|      0|            TType variableType;
  459|      0|            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|      0|            variableType.transferArraySizes(arraySizes);
  465|      0|            variableType.copyArrayInnerSizes(declaredType.getArraySizes());
  466|       |
  467|       |            // samplers accept immediate sampler state
  468|      0|            if (variableType.getBasicType() == EbtSampler) {
  ------------------
  |  Branch (468:17): [True: 0, False: 0]
  ------------------
  469|      0|                if (! acceptSamplerState())
  ------------------
  |  Branch (469:21): [True: 0, False: 0]
  ------------------
  470|      0|                    return false;
  471|      0|            }
  472|       |
  473|       |            // post_decls
  474|      0|            acceptPostDecls(variableType.getQualifier());
  475|       |
  476|       |            // EQUAL assignment_expression
  477|      0|            TIntermTyped* expressionNode = nullptr;
  478|      0|            if (acceptTokenClass(EHTokAssign)) {
  ------------------
  |  Branch (478:17): [True: 0, False: 0]
  ------------------
  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|      0|            if (!(variableType.getBasicType() == EbtString && !variableType.getQualifier().isConstant()) &&
  ------------------
  |  Branch (489:19): [True: 0, False: 0]
  |  Branch (489:63): [True: 0, False: 0]
  ------------------
  490|      0|                parseContext.getAnnotationNestingLevel() == 0) {
  ------------------
  |  Branch (490:17): [True: 0, False: 0]
  ------------------
  491|      0|                if (typedefDecl)
  ------------------
  |  Branch (491:21): [True: 0, False: 0]
  ------------------
  492|      0|                    parseContext.declareTypedef(idToken.loc, *fullName, variableType);
  493|      0|                else if (variableType.getBasicType() == EbtBlock) {
  ------------------
  |  Branch (493:26): [True: 0, False: 0]
  ------------------
  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|      0|                } else {
  499|      0|                    if (variableType.getQualifier().storage == EvqUniform && ! variableType.containsOpaque()) {
  ------------------
  |  Branch (499:25): [True: 0, False: 0]
  |  Branch (499:78): [True: 0, False: 0]
  ------------------
  500|       |                        // this isn't really an individual variable, but a member of the $Global buffer
  501|      0|                        parseContext.growGlobalUniformBlock(idToken.loc, variableType, *fullName);
  502|      0|                    } 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|      0|                        initializers = intermediate.growAggregate(initializers, 
  507|      0|                            parseContext.declareVariable(idToken.loc, *fullName, variableType, expressionNode),
  508|      0|                            idToken.loc);
  509|      0|                    }
  510|      0|                }
  511|      0|            }
  512|      0|        }
  513|       |
  514|       |        // COMMA
  515|   196k|        if (acceptTokenClass(EHTokComma))
  ------------------
  |  Branch (515:13): [True: 0, False: 196k]
  ------------------
  516|      0|            declarator_list = true;
  517|   196k|    }
  518|       |
  519|       |    // The top-level initializer node is a sequence.
  520|   196k|    if (initializers != nullptr)
  ------------------
  |  Branch (520:9): [True: 0, False: 196k]
  ------------------
  521|      0|        initializers->setOperator(EOpSequence);
  522|       |
  523|       |    // if we have a locally scoped static, it needs a globally scoped initializer
  524|   196k|    if (declaredType.getQualifier().storage == EvqGlobal && !parseContext.symbolTable.atGlobalLevel()) {
  ------------------
  |  Branch (524:9): [True: 0, False: 196k]
  |  Branch (524:61): [True: 0, False: 0]
  ------------------
  525|      0|        unitNode = intermediate.growAggregate(unitNode, initializers, idToken.loc);
  526|   196k|    } else {
  527|       |        // Add the initializers' aggregate to the nodeList we were handed.
  528|   196k|        if (nodeList)
  ------------------
  |  Branch (528:13): [True: 0, False: 196k]
  ------------------
  529|      0|            nodeList = intermediate.growAggregate(nodeList, initializers);
  530|   196k|        else
  531|   196k|            nodeList = initializers;
  532|   196k|    }
  533|       |
  534|       |    // SEMICOLON
  535|   196k|    if (! acceptTokenClass(EHTokSemicolon)) {
  ------------------
  |  Branch (535:9): [True: 0, False: 196k]
  ------------------
  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|      0|        if (peek() == EHTokAssign || peek() == EHTokLeftBracket || peek() == EHTokDot || peek() == EHTokComma)
  ------------------
  |  Branch (540:13): [True: 0, False: 0]
  |  Branch (540:38): [True: 0, False: 0]
  |  Branch (540:68): [True: 0, False: 0]
  |  Branch (540:90): [True: 0, False: 0]
  ------------------
  541|      0|            recedeToken();
  542|      0|        else
  543|      0|            expected(";");
  544|      0|        return false;
  545|      0|    }
  546|       |
  547|   196k|    return true;
  548|   196k|}
_ZN7glslang11HlslGrammar24acceptFullySpecifiedTypeERNS_5TTypeERKNS_5TListINS_14TAttributeArgsEEE:
  603|   440k|{
  604|   440k|    TIntermNode* nodeList = nullptr;
  605|   440k|    return acceptFullySpecifiedType(type, nodeList, attributes);
  606|   440k|}
_ZN7glslang11HlslGrammar24acceptFullySpecifiedTypeERNS_5TTypeERP11TIntermNodeRKNS_5TListINS_14TAttributeArgsEEEb:
  608|   636k|{
  609|       |    // type_qualifier
  610|   636k|    TQualifier qualifier;
  611|   636k|    qualifier.clear();
  612|   636k|    if (! acceptPreQualifier(qualifier))
  ------------------
  |  Branch (612:9): [True: 0, False: 636k]
  ------------------
  613|      0|        return false;
  614|   636k|    TSourceLoc loc = token.loc;
  615|       |
  616|       |    // type_specifier
  617|   636k|    if (! acceptType(type, nodeList)) {
  ------------------
  |  Branch (617:9): [True: 38, False: 636k]
  ------------------
  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|     38|        if (qualifier.sample)
  ------------------
  |  Branch (621:13): [True: 0, False: 38]
  ------------------
  622|      0|            recedeToken();
  623|       |
  624|     38|        return false;
  625|     38|    }
  626|       |
  627|       |    // type_qualifier
  628|   636k|    if (! acceptPostQualifier(qualifier))
  ------------------
  |  Branch (628:9): [True: 0, False: 636k]
  ------------------
  629|      0|       return false;
  630|       |
  631|   636k|    if (type.getBasicType() == EbtBlock) {
  ------------------
  |  Branch (631:9): [True: 0, False: 636k]
  ------------------
  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|   636k|    } else {
  644|       |        // Some qualifiers are set when parsing the type.  Merge those with
  645|       |        // whatever comes from acceptPreQualifier and acceptPostQualifier.
  646|   636k|        assert(qualifier.layoutFormat == ElfNone);
  647|       |
  648|   636k|        qualifier.layoutFormat = type.getQualifier().layoutFormat;
  649|   636k|        qualifier.precision    = type.getQualifier().precision;
  650|       |
  651|   636k|        if (type.getQualifier().storage == EvqOut ||
  ------------------
  |  Branch (651:13): [True: 0, False: 636k]
  ------------------
  652|   636k|            type.getQualifier().storage == EvqBuffer) {
  ------------------
  |  Branch (652:13): [True: 0, False: 636k]
  ------------------
  653|      0|            qualifier.storage      = type.getQualifier().storage;
  654|      0|            qualifier.readonly     = type.getQualifier().readonly;
  655|      0|        }
  656|       |
  657|   636k|        if (type.isBuiltIn())
  ------------------
  |  Branch (657:13): [True: 0, False: 636k]
  ------------------
  658|      0|            qualifier.builtIn = type.getQualifier().builtIn;
  659|       |
  660|   636k|        type.getQualifier() = qualifier;
  661|   636k|    }
  662|       |
  663|   636k|    return true;
  664|   636k|}
_ZN7glslang11HlslGrammar18acceptPreQualifierERNS_10TQualifierE:
  672|   636k|{
  673|   679k|    do {
  674|   679k|        switch (peek()) {
  675|      0|        case EHTokStatic:
  ------------------
  |  Branch (675:9): [True: 0, False: 679k]
  ------------------
  676|      0|            qualifier.storage = EvqGlobal;
  677|      0|            break;
  678|      0|        case EHTokExtern:
  ------------------
  |  Branch (678:9): [True: 0, False: 679k]
  ------------------
  679|       |            // TODO: no meaning in glslang?
  680|      0|            break;
  681|      0|        case EHTokShared:
  ------------------
  |  Branch (681:9): [True: 0, False: 679k]
  ------------------
  682|       |            // TODO: hint
  683|      0|            break;
  684|      0|        case EHTokGroupShared:
  ------------------
  |  Branch (684:9): [True: 0, False: 679k]
  ------------------
  685|      0|            qualifier.storage = EvqShared;
  686|      0|            break;
  687|      0|        case EHTokUniform:
  ------------------
  |  Branch (687:9): [True: 0, False: 679k]
  ------------------
  688|      0|            qualifier.storage = EvqUniform;
  689|      0|            break;
  690|      0|        case EHTokConst:
  ------------------
  |  Branch (690:9): [True: 0, False: 679k]
  ------------------
  691|      0|            qualifier.storage = EvqConst;
  692|      0|            break;
  693|      0|        case EHTokVolatile:
  ------------------
  |  Branch (693:9): [True: 0, False: 679k]
  ------------------
  694|      0|            qualifier.volatil = true;
  695|      0|            break;
  696|      0|        case EHTokLinear:
  ------------------
  |  Branch (696:9): [True: 0, False: 679k]
  ------------------
  697|      0|            qualifier.smooth = true;
  698|      0|            break;
  699|      0|        case EHTokCentroid:
  ------------------
  |  Branch (699:9): [True: 0, False: 679k]
  ------------------
  700|      0|            qualifier.centroid = true;
  701|      0|            break;
  702|      0|        case EHTokNointerpolation:
  ------------------
  |  Branch (702:9): [True: 0, False: 679k]
  ------------------
  703|      0|            qualifier.flat = true;
  704|      0|            break;
  705|      0|        case EHTokNoperspective:
  ------------------
  |  Branch (705:9): [True: 0, False: 679k]
  ------------------
  706|      0|            qualifier.nopersp = true;
  707|      0|            break;
  708|      0|        case EHTokSample:
  ------------------
  |  Branch (708:9): [True: 0, False: 679k]
  ------------------
  709|      0|            qualifier.sample = true;
  710|      0|            break;
  711|      0|        case EHTokRowMajor:
  ------------------
  |  Branch (711:9): [True: 0, False: 679k]
  ------------------
  712|      0|            qualifier.layoutMatrix = ElmColumnMajor;
  713|      0|            break;
  714|      0|        case EHTokColumnMajor:
  ------------------
  |  Branch (714:9): [True: 0, False: 679k]
  ------------------
  715|      0|            qualifier.layoutMatrix = ElmRowMajor;
  716|      0|            break;
  717|      0|        case EHTokPrecise:
  ------------------
  |  Branch (717:9): [True: 0, False: 679k]
  ------------------
  718|      0|            qualifier.noContraction = true;
  719|      0|            break;
  720|      0|        case EHTokIn:
  ------------------
  |  Branch (720:9): [True: 0, False: 679k]
  ------------------
  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|  42.6k|        case EHTokOut:
  ------------------
  |  Branch (725:9): [True: 42.6k, False: 636k]
  ------------------
  726|  42.6k|            qualifier.storage = (qualifier.storage == EvqIn) ? EvqInOut : EvqOut;
  ------------------
  |  Branch (726:33): [True: 0, False: 42.6k]
  ------------------
  727|  42.6k|            break;
  728|      0|        case EHTokInOut:
  ------------------
  |  Branch (728:9): [True: 0, False: 679k]
  ------------------
  729|      0|            qualifier.storage = EvqInOut;
  730|      0|            break;
  731|      0|        case EHTokLayout:
  ------------------
  |  Branch (731:9): [True: 0, False: 679k]
  ------------------
  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: 679k]
  ------------------
  736|      0|            qualifier.coherent = true;
  737|      0|            break;
  738|      0|        case EHTokInline:
  ------------------
  |  Branch (738:9): [True: 0, False: 679k]
  ------------------
  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: 679k]
  ------------------
  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: 679k]
  ------------------
  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: 679k]
  ------------------
  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|      0|        case EHTokLineAdj:
  ------------------
  |  Branch (759:9): [True: 0, False: 679k]
  ------------------
  760|      0|            qualifier.storage = EvqIn;
  761|      0|            if (!parseContext.handleInputGeometry(token.loc, ElgLinesAdjacency))
  ------------------
  |  Branch (761:17): [True: 0, False: 0]
  ------------------
  762|      0|                return false;
  763|      0|            break;
  764|      0|        case EHTokTriangleAdj:
  ------------------
  |  Branch (764:9): [True: 0, False: 679k]
  ------------------
  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|   636k|        default:
  ------------------
  |  Branch (770:9): [True: 636k, False: 42.6k]
  ------------------
  771|   636k|            return true;
  772|   679k|        }
  773|  42.6k|        advanceToken();
  774|  42.6k|    } while (true);
  ------------------
  |  Branch (774:14): [True: 42.6k, Folded]
  ------------------
  775|   636k|}
_ZN7glslang11HlslGrammar19acceptPostQualifierERNS_10TQualifierE:
  783|   636k|{
  784|   636k|    do {
  785|   636k|        switch (peek()) {
  786|      0|        case EHTokConst:
  ------------------
  |  Branch (786:9): [True: 0, False: 636k]
  ------------------
  787|      0|            qualifier.storage = EvqConst;
  788|      0|            break;
  789|   636k|        default:
  ------------------
  |  Branch (789:9): [True: 636k, False: 0]
  ------------------
  790|   636k|            return true;
  791|   636k|        }
  792|      0|        advanceToken();
  793|      0|    } while (true);
  ------------------
  |  Branch (793:14): [True: 0, Folded]
  ------------------
  794|   636k|}
_ZN7glslang11HlslGrammar22acceptSubpassInputTypeERNS_5TTypeE:
 1172|  1.17k|{
 1173|       |    // read subpass type
 1174|  1.17k|    const EHlslTokenClass subpassInputType = peek();
 1175|       |
 1176|  1.17k|    bool multisample;
 1177|       |
 1178|  1.17k|    switch (subpassInputType) {
 1179|    588|    case EHTokSubpassInput:   multisample = false; break;
  ------------------
  |  Branch (1179:5): [True: 588, False: 588]
  ------------------
 1180|    588|    case EHTokSubpassInputMS: multisample = true;  break;
  ------------------
  |  Branch (1180:5): [True: 588, False: 588]
  ------------------
 1181|      0|    default:
  ------------------
  |  Branch (1181:5): [True: 0, False: 1.17k]
  ------------------
 1182|      0|        return false;  // not a subpass input declaration
 1183|  1.17k|    }
 1184|       |
 1185|  1.17k|    advanceToken();  // consume the sampler type keyword
 1186|       |
 1187|  1.17k|    TType subpassType(EbtFloat, EvqUniform, 4); // default type is float4
 1188|       |
 1189|  1.17k|    if (acceptTokenClass(EHTokLeftAngle)) {
  ------------------
  |  Branch (1189:9): [True: 1.17k, False: 0]
  ------------------
 1190|  1.17k|        if (! acceptType(subpassType)) {
  ------------------
  |  Branch (1190:13): [True: 0, False: 1.17k]
  ------------------
 1191|      0|            expected("scalar or vector type");
 1192|      0|            return false;
 1193|      0|        }
 1194|       |
 1195|  1.17k|        const TBasicType basicRetType = subpassType.getBasicType() ;
 1196|       |
 1197|  1.17k|        switch (basicRetType) {
 1198|    392|        case EbtFloat:
  ------------------
  |  Branch (1198:9): [True: 392, False: 784]
  ------------------
 1199|    784|        case EbtUint:
  ------------------
  |  Branch (1199:9): [True: 392, False: 784]
  ------------------
 1200|  1.17k|        case EbtInt:
  ------------------
  |  Branch (1200:9): [True: 392, False: 784]
  ------------------
 1201|  1.17k|        case EbtStruct:
  ------------------
  |  Branch (1201:9): [True: 0, False: 1.17k]
  ------------------
 1202|  1.17k|            break;
 1203|      0|        default:
  ------------------
  |  Branch (1203:9): [True: 0, False: 1.17k]
  ------------------
 1204|      0|            unimplemented("basic type in subpass input");
 1205|      0|            return false;
 1206|  1.17k|        }
 1207|       |
 1208|  1.17k|        if (! acceptTokenClass(EHTokRightAngle)) {
  ------------------
  |  Branch (1208:13): [True: 0, False: 1.17k]
  ------------------
 1209|      0|            expected("right angle bracket");
 1210|      0|            return false;
 1211|      0|        }
 1212|  1.17k|    }
 1213|       |
 1214|  1.17k|    const TBasicType subpassBasicType = subpassType.isStruct() ? (*subpassType.getStruct())[0].type->getBasicType()
  ------------------
  |  Branch (1214:41): [True: 0, False: 1.17k]
  ------------------
 1215|  1.17k|        : subpassType.getBasicType();
 1216|       |
 1217|  1.17k|    TSampler sampler;
 1218|  1.17k|    sampler.setSubpass(subpassBasicType, multisample);
 1219|       |
 1220|       |    // Remember the declared return type.  Function returns false on error.
 1221|  1.17k|    if (!parseContext.setTextureReturnType(sampler, subpassType, token.loc))
  ------------------
  |  Branch (1221:9): [True: 0, False: 1.17k]
  ------------------
 1222|      0|        return false;
 1223|       |
 1224|  1.17k|    type.shallowCopy(TType(sampler, EvqUniform));
 1225|       |
 1226|  1.17k|    return true;
 1227|  1.17k|}
_ZN7glslang11HlslGrammar17acceptSamplerTypeERNS_5TTypeE:
 1281|  30.5k|{
 1282|       |    // read sampler type
 1283|  30.5k|    const EHlslTokenClass samplerType = peek();
 1284|       |
 1285|       |    // TODO: for DX9
 1286|       |    // TSamplerDim dim = EsdNone;
 1287|       |
 1288|  30.5k|    bool isShadow = false;
 1289|       |
 1290|  30.5k|    switch (samplerType) {
 1291|  17.9k|    case EHTokSampler:      break;
  ------------------
  |  Branch (1291:5): [True: 17.9k, False: 12.6k]
  ------------------
 1292|      0|    case EHTokSampler1d:    /*dim = Esd1D*/; break;
  ------------------
  |  Branch (1292:5): [True: 0, False: 30.5k]
  ------------------
 1293|    294|    case EHTokSampler2d:    /*dim = Esd2D*/; break;
  ------------------
  |  Branch (1293:5): [True: 294, False: 30.2k]
  ------------------
 1294|    294|    case EHTokSampler3d:    /*dim = Esd3D*/; break;
  ------------------
  |  Branch (1294:5): [True: 294, False: 30.2k]
  ------------------
 1295|    294|    case EHTokSamplerCube:  /*dim = EsdCube*/; break;
  ------------------
  |  Branch (1295:5): [True: 294, False: 30.2k]
  ------------------
 1296|      0|    case EHTokSamplerState: break;
  ------------------
  |  Branch (1296:5): [True: 0, False: 30.5k]
  ------------------
 1297|  11.7k|    case EHTokSamplerComparisonState: isShadow = true; break;
  ------------------
  |  Branch (1297:5): [True: 11.7k, False: 18.8k]
  ------------------
 1298|      0|    default:
  ------------------
  |  Branch (1298:5): [True: 0, False: 30.5k]
  ------------------
 1299|      0|        return false;  // not a sampler declaration
 1300|  30.5k|    }
 1301|       |
 1302|  30.5k|    advanceToken();  // consume the sampler type keyword
 1303|       |
 1304|  30.5k|    TArraySizes* arraySizes = nullptr; // TODO: array
 1305|       |
 1306|  30.5k|    TSampler sampler;
 1307|  30.5k|    sampler.setPureSampler(isShadow);
 1308|       |
 1309|  30.5k|    type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
 1310|       |
 1311|  30.5k|    return true;
 1312|  30.5k|}
_ZN7glslang11HlslGrammar17acceptTextureTypeERNS_5TTypeE:
 1333|  38.6k|{
 1334|  38.6k|    const EHlslTokenClass textureType = peek();
 1335|       |
 1336|  38.6k|    TSamplerDim dim = EsdNone;
 1337|  38.6k|    bool array = false;
 1338|  38.6k|    bool ms    = false;
 1339|  38.6k|    bool image = false;
 1340|  38.6k|    bool combined = true;
 1341|       |
 1342|  38.6k|    switch (textureType) {
 1343|    147|    case EHTokBuffer:            dim = EsdBuffer; combined = false;    break;
  ------------------
  |  Branch (1343:5): [True: 147, False: 38.5k]
  ------------------
 1344|  2.94k|    case EHTokTexture1d:         dim = Esd1D;                          break;
  ------------------
  |  Branch (1344:5): [True: 2.94k, False: 35.7k]
  ------------------
 1345|  2.94k|    case EHTokTexture1darray:    dim = Esd1D; array = true;            break;
  ------------------
  |  Branch (1345:5): [True: 2.94k, False: 35.7k]
  ------------------
 1346|  9.84k|    case EHTokTexture2d:         dim = Esd2D;                          break;
  ------------------
  |  Branch (1346:5): [True: 9.84k, False: 28.8k]
  ------------------
 1347|  9.84k|    case EHTokTexture2darray:    dim = Esd2D; array = true;            break;
  ------------------
  |  Branch (1347:5): [True: 9.84k, False: 28.8k]
  ------------------
 1348|  2.35k|    case EHTokTexture3d:         dim = Esd3D;                          break;
  ------------------
  |  Branch (1348:5): [True: 2.35k, False: 36.3k]
  ------------------
 1349|  3.23k|    case EHTokTextureCube:       dim = EsdCube;                        break;
  ------------------
  |  Branch (1349:5): [True: 3.23k, False: 35.4k]
  ------------------
 1350|  3.23k|    case EHTokTextureCubearray:  dim = EsdCube; array = true;          break;
  ------------------
  |  Branch (1350:5): [True: 3.23k, False: 35.4k]
  ------------------
 1351|    735|    case EHTokTexture2DMS:       dim = Esd2D; ms = true;               break;
  ------------------
  |  Branch (1351:5): [True: 735, False: 37.9k]
  ------------------
 1352|    735|    case EHTokTexture2DMSarray:  dim = Esd2D; array = true; ms = true; break;
  ------------------
  |  Branch (1352:5): [True: 735, False: 37.9k]
  ------------------
 1353|    441|    case EHTokRWBuffer:          dim = EsdBuffer; image=true;          break;
  ------------------
  |  Branch (1353:5): [True: 441, False: 38.2k]
  ------------------
 1354|    441|    case EHTokRWTexture1d:       dim = Esd1D; array=false; image=true; break;
  ------------------
  |  Branch (1354:5): [True: 441, False: 38.2k]
  ------------------
 1355|    441|    case EHTokRWTexture1darray:  dim = Esd1D; array=true;  image=true; break;
  ------------------
  |  Branch (1355:5): [True: 441, False: 38.2k]
  ------------------
 1356|    441|    case EHTokRWTexture2d:       dim = Esd2D; array=false; image=true; break;
  ------------------
  |  Branch (1356:5): [True: 441, False: 38.2k]
  ------------------
 1357|    441|    case EHTokRWTexture2darray:  dim = Esd2D; array=true;  image=true; break;
  ------------------
  |  Branch (1357:5): [True: 441, False: 38.2k]
  ------------------
 1358|    441|    case EHTokRWTexture3d:       dim = Esd3D; array=false; image=true; break;
  ------------------
  |  Branch (1358:5): [True: 441, False: 38.2k]
  ------------------
 1359|      0|    default:
  ------------------
  |  Branch (1359:5): [True: 0, False: 38.6k]
  ------------------
 1360|      0|        return false;  // not a texture declaration
 1361|  38.6k|    }
 1362|       |
 1363|  38.6k|    advanceToken();  // consume the texture object keyword
 1364|       |
 1365|  38.6k|    TType txType(EbtFloat, EvqUniform, 4); // default type is float4
 1366|       |
 1367|  38.6k|    TIntermTyped* msCount = nullptr;
 1368|       |
 1369|       |    // texture type: required for multisample types and RWBuffer/RWTextures!
 1370|  38.6k|    if (acceptTokenClass(EHTokLeftAngle)) {
  ------------------
  |  Branch (1370:9): [True: 38.6k, False: 0]
  ------------------
 1371|  38.6k|        if (! acceptType(txType)) {
  ------------------
  |  Branch (1371:13): [True: 0, False: 38.6k]
  ------------------
 1372|      0|            expected("scalar or vector type");
 1373|      0|            return false;
 1374|      0|        }
 1375|       |
 1376|  38.6k|        const TBasicType basicRetType = txType.getBasicType() ;
 1377|       |
 1378|  38.6k|        switch (basicRetType) {
 1379|  12.8k|        case EbtFloat:
  ------------------
  |  Branch (1379:9): [True: 12.8k, False: 25.7k]
  ------------------
 1380|  25.7k|        case EbtUint:
  ------------------
  |  Branch (1380:9): [True: 12.8k, False: 25.7k]
  ------------------
 1381|  38.6k|        case EbtInt:
  ------------------
  |  Branch (1381:9): [True: 12.8k, False: 25.7k]
  ------------------
 1382|  38.6k|        case EbtStruct:
  ------------------
  |  Branch (1382:9): [True: 0, False: 38.6k]
  ------------------
 1383|  38.6k|            break;
 1384|      0|        default:
  ------------------
  |  Branch (1384:9): [True: 0, False: 38.6k]
  ------------------
 1385|      0|            unimplemented("basic type in texture");
 1386|      0|            return false;
 1387|  38.6k|        }
 1388|       |
 1389|       |        // Buffers can handle small mats if they fit in 4 components
 1390|  38.6k|        if (dim == EsdBuffer && txType.isMatrix()) {
  ------------------
  |  Branch (1390:13): [True: 588, False: 38.0k]
  |  Branch (1390:33): [True: 0, False: 588]
  ------------------
 1391|      0|            if ((txType.getMatrixCols() * txType.getMatrixRows()) > 4) {
  ------------------
  |  Branch (1391:17): [True: 0, False: 0]
  ------------------
 1392|      0|                expected("components < 4 in matrix buffer type");
 1393|      0|                return false;
 1394|      0|            }
 1395|       |
 1396|       |            // TODO: except we don't handle it yet...
 1397|      0|            unimplemented("matrix type in buffer");
 1398|      0|            return false;
 1399|      0|        }
 1400|       |
 1401|  38.6k|        if (!txType.isScalar() && !txType.isVector() && !txType.isStruct()) {
  ------------------
  |  Branch (1401:13): [True: 38.6k, False: 0]
  |  Branch (1401:35): [True: 0, False: 38.6k]
  |  Branch (1401:57): [True: 0, False: 0]
  ------------------
 1402|      0|            expected("scalar, vector, or struct type");
 1403|      0|            return false;
 1404|      0|        }
 1405|       |
 1406|  38.6k|        if (ms && acceptTokenClass(EHTokComma)) {
  ------------------
  |  Branch (1406:13): [True: 1.47k, False: 37.1k]
  |  Branch (1406:19): [True: 0, False: 1.47k]
  ------------------
 1407|       |            // read sample count for multisample types, if given
 1408|      0|            if (! peekTokenClass(EHTokIntConstant)) {
  ------------------
  |  Branch (1408:17): [True: 0, False: 0]
  ------------------
 1409|      0|                expected("multisample count");
 1410|      0|                return false;
 1411|      0|            }
 1412|       |
 1413|      0|            if (! acceptLiteral(msCount))  // should never fail, since we just found an integer
  ------------------
  |  Branch (1413:17): [True: 0, False: 0]
  ------------------
 1414|      0|                return false;
 1415|      0|        }
 1416|       |
 1417|  38.6k|        if (! acceptTokenClass(EHTokRightAngle)) {
  ------------------
  |  Branch (1417:13): [True: 0, False: 38.6k]
  ------------------
 1418|      0|            expected("right angle bracket");
 1419|      0|            return false;
 1420|      0|        }
 1421|  38.6k|    } else if (ms) {
  ------------------
  |  Branch (1421:16): [True: 0, False: 0]
  ------------------
 1422|      0|        expected("texture type for multisample");
 1423|      0|        return false;
 1424|      0|    } else if (image) {
  ------------------
  |  Branch (1424:16): [True: 0, False: 0]
  ------------------
 1425|      0|        expected("type for RWTexture/RWBuffer");
 1426|      0|        return false;
 1427|      0|    }
 1428|       |
 1429|  38.6k|    TArraySizes* arraySizes = nullptr;
 1430|  38.6k|    const bool shadow = false; // declared on the sampler
 1431|       |
 1432|  38.6k|    TSampler sampler;
 1433|  38.6k|    TLayoutFormat format = ElfNone;
 1434|       |
 1435|       |    // Buffer, RWBuffer and RWTexture (images) require a TLayoutFormat.  We handle only a limit set.
 1436|  38.6k|    if (image || dim == EsdBuffer)
  ------------------
  |  Branch (1436:9): [True: 2.64k, False: 36.0k]
  |  Branch (1436:18): [True: 147, False: 35.8k]
  ------------------
 1437|  2.79k|        format = parseContext.getLayoutFromTxType(token.loc, txType);
 1438|       |
 1439|  38.6k|    const TBasicType txBasicType = txType.isStruct() ? (*txType.getStruct())[0].type->getBasicType()
  ------------------
  |  Branch (1439:36): [True: 0, False: 38.6k]
  ------------------
 1440|  38.6k|        : txType.getBasicType();
 1441|       |
 1442|       |    // Non-image Buffers are combined
 1443|  38.6k|    if (dim == EsdBuffer && !image) {
  ------------------
  |  Branch (1443:9): [True: 588, False: 38.0k]
  |  Branch (1443:29): [True: 147, False: 441]
  ------------------
 1444|    147|        sampler.set(txType.getBasicType(), dim, array);
 1445|  38.5k|    } else {
 1446|       |        // DX10 textures are separated.  TODO: DX9.
 1447|  38.5k|        if (image) {
  ------------------
  |  Branch (1447:13): [True: 2.64k, False: 35.8k]
  ------------------
 1448|  2.64k|            sampler.setImage(txBasicType, dim, array, shadow, ms);
 1449|  35.8k|        } else {
 1450|  35.8k|            sampler.setTexture(txBasicType, dim, array, shadow, ms);
 1451|  35.8k|        }
 1452|  38.5k|    }
 1453|       |
 1454|       |    // Remember the declared return type.  Function returns false on error.
 1455|  38.6k|    if (!parseContext.setTextureReturnType(sampler, txType, token.loc))
  ------------------
  |  Branch (1455:9): [True: 0, False: 38.6k]
  ------------------
 1456|      0|        return false;
 1457|       |
 1458|       |    // Force uncombined, if necessary
 1459|  38.6k|    if (!combined)
  ------------------
  |  Branch (1459:9): [True: 147, False: 38.5k]
  ------------------
 1460|    147|        sampler.combined = false;
 1461|       |
 1462|  38.6k|    type.shallowCopy(TType(sampler, EvqUniform, arraySizes));
 1463|  38.6k|    type.getQualifier().layoutFormat = format;
 1464|       |
 1465|  38.6k|    return true;
 1466|  38.6k|}
_ZN7glslang11HlslGrammar10acceptTypeERNS_5TTypeE:
 1472|  39.8k|{
 1473|  39.8k|    TIntermNode* nodeList = nullptr;
 1474|  39.8k|    return acceptType(type, nodeList);
 1475|  39.8k|}
_ZN7glslang11HlslGrammar10acceptTypeERNS_5TTypeERP11TIntermNode:
 1477|   676k|{
 1478|       |    // Basic types for min* types, use native halfs if the option allows them.
 1479|   676k|    bool enable16BitTypes = parseContext.hlslEnable16BitTypes();
 1480|       |
 1481|   676k|    const TBasicType min16float_bt = enable16BitTypes ? EbtFloat16 : EbtFloat;
  ------------------
  |  Branch (1481:38): [True: 36, False: 676k]
  ------------------
 1482|   676k|    const TBasicType min10float_bt = enable16BitTypes ? EbtFloat16 : EbtFloat;
  ------------------
  |  Branch (1482:38): [True: 36, False: 676k]
  ------------------
 1483|   676k|    const TBasicType half_bt       = enable16BitTypes ? EbtFloat16 : EbtFloat;
  ------------------
  |  Branch (1483:38): [True: 36, False: 676k]
  ------------------
 1484|   676k|    const TBasicType min16int_bt   = enable16BitTypes ? EbtInt16   : EbtInt;
  ------------------
  |  Branch (1484:38): [True: 36, False: 676k]
  ------------------
 1485|   676k|    const TBasicType min12int_bt   = enable16BitTypes ? EbtInt16   : EbtInt;
  ------------------
  |  Branch (1485:38): [True: 36, False: 676k]
  ------------------
 1486|   676k|    const TBasicType min16uint_bt  = enable16BitTypes ? EbtUint16  : EbtUint;
  ------------------
  |  Branch (1486:38): [True: 36, False: 676k]
  ------------------
 1487|       |
 1488|       |    // Some types might have turned into identifiers. Take the hit for checking
 1489|       |    // when this has happened.
 1490|   676k|    if (typeIdentifiers) {
  ------------------
  |  Branch (1490:9): [True: 0, False: 676k]
  ------------------
 1491|      0|        const char* identifierString = getTypeString(peek());
 1492|      0|        if (identifierString != nullptr) {
  ------------------
  |  Branch (1492:13): [True: 0, False: 0]
  ------------------
 1493|      0|            TString name = identifierString;
 1494|       |            // if it's an identifier, it's not a type
 1495|      0|            if (parseContext.symbolTable.find(name) != nullptr)
  ------------------
  |  Branch (1495:17): [True: 0, False: 0]
  ------------------
 1496|      0|                return false;
 1497|      0|        }
 1498|      0|    }
 1499|       |
 1500|   676k|    bool isUnorm = false;
 1501|   676k|    bool isSnorm = false;
 1502|       |
 1503|       |    // Accept snorm and unorm.  Presently, this is ignored, save for an error check below.
 1504|   676k|    switch (peek()) {
 1505|      0|    case EHTokUnorm:
  ------------------
  |  Branch (1505:5): [True: 0, False: 676k]
  ------------------
 1506|      0|        isUnorm = true;
 1507|      0|        advanceToken();  // eat the token
 1508|      0|        break;
 1509|      0|    case EHTokSNorm:
  ------------------
  |  Branch (1509:5): [True: 0, False: 676k]
  ------------------
 1510|      0|        isSnorm = true;
 1511|      0|        advanceToken();  // eat the token
 1512|      0|        break;
 1513|   676k|    default:
  ------------------
  |  Branch (1513:5): [True: 676k, False: 0]
  ------------------
 1514|   676k|        break;
 1515|   676k|    }
 1516|       |
 1517|   676k|    switch (peek()) {
 1518|      0|    case EHTokVector:
  ------------------
  |  Branch (1518:5): [True: 0, False: 676k]
  ------------------
 1519|      0|        return acceptVectorTemplateType(type);
 1520|      0|        break;
 1521|       |
 1522|      0|    case EHTokMatrix:
  ------------------
  |  Branch (1522:5): [True: 0, False: 676k]
  ------------------
 1523|      0|        return acceptMatrixTemplateType(type);
 1524|      0|        break;
 1525|       |
 1526|      0|    case EHTokPointStream:            // fall through
  ------------------
  |  Branch (1526:5): [True: 0, False: 676k]
  ------------------
 1527|      0|    case EHTokLineStream:             // ...
  ------------------
  |  Branch (1527:5): [True: 0, False: 676k]
  ------------------
 1528|      0|    case EHTokTriangleStream:         // ...
  ------------------
  |  Branch (1528:5): [True: 0, False: 676k]
  ------------------
 1529|      0|        {
 1530|      0|            TLayoutGeometry geometry;
 1531|      0|            if (! acceptStreamOutTemplateType(type, geometry))
  ------------------
  |  Branch (1531:17): [True: 0, False: 0]
  ------------------
 1532|      0|                return false;
 1533|       |
 1534|      0|            if (! parseContext.handleOutputGeometry(token.loc, geometry))
  ------------------
  |  Branch (1534:17): [True: 0, False: 0]
  ------------------
 1535|      0|                return false;
 1536|       |
 1537|      0|            return true;
 1538|      0|        }
 1539|       |
 1540|      0|    case EHTokInputPatch:             // fall through
  ------------------
  |  Branch (1540:5): [True: 0, False: 676k]
  ------------------
 1541|      0|    case EHTokOutputPatch:            // ...
  ------------------
  |  Branch (1541:5): [True: 0, False: 676k]
  ------------------
 1542|      0|        {
 1543|      0|            if (! acceptTessellationPatchTemplateType(type))
  ------------------
  |  Branch (1543:17): [True: 0, False: 0]
  ------------------
 1544|      0|                return false;
 1545|       |
 1546|      0|            return true;
 1547|      0|        }
 1548|       |
 1549|  17.9k|    case EHTokSampler:                // fall through
  ------------------
  |  Branch (1549:5): [True: 17.9k, False: 658k]
  ------------------
 1550|  17.9k|    case EHTokSampler1d:              // ...
  ------------------
  |  Branch (1550:5): [True: 0, False: 676k]
  ------------------
 1551|  18.2k|    case EHTokSampler2d:              // ...
  ------------------
  |  Branch (1551:5): [True: 294, False: 676k]
  ------------------
 1552|  18.5k|    case EHTokSampler3d:              // ...
  ------------------
  |  Branch (1552:5): [True: 294, False: 676k]
  ------------------
 1553|  18.8k|    case EHTokSamplerCube:            // ...
  ------------------
  |  Branch (1553:5): [True: 294, False: 676k]
  ------------------
 1554|  18.8k|        if (parseContext.hlslDX9Compatible())
  ------------------
  |  Branch (1554:13): [True: 0, False: 18.8k]
  ------------------
 1555|      0|            return acceptSamplerTypeDX9(type);
 1556|  18.8k|        else
 1557|  18.8k|            return acceptSamplerType(type);
 1558|      0|        break;
 1559|       |
 1560|      0|    case EHTokSamplerState:           // fall through
  ------------------
  |  Branch (1560:5): [True: 0, False: 676k]
  ------------------
 1561|  11.7k|    case EHTokSamplerComparisonState: // ...
  ------------------
  |  Branch (1561:5): [True: 11.7k, False: 665k]
  ------------------
 1562|  11.7k|        return acceptSamplerType(type);
 1563|      0|        break;
 1564|       |
 1565|    588|    case EHTokSubpassInput:           // fall through
  ------------------
  |  Branch (1565:5): [True: 588, False: 676k]
  ------------------
 1566|  1.17k|    case EHTokSubpassInputMS:         // ...
  ------------------
  |  Branch (1566:5): [True: 588, False: 676k]
  ------------------
 1567|  1.17k|        return acceptSubpassInputType(type);
 1568|      0|        break;
 1569|       |
 1570|    147|    case EHTokBuffer:                 // fall through
  ------------------
  |  Branch (1570:5): [True: 147, False: 676k]
  ------------------
 1571|  3.08k|    case EHTokTexture1d:              // ...
  ------------------
  |  Branch (1571:5): [True: 2.94k, False: 673k]
  ------------------
 1572|  6.02k|    case EHTokTexture1darray:         // ...
  ------------------
  |  Branch (1572:5): [True: 2.94k, False: 673k]
  ------------------
 1573|  15.8k|    case EHTokTexture2d:              // ...
  ------------------
  |  Branch (1573:5): [True: 9.84k, False: 666k]
  ------------------
 1574|  25.7k|    case EHTokTexture2darray:         // ...
  ------------------
  |  Branch (1574:5): [True: 9.84k, False: 666k]
  ------------------
 1575|  28.0k|    case EHTokTexture3d:              // ...
  ------------------
  |  Branch (1575:5): [True: 2.35k, False: 674k]
  ------------------
 1576|  31.3k|    case EHTokTextureCube:            // ...
  ------------------
  |  Branch (1576:5): [True: 3.23k, False: 673k]
  ------------------
 1577|  34.5k|    case EHTokTextureCubearray:       // ...
  ------------------
  |  Branch (1577:5): [True: 3.23k, False: 673k]
  ------------------
 1578|  35.2k|    case EHTokTexture2DMS:            // ...
  ------------------
  |  Branch (1578:5): [True: 735, False: 676k]
  ------------------
 1579|  36.0k|    case EHTokTexture2DMSarray:       // ...
  ------------------
  |  Branch (1579:5): [True: 735, False: 676k]
  ------------------
 1580|  36.4k|    case EHTokRWTexture1d:            // ...
  ------------------
  |  Branch (1580:5): [True: 441, False: 676k]
  ------------------
 1581|  36.8k|    case EHTokRWTexture1darray:       // ...
  ------------------
  |  Branch (1581:5): [True: 441, False: 676k]
  ------------------
 1582|  37.3k|    case EHTokRWTexture2d:            // ...
  ------------------
  |  Branch (1582:5): [True: 441, False: 676k]
  ------------------
 1583|  37.7k|    case EHTokRWTexture2darray:       // ...
  ------------------
  |  Branch (1583:5): [True: 441, False: 676k]
  ------------------
 1584|  38.2k|    case EHTokRWTexture3d:            // ...
  ------------------
  |  Branch (1584:5): [True: 441, False: 676k]
  ------------------
 1585|  38.6k|    case EHTokRWBuffer:               // ...
  ------------------
  |  Branch (1585:5): [True: 441, False: 676k]
  ------------------
 1586|  38.6k|        return acceptTextureType(type);
 1587|      0|        break;
 1588|       |
 1589|      0|    case EHTokAppendStructuredBuffer:
  ------------------
  |  Branch (1589:5): [True: 0, False: 676k]
  ------------------
 1590|      0|    case EHTokByteAddressBuffer:
  ------------------
  |  Branch (1590:5): [True: 0, False: 676k]
  ------------------
 1591|      0|    case EHTokConsumeStructuredBuffer:
  ------------------
  |  Branch (1591:5): [True: 0, False: 676k]
  ------------------
 1592|      0|    case EHTokRWByteAddressBuffer:
  ------------------
  |  Branch (1592:5): [True: 0, False: 676k]
  ------------------
 1593|      0|    case EHTokRWStructuredBuffer:
  ------------------
  |  Branch (1593:5): [True: 0, False: 676k]
  ------------------
 1594|      0|    case EHTokStructuredBuffer:
  ------------------
  |  Branch (1594:5): [True: 0, False: 676k]
  ------------------
 1595|      0|        return acceptStructBufferType(type);
 1596|      0|        break;
 1597|       |
 1598|      0|    case EHTokTextureBuffer:
  ------------------
  |  Branch (1598:5): [True: 0, False: 676k]
  ------------------
 1599|      0|        return acceptTextureBufferType(type);
 1600|      0|        break;
 1601|       |
 1602|      0|    case EHTokConstantBuffer:
  ------------------
  |  Branch (1602:5): [True: 0, False: 676k]
  ------------------
 1603|      0|        return acceptConstantBufferType(type);
 1604|       |
 1605|      0|    case EHTokClass:
  ------------------
  |  Branch (1605:5): [True: 0, False: 676k]
  ------------------
 1606|      0|    case EHTokStruct:
  ------------------
  |  Branch (1606:5): [True: 0, False: 676k]
  ------------------
 1607|      0|    case EHTokCBuffer:
  ------------------
  |  Branch (1607:5): [True: 0, False: 676k]
  ------------------
 1608|      0|    case EHTokTBuffer:
  ------------------
  |  Branch (1608:5): [True: 0, False: 676k]
  ------------------
 1609|      0|        return acceptStruct(type, nodeList);
 1610|       |
 1611|     24|    case EHTokIdentifier:
  ------------------
  |  Branch (1611:5): [True: 24, False: 676k]
  ------------------
 1612|       |        // An identifier could be for a user-defined type.
 1613|       |        // Note we cache the symbol table lookup, to save for a later rule
 1614|       |        // when this is not a type.
 1615|     24|        if (parseContext.lookupUserType(*token.string, type) != nullptr) {
  ------------------
  |  Branch (1615:13): [True: 0, False: 24]
  ------------------
 1616|      0|            advanceToken();
 1617|      0|            return true;
 1618|      0|        } else
 1619|     24|            return false;
 1620|       |
 1621|  43.7k|    case EHTokVoid:
  ------------------
  |  Branch (1621:5): [True: 43.7k, False: 633k]
  ------------------
 1622|  43.7k|        new(&type) TType(EbtVoid);
 1623|  43.7k|        break;
 1624|       |
 1625|      0|    case EHTokString:
  ------------------
  |  Branch (1625:5): [True: 0, False: 676k]
  ------------------
 1626|      0|        new(&type) TType(EbtString);
 1627|      0|        break;
 1628|       |
 1629|  46.3k|    case EHTokFloat:
  ------------------
  |  Branch (1629:5): [True: 46.3k, False: 630k]
  ------------------
 1630|  46.3k|        new(&type) TType(EbtFloat);
 1631|  46.3k|        break;
 1632|  3.82k|    case EHTokFloat1:
  ------------------
  |  Branch (1632:5): [True: 3.82k, False: 672k]
  ------------------
 1633|  3.82k|        new(&type) TType(EbtFloat);
 1634|  3.82k|        type.makeVector();
 1635|  3.82k|        break;
 1636|  31.5k|    case EHTokFloat2:
  ------------------
  |  Branch (1636:5): [True: 31.5k, False: 645k]
  ------------------
 1637|  31.5k|        new(&type) TType(EbtFloat, EvqTemporary, 2);
 1638|  31.5k|        break;
 1639|  26.9k|    case EHTokFloat3:
  ------------------
  |  Branch (1639:5): [True: 26.9k, False: 649k]
  ------------------
 1640|  26.9k|        new(&type) TType(EbtFloat, EvqTemporary, 3);
 1641|  26.9k|        break;
 1642|  28.0k|    case EHTokFloat4:
  ------------------
  |  Branch (1642:5): [True: 28.0k, False: 648k]
  ------------------
 1643|  28.0k|        new(&type) TType(EbtFloat, EvqTemporary, 4);
 1644|  28.0k|        break;
 1645|       |
 1646|  2.20k|    case EHTokDouble:
  ------------------
  |  Branch (1646:5): [True: 2.20k, False: 674k]
  ------------------
 1647|  2.20k|        new(&type) TType(EbtDouble);
 1648|  2.20k|        break;
 1649|      0|    case EHTokDouble1:
  ------------------
  |  Branch (1649:5): [True: 0, False: 676k]
  ------------------
 1650|      0|        new(&type) TType(EbtDouble);
 1651|      0|        type.makeVector();
 1652|      0|        break;
 1653|  2.20k|    case EHTokDouble2:
  ------------------
  |  Branch (1653:5): [True: 2.20k, False: 674k]
  ------------------
 1654|  2.20k|        new(&type) TType(EbtDouble, EvqTemporary, 2);
 1655|  2.20k|        break;
 1656|  2.10k|    case EHTokDouble3:
  ------------------
  |  Branch (1656:5): [True: 2.10k, False: 674k]
  ------------------
 1657|  2.10k|        new(&type) TType(EbtDouble, EvqTemporary, 3);
 1658|  2.10k|        break;
 1659|  2.10k|    case EHTokDouble4:
  ------------------
  |  Branch (1659:5): [True: 2.10k, False: 674k]
  ------------------
 1660|  2.10k|        new(&type) TType(EbtDouble, EvqTemporary, 4);
 1661|  2.10k|        break;
 1662|       |
 1663|  12.5k|    case EHTokInt:
  ------------------
  |  Branch (1663:5): [True: 12.5k, False: 664k]
  ------------------
 1664|  12.5k|    case EHTokDword:
  ------------------
  |  Branch (1664:5): [True: 0, False: 676k]
  ------------------
 1665|  12.5k|        new(&type) TType(EbtInt);
 1666|  12.5k|        break;
 1667|  2.64k|    case EHTokInt1:
  ------------------
  |  Branch (1667:5): [True: 2.64k, False: 674k]
  ------------------
 1668|  2.64k|        new(&type) TType(EbtInt);
 1669|  2.64k|        type.makeVector();
 1670|  2.64k|        break;
 1671|  43.8k|    case EHTokInt2:
  ------------------
  |  Branch (1671:5): [True: 43.8k, False: 632k]
  ------------------
 1672|  43.8k|        new(&type) TType(EbtInt, EvqTemporary, 2);
 1673|  43.8k|        break;
 1674|  8.67k|    case EHTokInt3:
  ------------------
  |  Branch (1674:5): [True: 8.67k, False: 668k]
  ------------------
 1675|  8.67k|        new(&type) TType(EbtInt, EvqTemporary, 3);
 1676|  8.67k|        break;
 1677|  17.9k|    case EHTokInt4:
  ------------------
  |  Branch (1677:5): [True: 17.9k, False: 658k]
  ------------------
 1678|  17.9k|        new(&type) TType(EbtInt, EvqTemporary, 4);
 1679|  17.9k|        break;
 1680|       |
 1681|  24.7k|    case EHTokUint:
  ------------------
  |  Branch (1681:5): [True: 24.7k, False: 651k]
  ------------------
 1682|  24.7k|        new(&type) TType(EbtUint);
 1683|  24.7k|        break;
 1684|  2.54k|    case EHTokUint1:
  ------------------
  |  Branch (1684:5): [True: 2.54k, False: 674k]
  ------------------
 1685|  2.54k|        new(&type) TType(EbtUint);
 1686|  2.54k|        type.makeVector();
 1687|  2.54k|        break;
 1688|  13.0k|    case EHTokUint2:
  ------------------
  |  Branch (1688:5): [True: 13.0k, False: 663k]
  ------------------
 1689|  13.0k|        new(&type) TType(EbtUint, EvqTemporary, 2);
 1690|  13.0k|        break;
 1691|  6.37k|    case EHTokUint3:
  ------------------
  |  Branch (1691:5): [True: 6.37k, False: 670k]
  ------------------
 1692|  6.37k|        new(&type) TType(EbtUint, EvqTemporary, 3);
 1693|  6.37k|        break;
 1694|  17.3k|    case EHTokUint4:
  ------------------
  |  Branch (1694:5): [True: 17.3k, False: 659k]
  ------------------
 1695|  17.3k|        new(&type) TType(EbtUint, EvqTemporary, 4);
 1696|  17.3k|        break;
 1697|       |
 1698|      0|    case EHTokUint64:
  ------------------
  |  Branch (1698:5): [True: 0, False: 676k]
  ------------------
 1699|      0|        new(&type) TType(EbtUint64);
 1700|      0|        break;
 1701|       |
 1702|  9.45k|    case EHTokBool:
  ------------------
  |  Branch (1702:5): [True: 9.45k, False: 667k]
  ------------------
 1703|  9.45k|        new(&type) TType(EbtBool);
 1704|  9.45k|        break;
 1705|      0|    case EHTokBool1:
  ------------------
  |  Branch (1705:5): [True: 0, False: 676k]
  ------------------
 1706|      0|        new(&type) TType(EbtBool);
 1707|      0|        type.makeVector();
 1708|      0|        break;
 1709|    294|    case EHTokBool2:
  ------------------
  |  Branch (1709:5): [True: 294, False: 676k]
  ------------------
 1710|    294|        new(&type) TType(EbtBool, EvqTemporary, 2);
 1711|    294|        break;
 1712|    294|    case EHTokBool3:
  ------------------
  |  Branch (1712:5): [True: 294, False: 676k]
  ------------------
 1713|    294|        new(&type) TType(EbtBool, EvqTemporary, 3);
 1714|    294|        break;
 1715|    294|    case EHTokBool4:
  ------------------
  |  Branch (1715:5): [True: 294, False: 676k]
  ------------------
 1716|    294|        new(&type) TType(EbtBool, EvqTemporary, 4);
 1717|    294|        break;
 1718|       |
 1719|      0|    case EHTokHalf:
  ------------------
  |  Branch (1719:5): [True: 0, False: 676k]
  ------------------
 1720|      0|        new(&type) TType(half_bt, EvqTemporary);
 1721|      0|        break;
 1722|      0|    case EHTokHalf1:
  ------------------
  |  Branch (1722:5): [True: 0, False: 676k]
  ------------------
 1723|      0|        new(&type) TType(half_bt, EvqTemporary);
 1724|      0|        type.makeVector();
 1725|      0|        break;
 1726|      0|    case EHTokHalf2:
  ------------------
  |  Branch (1726:5): [True: 0, False: 676k]
  ------------------
 1727|      0|        new(&type) TType(half_bt, EvqTemporary, 2);
 1728|      0|        break;
 1729|      0|    case EHTokHalf3:
  ------------------
  |  Branch (1729:5): [True: 0, False: 676k]
  ------------------
 1730|      0|        new(&type) TType(half_bt, EvqTemporary, 3);
 1731|      0|        break;
 1732|      0|    case EHTokHalf4:
  ------------------
  |  Branch (1732:5): [True: 0, False: 676k]
  ------------------
 1733|      0|        new(&type) TType(half_bt, EvqTemporary, 4);
 1734|      0|        break;
 1735|       |
 1736|      0|    case EHTokMin16float:
  ------------------
  |  Branch (1736:5): [True: 0, False: 676k]
  ------------------
 1737|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium);
 1738|      0|        break;
 1739|      0|    case EHTokMin16float1:
  ------------------
  |  Branch (1739:5): [True: 0, False: 676k]
  ------------------
 1740|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium);
 1741|      0|        type.makeVector();
 1742|      0|        break;
 1743|      0|    case EHTokMin16float2:
  ------------------
  |  Branch (1743:5): [True: 0, False: 676k]
  ------------------
 1744|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 2);
 1745|      0|        break;
 1746|      0|    case EHTokMin16float3:
  ------------------
  |  Branch (1746:5): [True: 0, False: 676k]
  ------------------
 1747|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 3);
 1748|      0|        break;
 1749|      0|    case EHTokMin16float4:
  ------------------
  |  Branch (1749:5): [True: 0, False: 676k]
  ------------------
 1750|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 4);
 1751|      0|        break;
 1752|       |
 1753|      0|    case EHTokMin10float:
  ------------------
  |  Branch (1753:5): [True: 0, False: 676k]
  ------------------
 1754|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium);
 1755|      0|        break;
 1756|      0|    case EHTokMin10float1:
  ------------------
  |  Branch (1756:5): [True: 0, False: 676k]
  ------------------
 1757|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium);
 1758|      0|        type.makeVector();
 1759|      0|        break;
 1760|      0|    case EHTokMin10float2:
  ------------------
  |  Branch (1760:5): [True: 0, False: 676k]
  ------------------
 1761|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 2);
 1762|      0|        break;
 1763|      0|    case EHTokMin10float3:
  ------------------
  |  Branch (1763:5): [True: 0, False: 676k]
  ------------------
 1764|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 3);
 1765|      0|        break;
 1766|      0|    case EHTokMin10float4:
  ------------------
  |  Branch (1766:5): [True: 0, False: 676k]
  ------------------
 1767|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 4);
 1768|      0|        break;
 1769|       |
 1770|      0|    case EHTokMin16int:
  ------------------
  |  Branch (1770:5): [True: 0, False: 676k]
  ------------------
 1771|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium);
 1772|      0|        break;
 1773|      0|    case EHTokMin16int1:
  ------------------
  |  Branch (1773:5): [True: 0, False: 676k]
  ------------------
 1774|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium);
 1775|      0|        type.makeVector();
 1776|      0|        break;
 1777|      0|    case EHTokMin16int2:
  ------------------
  |  Branch (1777:5): [True: 0, False: 676k]
  ------------------
 1778|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 2);
 1779|      0|        break;
 1780|      0|    case EHTokMin16int3:
  ------------------
  |  Branch (1780:5): [True: 0, False: 676k]
  ------------------
 1781|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 3);
 1782|      0|        break;
 1783|      0|    case EHTokMin16int4:
  ------------------
  |  Branch (1783:5): [True: 0, False: 676k]
  ------------------
 1784|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 4);
 1785|      0|        break;
 1786|       |
 1787|      0|    case EHTokMin12int:
  ------------------
  |  Branch (1787:5): [True: 0, False: 676k]
  ------------------
 1788|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium);
 1789|      0|        break;
 1790|      0|    case EHTokMin12int1:
  ------------------
  |  Branch (1790:5): [True: 0, False: 676k]
  ------------------
 1791|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium);
 1792|      0|        type.makeVector();
 1793|      0|        break;
 1794|      0|    case EHTokMin12int2:
  ------------------
  |  Branch (1794:5): [True: 0, False: 676k]
  ------------------
 1795|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 2);
 1796|      0|        break;
 1797|      0|    case EHTokMin12int3:
  ------------------
  |  Branch (1797:5): [True: 0, False: 676k]
  ------------------
 1798|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 3);
 1799|      0|        break;
 1800|      0|    case EHTokMin12int4:
  ------------------
  |  Branch (1800:5): [True: 0, False: 676k]
  ------------------
 1801|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 4);
 1802|      0|        break;
 1803|       |
 1804|      0|    case EHTokMin16uint:
  ------------------
  |  Branch (1804:5): [True: 0, False: 676k]
  ------------------
 1805|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium);
 1806|      0|        break;
 1807|      0|    case EHTokMin16uint1:
  ------------------
  |  Branch (1807:5): [True: 0, False: 676k]
  ------------------
 1808|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium);
 1809|      0|        type.makeVector();
 1810|      0|        break;
 1811|      0|    case EHTokMin16uint2:
  ------------------
  |  Branch (1811:5): [True: 0, False: 676k]
  ------------------
 1812|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 2);
 1813|      0|        break;
 1814|      0|    case EHTokMin16uint3:
  ------------------
  |  Branch (1814:5): [True: 0, False: 676k]
  ------------------
 1815|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 3);
 1816|      0|        break;
 1817|      0|    case EHTokMin16uint4:
  ------------------
  |  Branch (1817:5): [True: 0, False: 676k]
  ------------------
 1818|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 4);
 1819|      0|        break;
 1820|       |
 1821|  3.72k|    case EHTokInt1x1:
  ------------------
  |  Branch (1821:5): [True: 3.72k, False: 673k]
  ------------------
 1822|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 1, 1);
 1823|  3.72k|        break;
 1824|  3.72k|    case EHTokInt1x2:
  ------------------
  |  Branch (1824:5): [True: 3.72k, False: 673k]
  ------------------
 1825|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 1, 2);
 1826|  3.72k|        break;
 1827|  3.72k|    case EHTokInt1x3:
  ------------------
  |  Branch (1827:5): [True: 3.72k, False: 673k]
  ------------------
 1828|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 1, 3);
 1829|  3.72k|        break;
 1830|  3.72k|    case EHTokInt1x4:
  ------------------
  |  Branch (1830:5): [True: 3.72k, False: 673k]
  ------------------
 1831|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 1, 4);
 1832|  3.72k|        break;
 1833|  3.72k|    case EHTokInt2x1:
  ------------------
  |  Branch (1833:5): [True: 3.72k, False: 673k]
  ------------------
 1834|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 2, 1);
 1835|  3.72k|        break;
 1836|  3.72k|    case EHTokInt2x2:
  ------------------
  |  Branch (1836:5): [True: 3.72k, False: 673k]
  ------------------
 1837|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 2, 2);
 1838|  3.72k|        break;
 1839|  3.72k|    case EHTokInt2x3:
  ------------------
  |  Branch (1839:5): [True: 3.72k, False: 673k]
  ------------------
 1840|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 2, 3);
 1841|  3.72k|        break;
 1842|  3.72k|    case EHTokInt2x4:
  ------------------
  |  Branch (1842:5): [True: 3.72k, False: 673k]
  ------------------
 1843|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 2, 4);
 1844|  3.72k|        break;
 1845|  3.72k|    case EHTokInt3x1:
  ------------------
  |  Branch (1845:5): [True: 3.72k, False: 673k]
  ------------------
 1846|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 3, 1);
 1847|  3.72k|        break;
 1848|  3.72k|    case EHTokInt3x2:
  ------------------
  |  Branch (1848:5): [True: 3.72k, False: 673k]
  ------------------
 1849|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 3, 2);
 1850|  3.72k|        break;
 1851|  3.72k|    case EHTokInt3x3:
  ------------------
  |  Branch (1851:5): [True: 3.72k, False: 673k]
  ------------------
 1852|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 3, 3);
 1853|  3.72k|        break;
 1854|  3.72k|    case EHTokInt3x4:
  ------------------
  |  Branch (1854:5): [True: 3.72k, False: 673k]
  ------------------
 1855|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 3, 4);
 1856|  3.72k|        break;
 1857|  3.72k|    case EHTokInt4x1:
  ------------------
  |  Branch (1857:5): [True: 3.72k, False: 673k]
  ------------------
 1858|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 4, 1);
 1859|  3.72k|        break;
 1860|  3.72k|    case EHTokInt4x2:
  ------------------
  |  Branch (1860:5): [True: 3.72k, False: 673k]
  ------------------
 1861|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 4, 2);
 1862|  3.72k|        break;
 1863|  3.72k|    case EHTokInt4x3:
  ------------------
  |  Branch (1863:5): [True: 3.72k, False: 673k]
  ------------------
 1864|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 4, 3);
 1865|  3.72k|        break;
 1866|  3.72k|    case EHTokInt4x4:
  ------------------
  |  Branch (1866:5): [True: 3.72k, False: 673k]
  ------------------
 1867|  3.72k|        new(&type) TType(EbtInt, EvqTemporary, 0, 4, 4);
 1868|  3.72k|        break;
 1869|       |
 1870|  3.43k|    case EHTokUint1x1:
  ------------------
  |  Branch (1870:5): [True: 3.43k, False: 673k]
  ------------------
 1871|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 1, 1);
 1872|  3.43k|        break;
 1873|  3.43k|    case EHTokUint1x2:
  ------------------
  |  Branch (1873:5): [True: 3.43k, False: 673k]
  ------------------
 1874|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 1, 2);
 1875|  3.43k|        break;
 1876|  3.43k|    case EHTokUint1x3:
  ------------------
  |  Branch (1876:5): [True: 3.43k, False: 673k]
  ------------------
 1877|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 1, 3);
 1878|  3.43k|        break;
 1879|  3.43k|    case EHTokUint1x4:
  ------------------
  |  Branch (1879:5): [True: 3.43k, False: 673k]
  ------------------
 1880|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 1, 4);
 1881|  3.43k|        break;
 1882|  3.43k|    case EHTokUint2x1:
  ------------------
  |  Branch (1882:5): [True: 3.43k, False: 673k]
  ------------------
 1883|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 2, 1);
 1884|  3.43k|        break;
 1885|  3.43k|    case EHTokUint2x2:
  ------------------
  |  Branch (1885:5): [True: 3.43k, False: 673k]
  ------------------
 1886|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 2, 2);
 1887|  3.43k|        break;
 1888|  3.43k|    case EHTokUint2x3:
  ------------------
  |  Branch (1888:5): [True: 3.43k, False: 673k]
  ------------------
 1889|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 2, 3);
 1890|  3.43k|        break;
 1891|  3.43k|    case EHTokUint2x4:
  ------------------
  |  Branch (1891:5): [True: 3.43k, False: 673k]
  ------------------
 1892|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 2, 4);
 1893|  3.43k|        break;
 1894|  3.43k|    case EHTokUint3x1:
  ------------------
  |  Branch (1894:5): [True: 3.43k, False: 673k]
  ------------------
 1895|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 3, 1);
 1896|  3.43k|        break;
 1897|  3.43k|    case EHTokUint3x2:
  ------------------
  |  Branch (1897:5): [True: 3.43k, False: 673k]
  ------------------
 1898|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 3, 2);
 1899|  3.43k|        break;
 1900|  3.43k|    case EHTokUint3x3:
  ------------------
  |  Branch (1900:5): [True: 3.43k, False: 673k]
  ------------------
 1901|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 3, 3);
 1902|  3.43k|        break;
 1903|  3.43k|    case EHTokUint3x4:
  ------------------
  |  Branch (1903:5): [True: 3.43k, False: 673k]
  ------------------
 1904|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 3, 4);
 1905|  3.43k|        break;
 1906|  3.43k|    case EHTokUint4x1:
  ------------------
  |  Branch (1906:5): [True: 3.43k, False: 673k]
  ------------------
 1907|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 4, 1);
 1908|  3.43k|        break;
 1909|  3.43k|    case EHTokUint4x2:
  ------------------
  |  Branch (1909:5): [True: 3.43k, False: 673k]
  ------------------
 1910|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 4, 2);
 1911|  3.43k|        break;
 1912|  3.43k|    case EHTokUint4x3:
  ------------------
  |  Branch (1912:5): [True: 3.43k, False: 673k]
  ------------------
 1913|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 4, 3);
 1914|  3.43k|        break;
 1915|  3.43k|    case EHTokUint4x4:
  ------------------
  |  Branch (1915:5): [True: 3.43k, False: 673k]
  ------------------
 1916|  3.43k|        new(&type) TType(EbtUint, EvqTemporary, 0, 4, 4);
 1917|  3.43k|        break;
 1918|       |
 1919|    392|    case EHTokBool1x1:
  ------------------
  |  Branch (1919:5): [True: 392, False: 676k]
  ------------------
 1920|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 1, 1);
 1921|    392|        break;
 1922|    392|    case EHTokBool1x2:
  ------------------
  |  Branch (1922:5): [True: 392, False: 676k]
  ------------------
 1923|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 1, 2);
 1924|    392|        break;
 1925|    392|    case EHTokBool1x3:
  ------------------
  |  Branch (1925:5): [True: 392, False: 676k]
  ------------------
 1926|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 1, 3);
 1927|    392|        break;
 1928|    392|    case EHTokBool1x4:
  ------------------
  |  Branch (1928:5): [True: 392, False: 676k]
  ------------------
 1929|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 1, 4);
 1930|    392|        break;
 1931|    392|    case EHTokBool2x1:
  ------------------
  |  Branch (1931:5): [True: 392, False: 676k]
  ------------------
 1932|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 2, 1);
 1933|    392|        break;
 1934|    392|    case EHTokBool2x2:
  ------------------
  |  Branch (1934:5): [True: 392, False: 676k]
  ------------------
 1935|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 2, 2);
 1936|    392|        break;
 1937|    392|    case EHTokBool2x3:
  ------------------
  |  Branch (1937:5): [True: 392, False: 676k]
  ------------------
 1938|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 2, 3);
 1939|    392|        break;
 1940|    392|    case EHTokBool2x4:
  ------------------
  |  Branch (1940:5): [True: 392, False: 676k]
  ------------------
 1941|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 2, 4);
 1942|    392|        break;
 1943|    392|    case EHTokBool3x1:
  ------------------
  |  Branch (1943:5): [True: 392, False: 676k]
  ------------------
 1944|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 3, 1);
 1945|    392|        break;
 1946|    392|    case EHTokBool3x2:
  ------------------
  |  Branch (1946:5): [True: 392, False: 676k]
  ------------------
 1947|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 3, 2);
 1948|    392|        break;
 1949|    392|    case EHTokBool3x3:
  ------------------
  |  Branch (1949:5): [True: 392, False: 676k]
  ------------------
 1950|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 3, 3);
 1951|    392|        break;
 1952|    392|    case EHTokBool3x4:
  ------------------
  |  Branch (1952:5): [True: 392, False: 676k]
  ------------------
 1953|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 3, 4);
 1954|    392|        break;
 1955|    392|    case EHTokBool4x1:
  ------------------
  |  Branch (1955:5): [True: 392, False: 676k]
  ------------------
 1956|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 4, 1);
 1957|    392|        break;
 1958|    392|    case EHTokBool4x2:
  ------------------
  |  Branch (1958:5): [True: 392, False: 676k]
  ------------------
 1959|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 4, 2);
 1960|    392|        break;
 1961|    392|    case EHTokBool4x3:
  ------------------
  |  Branch (1961:5): [True: 392, False: 676k]
  ------------------
 1962|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 4, 3);
 1963|    392|        break;
 1964|    392|    case EHTokBool4x4:
  ------------------
  |  Branch (1964:5): [True: 392, False: 676k]
  ------------------
 1965|    392|        new(&type) TType(EbtBool, EvqTemporary, 0, 4, 4);
 1966|    392|        break;
 1967|       |
 1968|  7.93k|    case EHTokFloat1x1:
  ------------------
  |  Branch (1968:5): [True: 7.93k, False: 668k]
  ------------------
 1969|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 1);
 1970|  7.93k|        break;
 1971|  7.93k|    case EHTokFloat1x2:
  ------------------
  |  Branch (1971:5): [True: 7.93k, False: 668k]
  ------------------
 1972|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 2);
 1973|  7.93k|        break;
 1974|  7.93k|    case EHTokFloat1x3:
  ------------------
  |  Branch (1974:5): [True: 7.93k, False: 668k]
  ------------------
 1975|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 3);
 1976|  7.93k|        break;
 1977|  7.93k|    case EHTokFloat1x4:
  ------------------
  |  Branch (1977:5): [True: 7.93k, False: 668k]
  ------------------
 1978|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 1, 4);
 1979|  7.93k|        break;
 1980|  7.93k|    case EHTokFloat2x1:
  ------------------
  |  Branch (1980:5): [True: 7.93k, False: 668k]
  ------------------
 1981|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 2, 1);
 1982|  7.93k|        break;
 1983|  7.93k|    case EHTokFloat2x2:
  ------------------
  |  Branch (1983:5): [True: 7.93k, False: 668k]
  ------------------
 1984|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 2, 2);
 1985|  7.93k|        break;
 1986|  7.93k|    case EHTokFloat2x3:
  ------------------
  |  Branch (1986:5): [True: 7.93k, False: 668k]
  ------------------
 1987|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 2, 3);
 1988|  7.93k|        break;
 1989|  7.93k|    case EHTokFloat2x4:
  ------------------
  |  Branch (1989:5): [True: 7.93k, False: 668k]
  ------------------
 1990|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 2, 4);
 1991|  7.93k|        break;
 1992|  7.93k|    case EHTokFloat3x1:
  ------------------
  |  Branch (1992:5): [True: 7.93k, False: 668k]
  ------------------
 1993|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 3, 1);
 1994|  7.93k|        break;
 1995|  7.93k|    case EHTokFloat3x2:
  ------------------
  |  Branch (1995:5): [True: 7.93k, False: 668k]
  ------------------
 1996|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 3, 2);
 1997|  7.93k|        break;
 1998|  7.93k|    case EHTokFloat3x3:
  ------------------
  |  Branch (1998:5): [True: 7.93k, False: 668k]
  ------------------
 1999|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 3, 3);
 2000|  7.93k|        break;
 2001|  7.93k|    case EHTokFloat3x4:
  ------------------
  |  Branch (2001:5): [True: 7.93k, False: 668k]
  ------------------
 2002|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 3, 4);
 2003|  7.93k|        break;
 2004|  7.93k|    case EHTokFloat4x1:
  ------------------
  |  Branch (2004:5): [True: 7.93k, False: 668k]
  ------------------
 2005|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 1);
 2006|  7.93k|        break;
 2007|  7.93k|    case EHTokFloat4x2:
  ------------------
  |  Branch (2007:5): [True: 7.93k, False: 668k]
  ------------------
 2008|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 2);
 2009|  7.93k|        break;
 2010|  7.93k|    case EHTokFloat4x3:
  ------------------
  |  Branch (2010:5): [True: 7.93k, False: 668k]
  ------------------
 2011|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 3);
 2012|  7.93k|        break;
 2013|  7.93k|    case EHTokFloat4x4:
  ------------------
  |  Branch (2013:5): [True: 7.93k, False: 668k]
  ------------------
 2014|  7.93k|        new(&type) TType(EbtFloat, EvqTemporary, 0, 4, 4);
 2015|  7.93k|        break;
 2016|       |
 2017|      0|    case EHTokHalf1x1:
  ------------------
  |  Branch (2017:5): [True: 0, False: 676k]
  ------------------
 2018|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 1, 1);
 2019|      0|        break;
 2020|      0|    case EHTokHalf1x2:
  ------------------
  |  Branch (2020:5): [True: 0, False: 676k]
  ------------------
 2021|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 1, 2);
 2022|      0|        break;
 2023|      0|    case EHTokHalf1x3:
  ------------------
  |  Branch (2023:5): [True: 0, False: 676k]
  ------------------
 2024|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 1, 3);
 2025|      0|        break;
 2026|      0|    case EHTokHalf1x4:
  ------------------
  |  Branch (2026:5): [True: 0, False: 676k]
  ------------------
 2027|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 1, 4);
 2028|      0|        break;
 2029|      0|    case EHTokHalf2x1:
  ------------------
  |  Branch (2029:5): [True: 0, False: 676k]
  ------------------
 2030|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 2, 1);
 2031|      0|        break;
 2032|      0|    case EHTokHalf2x2:
  ------------------
  |  Branch (2032:5): [True: 0, False: 676k]
  ------------------
 2033|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 2, 2);
 2034|      0|        break;
 2035|      0|    case EHTokHalf2x3:
  ------------------
  |  Branch (2035:5): [True: 0, False: 676k]
  ------------------
 2036|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 2, 3);
 2037|      0|        break;
 2038|      0|    case EHTokHalf2x4:
  ------------------
  |  Branch (2038:5): [True: 0, False: 676k]
  ------------------
 2039|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 2, 4);
 2040|      0|        break;
 2041|      0|    case EHTokHalf3x1:
  ------------------
  |  Branch (2041:5): [True: 0, False: 676k]
  ------------------
 2042|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 3, 1);
 2043|      0|        break;
 2044|      0|    case EHTokHalf3x2:
  ------------------
  |  Branch (2044:5): [True: 0, False: 676k]
  ------------------
 2045|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 3, 2);
 2046|      0|        break;
 2047|      0|    case EHTokHalf3x3:
  ------------------
  |  Branch (2047:5): [True: 0, False: 676k]
  ------------------
 2048|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 3, 3);
 2049|      0|        break;
 2050|      0|    case EHTokHalf3x4:
  ------------------
  |  Branch (2050:5): [True: 0, False: 676k]
  ------------------
 2051|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 3, 4);
 2052|      0|        break;
 2053|      0|    case EHTokHalf4x1:
  ------------------
  |  Branch (2053:5): [True: 0, False: 676k]
  ------------------
 2054|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 4, 1);
 2055|      0|        break;
 2056|      0|    case EHTokHalf4x2:
  ------------------
  |  Branch (2056:5): [True: 0, False: 676k]
  ------------------
 2057|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 4, 2);
 2058|      0|        break;
 2059|      0|    case EHTokHalf4x3:
  ------------------
  |  Branch (2059:5): [True: 0, False: 676k]
  ------------------
 2060|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 4, 3);
 2061|      0|        break;
 2062|      0|    case EHTokHalf4x4:
  ------------------
  |  Branch (2062:5): [True: 0, False: 676k]
  ------------------
 2063|      0|        new(&type) TType(half_bt, EvqTemporary, 0, 4, 4);
 2064|      0|        break;
 2065|       |
 2066|    588|    case EHTokDouble1x1:
  ------------------
  |  Branch (2066:5): [True: 588, False: 676k]
  ------------------
 2067|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 1);
 2068|    588|        break;
 2069|    588|    case EHTokDouble1x2:
  ------------------
  |  Branch (2069:5): [True: 588, False: 676k]
  ------------------
 2070|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 2);
 2071|    588|        break;
 2072|    588|    case EHTokDouble1x3:
  ------------------
  |  Branch (2072:5): [True: 588, False: 676k]
  ------------------
 2073|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 3);
 2074|    588|        break;
 2075|    588|    case EHTokDouble1x4:
  ------------------
  |  Branch (2075:5): [True: 588, False: 676k]
  ------------------
 2076|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 1, 4);
 2077|    588|        break;
 2078|    588|    case EHTokDouble2x1:
  ------------------
  |  Branch (2078:5): [True: 588, False: 676k]
  ------------------
 2079|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 2, 1);
 2080|    588|        break;
 2081|    588|    case EHTokDouble2x2:
  ------------------
  |  Branch (2081:5): [True: 588, False: 676k]
  ------------------
 2082|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 2, 2);
 2083|    588|        break;
 2084|    588|    case EHTokDouble2x3:
  ------------------
  |  Branch (2084:5): [True: 588, False: 676k]
  ------------------
 2085|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 2, 3);
 2086|    588|        break;
 2087|    588|    case EHTokDouble2x4:
  ------------------
  |  Branch (2087:5): [True: 588, False: 676k]
  ------------------
 2088|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 2, 4);
 2089|    588|        break;
 2090|    588|    case EHTokDouble3x1:
  ------------------
  |  Branch (2090:5): [True: 588, False: 676k]
  ------------------
 2091|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 3, 1);
 2092|    588|        break;
 2093|    588|    case EHTokDouble3x2:
  ------------------
  |  Branch (2093:5): [True: 588, False: 676k]
  ------------------
 2094|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 3, 2);
 2095|    588|        break;
 2096|    588|    case EHTokDouble3x3:
  ------------------
  |  Branch (2096:5): [True: 588, False: 676k]
  ------------------
 2097|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 3, 3);
 2098|    588|        break;
 2099|    588|    case EHTokDouble3x4:
  ------------------
  |  Branch (2099:5): [True: 588, False: 676k]
  ------------------
 2100|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 3, 4);
 2101|    588|        break;
 2102|    588|    case EHTokDouble4x1:
  ------------------
  |  Branch (2102:5): [True: 588, False: 676k]
  ------------------
 2103|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 1);
 2104|    588|        break;
 2105|    588|    case EHTokDouble4x2:
  ------------------
  |  Branch (2105:5): [True: 588, False: 676k]
  ------------------
 2106|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 2);
 2107|    588|        break;
 2108|    588|    case EHTokDouble4x3:
  ------------------
  |  Branch (2108:5): [True: 588, False: 676k]
  ------------------
 2109|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 3);
 2110|    588|        break;
 2111|    588|    case EHTokDouble4x4:
  ------------------
  |  Branch (2111:5): [True: 588, False: 676k]
  ------------------
 2112|    588|        new(&type) TType(EbtDouble, EvqTemporary, 0, 4, 4);
 2113|    588|        break;
 2114|       |
 2115|      0|    case EHTokMin16float1x1:
  ------------------
  |  Branch (2115:5): [True: 0, False: 676k]
  ------------------
 2116|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 1);
 2117|      0|        break;
 2118|      0|    case EHTokMin16float1x2:
  ------------------
  |  Branch (2118:5): [True: 0, False: 676k]
  ------------------
 2119|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 2);
 2120|      0|        break;
 2121|      0|    case EHTokMin16float1x3:
  ------------------
  |  Branch (2121:5): [True: 0, False: 676k]
  ------------------
 2122|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 3);
 2123|      0|        break;
 2124|      0|    case EHTokMin16float1x4:
  ------------------
  |  Branch (2124:5): [True: 0, False: 676k]
  ------------------
 2125|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 1, 4);
 2126|      0|        break;
 2127|      0|    case EHTokMin16float2x1:
  ------------------
  |  Branch (2127:5): [True: 0, False: 676k]
  ------------------
 2128|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 1);
 2129|      0|        break;
 2130|      0|    case EHTokMin16float2x2:
  ------------------
  |  Branch (2130:5): [True: 0, False: 676k]
  ------------------
 2131|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 2);
 2132|      0|        break;
 2133|      0|    case EHTokMin16float2x3:
  ------------------
  |  Branch (2133:5): [True: 0, False: 676k]
  ------------------
 2134|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 3);
 2135|      0|        break;
 2136|      0|    case EHTokMin16float2x4:
  ------------------
  |  Branch (2136:5): [True: 0, False: 676k]
  ------------------
 2137|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 2, 4);
 2138|      0|        break;
 2139|      0|    case EHTokMin16float3x1:
  ------------------
  |  Branch (2139:5): [True: 0, False: 676k]
  ------------------
 2140|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 1);
 2141|      0|        break;
 2142|      0|    case EHTokMin16float3x2:
  ------------------
  |  Branch (2142:5): [True: 0, False: 676k]
  ------------------
 2143|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 2);
 2144|      0|        break;
 2145|      0|    case EHTokMin16float3x3:
  ------------------
  |  Branch (2145:5): [True: 0, False: 676k]
  ------------------
 2146|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 3);
 2147|      0|        break;
 2148|      0|    case EHTokMin16float3x4:
  ------------------
  |  Branch (2148:5): [True: 0, False: 676k]
  ------------------
 2149|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 3, 4);
 2150|      0|        break;
 2151|      0|    case EHTokMin16float4x1:
  ------------------
  |  Branch (2151:5): [True: 0, False: 676k]
  ------------------
 2152|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 1);
 2153|      0|        break;
 2154|      0|    case EHTokMin16float4x2:
  ------------------
  |  Branch (2154:5): [True: 0, False: 676k]
  ------------------
 2155|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 2);
 2156|      0|        break;
 2157|      0|    case EHTokMin16float4x3:
  ------------------
  |  Branch (2157:5): [True: 0, False: 676k]
  ------------------
 2158|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 3);
 2159|      0|        break;
 2160|      0|    case EHTokMin16float4x4:
  ------------------
  |  Branch (2160:5): [True: 0, False: 676k]
  ------------------
 2161|      0|        new(&type) TType(min16float_bt, EvqTemporary, EpqMedium, 0, 4, 4);
 2162|      0|        break;
 2163|       |
 2164|      0|    case EHTokMin10float1x1:
  ------------------
  |  Branch (2164:5): [True: 0, False: 676k]
  ------------------
 2165|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 1);
 2166|      0|        break;
 2167|      0|    case EHTokMin10float1x2:
  ------------------
  |  Branch (2167:5): [True: 0, False: 676k]
  ------------------
 2168|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 2);
 2169|      0|        break;
 2170|      0|    case EHTokMin10float1x3:
  ------------------
  |  Branch (2170:5): [True: 0, False: 676k]
  ------------------
 2171|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 3);
 2172|      0|        break;
 2173|      0|    case EHTokMin10float1x4:
  ------------------
  |  Branch (2173:5): [True: 0, False: 676k]
  ------------------
 2174|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 1, 4);
 2175|      0|        break;
 2176|      0|    case EHTokMin10float2x1:
  ------------------
  |  Branch (2176:5): [True: 0, False: 676k]
  ------------------
 2177|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 1);
 2178|      0|        break;
 2179|      0|    case EHTokMin10float2x2:
  ------------------
  |  Branch (2179:5): [True: 0, False: 676k]
  ------------------
 2180|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 2);
 2181|      0|        break;
 2182|      0|    case EHTokMin10float2x3:
  ------------------
  |  Branch (2182:5): [True: 0, False: 676k]
  ------------------
 2183|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 3);
 2184|      0|        break;
 2185|      0|    case EHTokMin10float2x4:
  ------------------
  |  Branch (2185:5): [True: 0, False: 676k]
  ------------------
 2186|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 2, 4);
 2187|      0|        break;
 2188|      0|    case EHTokMin10float3x1:
  ------------------
  |  Branch (2188:5): [True: 0, False: 676k]
  ------------------
 2189|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 1);
 2190|      0|        break;
 2191|      0|    case EHTokMin10float3x2:
  ------------------
  |  Branch (2191:5): [True: 0, False: 676k]
  ------------------
 2192|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 2);
 2193|      0|        break;
 2194|      0|    case EHTokMin10float3x3:
  ------------------
  |  Branch (2194:5): [True: 0, False: 676k]
  ------------------
 2195|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 3);
 2196|      0|        break;
 2197|      0|    case EHTokMin10float3x4:
  ------------------
  |  Branch (2197:5): [True: 0, False: 676k]
  ------------------
 2198|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 3, 4);
 2199|      0|        break;
 2200|      0|    case EHTokMin10float4x1:
  ------------------
  |  Branch (2200:5): [True: 0, False: 676k]
  ------------------
 2201|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 1);
 2202|      0|        break;
 2203|      0|    case EHTokMin10float4x2:
  ------------------
  |  Branch (2203:5): [True: 0, False: 676k]
  ------------------
 2204|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 2);
 2205|      0|        break;
 2206|      0|    case EHTokMin10float4x3:
  ------------------
  |  Branch (2206:5): [True: 0, False: 676k]
  ------------------
 2207|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 3);
 2208|      0|        break;
 2209|      0|    case EHTokMin10float4x4:
  ------------------
  |  Branch (2209:5): [True: 0, False: 676k]
  ------------------
 2210|      0|        new(&type) TType(min10float_bt, EvqTemporary, EpqMedium, 0, 4, 4);
 2211|      0|        break;
 2212|       |
 2213|      0|    case EHTokMin16int1x1:
  ------------------
  |  Branch (2213:5): [True: 0, False: 676k]
  ------------------
 2214|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 1);
 2215|      0|        break;
 2216|      0|    case EHTokMin16int1x2:
  ------------------
  |  Branch (2216:5): [True: 0, False: 676k]
  ------------------
 2217|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 2);
 2218|      0|        break;
 2219|      0|    case EHTokMin16int1x3:
  ------------------
  |  Branch (2219:5): [True: 0, False: 676k]
  ------------------
 2220|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 3);
 2221|      0|        break;
 2222|      0|    case EHTokMin16int1x4:
  ------------------
  |  Branch (2222:5): [True: 0, False: 676k]
  ------------------
 2223|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 1, 4);
 2224|      0|        break;
 2225|      0|    case EHTokMin16int2x1:
  ------------------
  |  Branch (2225:5): [True: 0, False: 676k]
  ------------------
 2226|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 1);
 2227|      0|        break;
 2228|      0|    case EHTokMin16int2x2:
  ------------------
  |  Branch (2228:5): [True: 0, False: 676k]
  ------------------
 2229|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 2);
 2230|      0|        break;
 2231|      0|    case EHTokMin16int2x3:
  ------------------
  |  Branch (2231:5): [True: 0, False: 676k]
  ------------------
 2232|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 3);
 2233|      0|        break;
 2234|      0|    case EHTokMin16int2x4:
  ------------------
  |  Branch (2234:5): [True: 0, False: 676k]
  ------------------
 2235|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 2, 4);
 2236|      0|        break;
 2237|      0|    case EHTokMin16int3x1:
  ------------------
  |  Branch (2237:5): [True: 0, False: 676k]
  ------------------
 2238|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 1);
 2239|      0|        break;
 2240|      0|    case EHTokMin16int3x2:
  ------------------
  |  Branch (2240:5): [True: 0, False: 676k]
  ------------------
 2241|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 2);
 2242|      0|        break;
 2243|      0|    case EHTokMin16int3x3:
  ------------------
  |  Branch (2243:5): [True: 0, False: 676k]
  ------------------
 2244|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 3);
 2245|      0|        break;
 2246|      0|    case EHTokMin16int3x4:
  ------------------
  |  Branch (2246:5): [True: 0, False: 676k]
  ------------------
 2247|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 3, 4);
 2248|      0|        break;
 2249|      0|    case EHTokMin16int4x1:
  ------------------
  |  Branch (2249:5): [True: 0, False: 676k]
  ------------------
 2250|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 1);
 2251|      0|        break;
 2252|      0|    case EHTokMin16int4x2:
  ------------------
  |  Branch (2252:5): [True: 0, False: 676k]
  ------------------
 2253|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 2);
 2254|      0|        break;
 2255|      0|    case EHTokMin16int4x3:
  ------------------
  |  Branch (2255:5): [True: 0, False: 676k]
  ------------------
 2256|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 3);
 2257|      0|        break;
 2258|      0|    case EHTokMin16int4x4:
  ------------------
  |  Branch (2258:5): [True: 0, False: 676k]
  ------------------
 2259|      0|        new(&type) TType(min16int_bt, EvqTemporary, EpqMedium, 0, 4, 4);
 2260|      0|        break;
 2261|       |
 2262|      0|    case EHTokMin12int1x1:
  ------------------
  |  Branch (2262:5): [True: 0, False: 676k]
  ------------------
 2263|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 1);
 2264|      0|        break;
 2265|      0|    case EHTokMin12int1x2:
  ------------------
  |  Branch (2265:5): [True: 0, False: 676k]
  ------------------
 2266|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 2);
 2267|      0|        break;
 2268|      0|    case EHTokMin12int1x3:
  ------------------
  |  Branch (2268:5): [True: 0, False: 676k]
  ------------------
 2269|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 3);
 2270|      0|        break;
 2271|      0|    case EHTokMin12int1x4:
  ------------------
  |  Branch (2271:5): [True: 0, False: 676k]
  ------------------
 2272|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 1, 4);
 2273|      0|        break;
 2274|      0|    case EHTokMin12int2x1:
  ------------------
  |  Branch (2274:5): [True: 0, False: 676k]
  ------------------
 2275|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 1);
 2276|      0|        break;
 2277|      0|    case EHTokMin12int2x2:
  ------------------
  |  Branch (2277:5): [True: 0, False: 676k]
  ------------------
 2278|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 2);
 2279|      0|        break;
 2280|      0|    case EHTokMin12int2x3:
  ------------------
  |  Branch (2280:5): [True: 0, False: 676k]
  ------------------
 2281|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 3);
 2282|      0|        break;
 2283|      0|    case EHTokMin12int2x4:
  ------------------
  |  Branch (2283:5): [True: 0, False: 676k]
  ------------------
 2284|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 2, 4);
 2285|      0|        break;
 2286|      0|    case EHTokMin12int3x1:
  ------------------
  |  Branch (2286:5): [True: 0, False: 676k]
  ------------------
 2287|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 1);
 2288|      0|        break;
 2289|      0|    case EHTokMin12int3x2:
  ------------------
  |  Branch (2289:5): [True: 0, False: 676k]
  ------------------
 2290|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 2);
 2291|      0|        break;
 2292|      0|    case EHTokMin12int3x3:
  ------------------
  |  Branch (2292:5): [True: 0, False: 676k]
  ------------------
 2293|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 3);
 2294|      0|        break;
 2295|      0|    case EHTokMin12int3x4:
  ------------------
  |  Branch (2295:5): [True: 0, False: 676k]
  ------------------
 2296|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 3, 4);
 2297|      0|        break;
 2298|      0|    case EHTokMin12int4x1:
  ------------------
  |  Branch (2298:5): [True: 0, False: 676k]
  ------------------
 2299|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 1);
 2300|      0|        break;
 2301|      0|    case EHTokMin12int4x2:
  ------------------
  |  Branch (2301:5): [True: 0, False: 676k]
  ------------------
 2302|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 2);
 2303|      0|        break;
 2304|      0|    case EHTokMin12int4x3:
  ------------------
  |  Branch (2304:5): [True: 0, False: 676k]
  ------------------
 2305|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 3);
 2306|      0|        break;
 2307|      0|    case EHTokMin12int4x4:
  ------------------
  |  Branch (2307:5): [True: 0, False: 676k]
  ------------------
 2308|      0|        new(&type) TType(min12int_bt, EvqTemporary, EpqMedium, 0, 4, 4);
 2309|      0|        break;
 2310|       |
 2311|      0|    case EHTokMin16uint1x1:
  ------------------
  |  Branch (2311:5): [True: 0, False: 676k]
  ------------------
 2312|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 1);
 2313|      0|        break;
 2314|      0|    case EHTokMin16uint1x2:
  ------------------
  |  Branch (2314:5): [True: 0, False: 676k]
  ------------------
 2315|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 2);
 2316|      0|        break;
 2317|      0|    case EHTokMin16uint1x3:
  ------------------
  |  Branch (2317:5): [True: 0, False: 676k]
  ------------------
 2318|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 3);
 2319|      0|        break;
 2320|      0|    case EHTokMin16uint1x4:
  ------------------
  |  Branch (2320:5): [True: 0, False: 676k]
  ------------------
 2321|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 1, 4);
 2322|      0|        break;
 2323|      0|    case EHTokMin16uint2x1:
  ------------------
  |  Branch (2323:5): [True: 0, False: 676k]
  ------------------
 2324|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 1);
 2325|      0|        break;
 2326|      0|    case EHTokMin16uint2x2:
  ------------------
  |  Branch (2326:5): [True: 0, False: 676k]
  ------------------
 2327|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 2);
 2328|      0|        break;
 2329|      0|    case EHTokMin16uint2x3:
  ------------------
  |  Branch (2329:5): [True: 0, False: 676k]
  ------------------
 2330|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 3);
 2331|      0|        break;
 2332|      0|    case EHTokMin16uint2x4:
  ------------------
  |  Branch (2332:5): [True: 0, False: 676k]
  ------------------
 2333|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 2, 4);
 2334|      0|        break;
 2335|      0|    case EHTokMin16uint3x1:
  ------------------
  |  Branch (2335:5): [True: 0, False: 676k]
  ------------------
 2336|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 1);
 2337|      0|        break;
 2338|      0|    case EHTokMin16uint3x2:
  ------------------
  |  Branch (2338:5): [True: 0, False: 676k]
  ------------------
 2339|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 2);
 2340|      0|        break;
 2341|      0|    case EHTokMin16uint3x3:
  ------------------
  |  Branch (2341:5): [True: 0, False: 676k]
  ------------------
 2342|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 3);
 2343|      0|        break;
 2344|      0|    case EHTokMin16uint3x4:
  ------------------
  |  Branch (2344:5): [True: 0, False: 676k]
  ------------------
 2345|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 3, 4);
 2346|      0|        break;
 2347|      0|    case EHTokMin16uint4x1:
  ------------------
  |  Branch (2347:5): [True: 0, False: 676k]
  ------------------
 2348|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 1);
 2349|      0|        break;
 2350|      0|    case EHTokMin16uint4x2:
  ------------------
  |  Branch (2350:5): [True: 0, False: 676k]
  ------------------
 2351|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 2);
 2352|      0|        break;
 2353|      0|    case EHTokMin16uint4x3:
  ------------------
  |  Branch (2353:5): [True: 0, False: 676k]
  ------------------
 2354|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 3);
 2355|      0|        break;
 2356|      0|    case EHTokMin16uint4x4:
  ------------------
  |  Branch (2356:5): [True: 0, False: 676k]
  ------------------
 2357|      0|        new(&type) TType(min16uint_bt, EvqTemporary, EpqMedium, 0, 4, 4);
 2358|      0|        break;
 2359|       |
 2360|     14|    default:
  ------------------
  |  Branch (2360:5): [True: 14, False: 676k]
  ------------------
 2361|     14|        return false;
 2362|   676k|    }
 2363|       |
 2364|   606k|    advanceToken();
 2365|       |
 2366|   606k|    if ((isUnorm || isSnorm) && !type.isFloatingDomain()) {
  ------------------
  |  Branch (2366:10): [True: 0, False: 606k]
  |  Branch (2366:21): [True: 0, False: 606k]
  |  Branch (2366:33): [True: 0, False: 0]
  ------------------
 2367|      0|        parseContext.error(token.loc, "unorm and snorm only valid in floating point domain", "", "");
 2368|      0|        return false;
 2369|      0|    }
 2370|       |
 2371|   606k|    return true;
 2372|   606k|}
_ZN7glslang11HlslGrammar24acceptFunctionParametersERNS_9TFunctionE:
 2826|   196k|{
 2827|   196k|    parseContext.beginParameterParsing(function);
 2828|       |
 2829|       |    // LEFT_PAREN
 2830|   196k|    if (! acceptTokenClass(EHTokLeftParen))
  ------------------
  |  Branch (2830:9): [True: 0, False: 196k]
  ------------------
 2831|      0|        return false;
 2832|       |
 2833|       |    // VOID RIGHT_PAREN
 2834|   196k|    if (! acceptTokenClass(EHTokVoid)) {
  ------------------
  |  Branch (2834:9): [True: 194k, False: 1.71k]
  ------------------
 2835|   440k|        do {
 2836|       |            // parameter_declaration
 2837|   440k|            if (! acceptParameterDeclaration(function))
  ------------------
  |  Branch (2837:17): [True: 0, False: 440k]
  ------------------
 2838|      0|                break;
 2839|       |
 2840|       |            // COMMA
 2841|   440k|            if (! acceptTokenClass(EHTokComma))
  ------------------
  |  Branch (2841:17): [True: 194k, False: 246k]
  ------------------
 2842|   194k|                break;
 2843|   440k|        } while (true);
  ------------------
  |  Branch (2843:18): [True: 246k, Folded]
  ------------------
 2844|   194k|    }
 2845|       |
 2846|       |    // RIGHT_PAREN
 2847|   196k|    if (! acceptTokenClass(EHTokRightParen)) {
  ------------------
  |  Branch (2847:9): [True: 0, False: 196k]
  ------------------
 2848|      0|        expected(")");
 2849|      0|        return false;
 2850|      0|    }
 2851|       |
 2852|   196k|    return true;
 2853|   196k|}
_ZN7glslang11HlslGrammar33acceptDefaultParameterDeclarationERKNS_5TTypeERPNS_12TIntermTypedE:
 2859|   440k|{
 2860|   440k|    node = nullptr;
 2861|       |
 2862|       |    // Valid not to have a default_parameter_declaration
 2863|   440k|    if (!acceptTokenClass(EHTokAssign))
  ------------------
  |  Branch (2863:9): [True: 440k, False: 0]
  ------------------
 2864|   440k|        return true;
 2865|       |
 2866|      0|    if (!acceptConditionalExpression(node)) {
  ------------------
  |  Branch (2866:9): [True: 0, False: 0]
  ------------------
 2867|      0|        if (!acceptInitializer(node))
  ------------------
  |  Branch (2867:13): [True: 0, False: 0]
  ------------------
 2868|      0|            return false;
 2869|       |
 2870|       |        // For initializer lists, we have to const-fold into a constructor for the type, so build
 2871|       |        // that.
 2872|      0|        TFunction* constructor = parseContext.makeConstructorCall(token.loc, type);
 2873|      0|        if (constructor == nullptr)  // cannot construct
  ------------------
  |  Branch (2873:13): [True: 0, False: 0]
  ------------------
 2874|      0|            return false;
 2875|       |
 2876|      0|        TIntermTyped* arguments = nullptr;
 2877|      0|        for (int i = 0; i < int(node->getAsAggregate()->getSequence().size()); i++)
  ------------------
  |  Branch (2877:25): [True: 0, False: 0]
  ------------------
 2878|      0|            parseContext.handleFunctionArgument(constructor, arguments, node->getAsAggregate()->getSequence()[i]->getAsTyped());
 2879|       |
 2880|      0|        node = parseContext.handleFunctionCall(token.loc, constructor, node);
 2881|      0|    }
 2882|       |
 2883|      0|    if (node == nullptr)
  ------------------
  |  Branch (2883:9): [True: 0, False: 0]
  ------------------
 2884|      0|        return false;
 2885|       |
 2886|       |    // If this is simply a constant, we can use it directly.
 2887|      0|    if (node->getAsConstantUnion())
  ------------------
  |  Branch (2887:9): [True: 0, False: 0]
  ------------------
 2888|      0|        return true;
 2889|       |
 2890|       |    // Otherwise, it has to be const-foldable.
 2891|      0|    TIntermTyped* origNode = node;
 2892|       |
 2893|      0|    node = intermediate.fold(node->getAsAggregate());
 2894|       |
 2895|      0|    if (node != nullptr && origNode != node)
  ------------------
  |  Branch (2895:9): [True: 0, False: 0]
  |  Branch (2895:28): [True: 0, False: 0]
  ------------------
 2896|      0|        return true;
 2897|       |
 2898|      0|    parseContext.error(token.loc, "invalid default parameter value", "", "");
 2899|       |
 2900|      0|    return false;
 2901|      0|}
_ZN7glslang11HlslGrammar26acceptParameterDeclarationERNS_9TFunctionE:
 2911|   440k|{
 2912|       |    // attributes
 2913|   440k|    TAttributes attributes;
 2914|   440k|    acceptAttributes(attributes);
 2915|       |
 2916|       |    // fully_specified_type
 2917|   440k|    TType* type = new TType;
 2918|   440k|    if (! acceptFullySpecifiedType(*type, attributes))
  ------------------
  |  Branch (2918:9): [True: 0, False: 440k]
  ------------------
 2919|      0|        return false;
 2920|       |
 2921|       |    // merge in the attributes
 2922|   440k|    parseContext.transferTypeAttributes(token.loc, attributes, *type);
 2923|       |
 2924|       |    // identifier
 2925|   440k|    HlslToken idToken;
 2926|   440k|    acceptIdentifier(idToken);
 2927|       |
 2928|       |    // array_specifier
 2929|   440k|    TArraySizes* arraySizes = nullptr;
 2930|   440k|    acceptArraySpecifier(arraySizes);
 2931|   440k|    if (arraySizes) {
  ------------------
  |  Branch (2931:9): [True: 0, False: 440k]
  ------------------
 2932|      0|        if (arraySizes->hasUnsized()) {
  ------------------
  |  Branch (2932:13): [True: 0, False: 0]
  ------------------
 2933|      0|            parseContext.error(token.loc, "function parameter requires array size", "[]", "");
 2934|      0|            return false;
 2935|      0|        }
 2936|       |
 2937|      0|        type->transferArraySizes(arraySizes);
 2938|      0|    }
 2939|       |
 2940|       |    // post_decls
 2941|   440k|    acceptPostDecls(type->getQualifier());
 2942|       |
 2943|   440k|    TIntermTyped* defaultValue;
 2944|   440k|    if (!acceptDefaultParameterDeclaration(*type, defaultValue))
  ------------------
  |  Branch (2944:9): [True: 0, False: 440k]
  ------------------
 2945|      0|        return false;
 2946|       |
 2947|   440k|    parseContext.paramFix(*type);
 2948|       |
 2949|       |    // If any prior parameters have default values, all the parameters after that must as well.
 2950|   440k|    if (defaultValue == nullptr && function.getDefaultParamCount() > 0) {
  ------------------
  |  Branch (2950:9): [True: 440k, False: 0]
  |  Branch (2950:36): [True: 0, False: 440k]
  ------------------
 2951|      0|        parseContext.error(idToken.loc, "invalid parameter after default value parameters", idToken.getCStrOrEmpty(), "");
 2952|      0|        return false;
 2953|      0|    }
 2954|       |
 2955|   440k|    TParameter param = { idToken.string, type, defaultValue };
 2956|   440k|    function.addParameter(param);
 2957|       |
 2958|   440k|    return true;
 2959|   440k|}
_ZN7glslang11HlslGrammar16acceptAttributesERNS_5TListINS_14TAttributeArgsEEE:
 3847|   636k|{
 3848|       |    // For now, accept the [ XXX(X) ] syntax, but drop all but
 3849|       |    // numthreads, which is used to set the CS local size.
 3850|       |    // TODO: subset to correct set?  Pass on?
 3851|   636k|    do {
 3852|   636k|        HlslToken attributeToken;
 3853|       |
 3854|       |        // LEFT_BRACKET?
 3855|   636k|        if (! acceptTokenClass(EHTokLeftBracket))
  ------------------
  |  Branch (3855:13): [True: 636k, False: 0]
  ------------------
 3856|   636k|            return;
 3857|       |        // another LEFT_BRACKET?
 3858|      0|        bool doubleBrackets = false;
 3859|      0|        if (acceptTokenClass(EHTokLeftBracket))
  ------------------
  |  Branch (3859:13): [True: 0, False: 0]
  ------------------
 3860|      0|            doubleBrackets = true;
 3861|       |
 3862|       |        // attribute? (could be namespace; will adjust later)
 3863|      0|        if (!acceptIdentifier(attributeToken)) {
  ------------------
  |  Branch (3863:13): [True: 0, False: 0]
  ------------------
 3864|      0|            if (!peekTokenClass(EHTokRightBracket)) {
  ------------------
  |  Branch (3864:17): [True: 0, False: 0]
  ------------------
 3865|      0|                expected("namespace or attribute identifier");
 3866|      0|                advanceToken();
 3867|      0|            }
 3868|      0|        }
 3869|       |
 3870|      0|        TString nameSpace;
 3871|      0|        if (acceptTokenClass(EHTokColonColon)) {
  ------------------
  |  Branch (3871:13): [True: 0, False: 0]
  ------------------
 3872|       |            // namespace COLON COLON
 3873|      0|            nameSpace = *attributeToken.string;
 3874|       |            // attribute
 3875|      0|            if (!acceptIdentifier(attributeToken)) {
  ------------------
  |  Branch (3875:17): [True: 0, False: 0]
  ------------------
 3876|      0|                expected("attribute identifier");
 3877|      0|                return;
 3878|      0|            }
 3879|      0|        }
 3880|       |
 3881|      0|        TIntermAggregate* expressions = nullptr;
 3882|       |
 3883|       |        // (x, ...)
 3884|      0|        if (acceptTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (3884:13): [True: 0, False: 0]
  ------------------
 3885|      0|            expressions = new TIntermAggregate;
 3886|       |
 3887|      0|            TIntermTyped* node;
 3888|      0|            bool expectingExpression = false;
 3889|       |
 3890|      0|            while (acceptAssignmentExpression(node)) {
  ------------------
  |  Branch (3890:20): [True: 0, False: 0]
  ------------------
 3891|      0|                expectingExpression = false;
 3892|      0|                expressions->getSequence().push_back(node);
 3893|      0|                if (acceptTokenClass(EHTokComma))
  ------------------
  |  Branch (3893:21): [True: 0, False: 0]
  ------------------
 3894|      0|                    expectingExpression = true;
 3895|      0|            }
 3896|       |
 3897|       |            // 'expressions' is an aggregate with the expressions in it
 3898|      0|            if (! acceptTokenClass(EHTokRightParen))
  ------------------
  |  Branch (3898:17): [True: 0, False: 0]
  ------------------
 3899|      0|                expected(")");
 3900|       |
 3901|       |            // Error for partial or missing expression
 3902|      0|            if (expectingExpression || expressions->getSequence().empty())
  ------------------
  |  Branch (3902:17): [True: 0, False: 0]
  |  Branch (3902:40): [True: 0, False: 0]
  ------------------
 3903|      0|                expected("expression");
 3904|      0|        }
 3905|       |
 3906|       |        // RIGHT_BRACKET
 3907|      0|        if (!acceptTokenClass(EHTokRightBracket)) {
  ------------------
  |  Branch (3907:13): [True: 0, False: 0]
  ------------------
 3908|      0|            expected("]");
 3909|      0|            return;
 3910|      0|        }
 3911|       |        // another RIGHT_BRACKET?
 3912|      0|        if (doubleBrackets && !acceptTokenClass(EHTokRightBracket)) {
  ------------------
  |  Branch (3912:13): [True: 0, False: 0]
  |  Branch (3912:31): [True: 0, False: 0]
  ------------------
 3913|      0|            expected("]]");
 3914|      0|            return;
 3915|      0|        }
 3916|       |
 3917|       |        // Add any values we found into the attribute map.
 3918|      0|        if (attributeToken.string != nullptr) {
  ------------------
  |  Branch (3918:13): [True: 0, False: 0]
  ------------------
 3919|      0|            TAttributeType attributeType = parseContext.attributeFromName(nameSpace, *attributeToken.string);
 3920|      0|            if (attributeType == EatNone)
  ------------------
  |  Branch (3920:17): [True: 0, False: 0]
  ------------------
 3921|      0|                parseContext.warn(attributeToken.loc, "unrecognized attribute", attributeToken.getCStrOrEmpty(), "");
 3922|      0|            else {
 3923|      0|                TAttributeArgs attributeArgs = { attributeType, expressions };
 3924|      0|                attributes.push_back(attributeArgs);
 3925|      0|            }
 3926|      0|        }
 3927|      0|    } while (true);
  ------------------
  |  Branch (3927:14): [True: 0, Folded]
  ------------------
 3928|   636k|}
_ZN7glslang11HlslGrammar20acceptArraySpecifierERPNS_11TArraySizesE:
 4278|   440k|{
 4279|   440k|    arraySizes = nullptr;
 4280|       |
 4281|       |    // Early-out if there aren't any array dimensions
 4282|   440k|    if (!peekTokenClass(EHTokLeftBracket))
  ------------------
  |  Branch (4282:9): [True: 440k, False: 0]
  ------------------
 4283|   440k|        return;
 4284|       |
 4285|       |    // If we get here, we have at least one array dimension.  This will track the sizes we find.
 4286|      0|    arraySizes = new TArraySizes;
 4287|       |
 4288|       |    // Collect each array dimension.
 4289|      0|    while (acceptTokenClass(EHTokLeftBracket)) {
  ------------------
  |  Branch (4289:12): [True: 0, False: 0]
  ------------------
 4290|      0|        TSourceLoc loc = token.loc;
 4291|      0|        TIntermTyped* sizeExpr = nullptr;
 4292|       |
 4293|       |        // Array sizing expression is optional.  If omitted, array will be later sized by initializer list.
 4294|      0|        const bool hasArraySize = acceptAssignmentExpression(sizeExpr);
 4295|       |
 4296|      0|        if (! acceptTokenClass(EHTokRightBracket)) {
  ------------------
  |  Branch (4296:13): [True: 0, False: 0]
  ------------------
 4297|      0|            expected("]");
 4298|      0|            return;
 4299|      0|        }
 4300|       |
 4301|      0|        if (hasArraySize) {
  ------------------
  |  Branch (4301:13): [True: 0, False: 0]
  ------------------
 4302|      0|            TArraySize arraySize;
 4303|      0|            parseContext.arraySizeCheck(loc, sizeExpr, arraySize);
 4304|      0|            arraySizes->addInnerSize(arraySize);
 4305|      0|        } else {
 4306|      0|            arraySizes->addInnerSize(0);  // sized by initializers.
 4307|      0|        }
 4308|      0|    }
 4309|      0|}
_ZN7glslang11HlslGrammar15acceptPostDeclsERNS_10TQualifierE:
 4323|   636k|{
 4324|   636k|    bool found = false;
 4325|       |
 4326|   636k|    do {
 4327|       |        // COLON
 4328|   636k|        if (acceptTokenClass(EHTokColon)) {
  ------------------
  |  Branch (4328:13): [True: 0, False: 636k]
  ------------------
 4329|      0|            found = true;
 4330|      0|            HlslToken idToken;
 4331|      0|            if (peekTokenClass(EHTokLayout))
  ------------------
  |  Branch (4331:17): [True: 0, False: 0]
  ------------------
 4332|      0|                acceptLayoutQualifierList(qualifier);
 4333|      0|            else if (acceptTokenClass(EHTokPackOffset)) {
  ------------------
  |  Branch (4333:22): [True: 0, False: 0]
  ------------------
 4334|       |                // PACKOFFSET LEFT_PAREN c[Subcomponent][.component] RIGHT_PAREN
 4335|      0|                if (! acceptTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (4335:21): [True: 0, False: 0]
  ------------------
 4336|      0|                    expected("(");
 4337|      0|                    return false;
 4338|      0|                }
 4339|      0|                HlslToken locationToken;
 4340|      0|                if (! acceptIdentifier(locationToken)) {
  ------------------
  |  Branch (4340:21): [True: 0, False: 0]
  ------------------
 4341|      0|                    expected("c[subcomponent][.component]");
 4342|      0|                    return false;
 4343|      0|                }
 4344|      0|                HlslToken componentToken;
 4345|      0|                if (acceptTokenClass(EHTokDot)) {
  ------------------
  |  Branch (4345:21): [True: 0, False: 0]
  ------------------
 4346|      0|                    if (! acceptIdentifier(componentToken)) {
  ------------------
  |  Branch (4346:25): [True: 0, False: 0]
  ------------------
 4347|      0|                        expected("component");
 4348|      0|                        return false;
 4349|      0|                    }
 4350|      0|                }
 4351|      0|                if (! acceptTokenClass(EHTokRightParen)) {
  ------------------
  |  Branch (4351:21): [True: 0, False: 0]
  ------------------
 4352|      0|                    expected(")");
 4353|      0|                    break;
 4354|      0|                }
 4355|      0|                parseContext.handlePackOffset(locationToken.loc, qualifier, *locationToken.string, componentToken.string);
 4356|      0|            } else if (! acceptIdentifier(idToken)) {
  ------------------
  |  Branch (4356:24): [True: 0, False: 0]
  ------------------
 4357|      0|                expected("layout, semantic, packoffset, or register");
 4358|      0|                return false;
 4359|      0|            } else if (*idToken.string == "register") {
  ------------------
  |  Branch (4359:24): [True: 0, False: 0]
  ------------------
 4360|       |                // REGISTER LEFT_PAREN [shader_profile,] Type#[subcomp]opt (COMMA SPACEN)opt RIGHT_PAREN
 4361|       |                // LEFT_PAREN
 4362|      0|                if (! acceptTokenClass(EHTokLeftParen)) {
  ------------------
  |  Branch (4362:21): [True: 0, False: 0]
  ------------------
 4363|      0|                    expected("(");
 4364|      0|                    return false;
 4365|      0|                }
 4366|      0|                HlslToken registerDesc;  // for Type#
 4367|      0|                HlslToken profile;
 4368|      0|                if (! acceptIdentifier(registerDesc)) {
  ------------------
  |  Branch (4368:21): [True: 0, False: 0]
  ------------------
 4369|      0|                    expected("register number description");
 4370|      0|                    return false;
 4371|      0|                }
 4372|      0|                if (registerDesc.string->size() > 1 && !isdigit((*registerDesc.string)[1]) &&
  ------------------
  |  Branch (4372:21): [True: 0, False: 0]
  |  Branch (4372:56): [True: 0, False: 0]
  ------------------
 4373|      0|                                                       acceptTokenClass(EHTokComma)) {
  ------------------
  |  Branch (4373:56): [True: 0, False: 0]
  ------------------
 4374|       |                    // Then we didn't really see the registerDesc yet, it was
 4375|       |                    // actually the profile.  Adjust...
 4376|      0|                    profile = registerDesc;
 4377|      0|                    if (! acceptIdentifier(registerDesc)) {
  ------------------
  |  Branch (4377:25): [True: 0, False: 0]
  ------------------
 4378|      0|                        expected("register number description");
 4379|      0|                        return false;
 4380|      0|                    }
 4381|      0|                }
 4382|      0|                int subComponent = 0;
 4383|      0|                if (acceptTokenClass(EHTokLeftBracket)) {
  ------------------
  |  Branch (4383:21): [True: 0, False: 0]
  ------------------
 4384|       |                    // LEFT_BRACKET subcomponent RIGHT_BRACKET
 4385|      0|                    if (! peekTokenClass(EHTokIntConstant)) {
  ------------------
  |  Branch (4385:25): [True: 0, False: 0]
  ------------------
 4386|      0|                        expected("literal integer");
 4387|      0|                        return false;
 4388|      0|                    }
 4389|      0|                    subComponent = token.i;
 4390|      0|                    advanceToken();
 4391|      0|                    if (! acceptTokenClass(EHTokRightBracket)) {
  ------------------
  |  Branch (4391:25): [True: 0, False: 0]
  ------------------
 4392|      0|                        expected("]");
 4393|      0|                        break;
 4394|      0|                    }
 4395|      0|                }
 4396|       |                // (COMMA SPACEN)opt
 4397|      0|                HlslToken spaceDesc;
 4398|      0|                if (acceptTokenClass(EHTokComma)) {
  ------------------
  |  Branch (4398:21): [True: 0, False: 0]
  ------------------
 4399|      0|                    if (! acceptIdentifier(spaceDesc)) {
  ------------------
  |  Branch (4399:25): [True: 0, False: 0]
  ------------------
 4400|      0|                        expected ("space identifier");
 4401|      0|                        return false;
 4402|      0|                    }
 4403|      0|                }
 4404|       |                // RIGHT_PAREN
 4405|      0|                if (! acceptTokenClass(EHTokRightParen)) {
  ------------------
  |  Branch (4405:21): [True: 0, False: 0]
  ------------------
 4406|      0|                    expected(")");
 4407|      0|                    break;
 4408|      0|                }
 4409|      0|                parseContext.handleRegister(registerDesc.loc, qualifier, profile.string, *registerDesc.string, subComponent, spaceDesc.string);
 4410|      0|            } else {
 4411|       |                // semantic, in idToken.string
 4412|      0|                TString semanticUpperCase = *idToken.string;
 4413|      0|                std::transform(semanticUpperCase.begin(), semanticUpperCase.end(), semanticUpperCase.begin(), ::toupper);
 4414|      0|                parseContext.handleSemantic(idToken.loc, qualifier, mapSemantic(semanticUpperCase.c_str()), semanticUpperCase);
 4415|      0|            }
 4416|   636k|        } else if (peekTokenClass(EHTokLeftAngle)) {
  ------------------
  |  Branch (4416:20): [True: 0, False: 636k]
  ------------------
 4417|      0|            found = true;
 4418|      0|            acceptAnnotations(qualifier);
 4419|      0|        } else
 4420|   636k|            break;
 4421|       |
 4422|   636k|    } while (true);
  ------------------
  |  Branch (4422:14): [True: 0, Folded]
  ------------------
 4423|       |
 4424|   636k|    return found;
 4425|   636k|}
_ZNK7glslang11HlslGrammar13getTypeStringENS_15EHlslTokenClassE:
 4462|   636k|{
 4463|   636k|    switch (tokenClass) {
 4464|      0|    case EHTokSample:     return "sample";
  ------------------
  |  Branch (4464:5): [True: 0, False: 636k]
  ------------------
 4465|      0|    case EHTokHalf:       return "half";
  ------------------
  |  Branch (4465:5): [True: 0, False: 636k]
  ------------------
 4466|      0|    case EHTokHalf1x1:    return "half1x1";
  ------------------
  |  Branch (4466:5): [True: 0, False: 636k]
  ------------------
 4467|      0|    case EHTokHalf1x2:    return "half1x2";
  ------------------
  |  Branch (4467:5): [True: 0, False: 636k]
  ------------------
 4468|      0|    case EHTokHalf1x3:    return "half1x3";
  ------------------
  |  Branch (4468:5): [True: 0, False: 636k]
  ------------------
 4469|      0|    case EHTokHalf1x4:    return "half1x4";
  ------------------
  |  Branch (4469:5): [True: 0, False: 636k]
  ------------------
 4470|      0|    case EHTokHalf2x1:    return "half2x1";
  ------------------
  |  Branch (4470:5): [True: 0, False: 636k]
  ------------------
 4471|      0|    case EHTokHalf2x2:    return "half2x2";
  ------------------
  |  Branch (4471:5): [True: 0, False: 636k]
  ------------------
 4472|      0|    case EHTokHalf2x3:    return "half2x3";
  ------------------
  |  Branch (4472:5): [True: 0, False: 636k]
  ------------------
 4473|      0|    case EHTokHalf2x4:    return "half2x4";
  ------------------
  |  Branch (4473:5): [True: 0, False: 636k]
  ------------------
 4474|      0|    case EHTokHalf3x1:    return "half3x1";
  ------------------
  |  Branch (4474:5): [True: 0, False: 636k]
  ------------------
 4475|      0|    case EHTokHalf3x2:    return "half3x2";
  ------------------
  |  Branch (4475:5): [True: 0, False: 636k]
  ------------------
 4476|      0|    case EHTokHalf3x3:    return "half3x3";
  ------------------
  |  Branch (4476:5): [True: 0, False: 636k]
  ------------------
 4477|      0|    case EHTokHalf3x4:    return "half3x4";
  ------------------
  |  Branch (4477:5): [True: 0, False: 636k]
  ------------------
 4478|      0|    case EHTokHalf4x1:    return "half4x1";
  ------------------
  |  Branch (4478:5): [True: 0, False: 636k]
  ------------------
 4479|      0|    case EHTokHalf4x2:    return "half4x2";
  ------------------
  |  Branch (4479:5): [True: 0, False: 636k]
  ------------------
 4480|      0|    case EHTokHalf4x3:    return "half4x3";
  ------------------
  |  Branch (4480:5): [True: 0, False: 636k]
  ------------------
 4481|      0|    case EHTokHalf4x4:    return "half4x4";
  ------------------
  |  Branch (4481:5): [True: 0, False: 636k]
  ------------------
 4482|      0|    case EHTokBool:       return "bool";
  ------------------
  |  Branch (4482:5): [True: 0, False: 636k]
  ------------------
 4483|      0|    case EHTokFloat:      return "float";
  ------------------
  |  Branch (4483:5): [True: 0, False: 636k]
  ------------------
 4484|      0|    case EHTokDouble:     return "double";
  ------------------
  |  Branch (4484:5): [True: 0, False: 636k]
  ------------------
 4485|      0|    case EHTokInt:        return "int";
  ------------------
  |  Branch (4485:5): [True: 0, False: 636k]
  ------------------
 4486|      0|    case EHTokUint:       return "uint";
  ------------------
  |  Branch (4486:5): [True: 0, False: 636k]
  ------------------
 4487|      0|    case EHTokMin16float: return "min16float";
  ------------------
  |  Branch (4487:5): [True: 0, False: 636k]
  ------------------
 4488|      0|    case EHTokMin10float: return "min10float";
  ------------------
  |  Branch (4488:5): [True: 0, False: 636k]
  ------------------
 4489|      0|    case EHTokMin16int:   return "min16int";
  ------------------
  |  Branch (4489:5): [True: 0, False: 636k]
  ------------------
 4490|      0|    case EHTokMin12int:   return "min12int";
  ------------------
  |  Branch (4490:5): [True: 0, False: 636k]
  ------------------
 4491|      0|    case EHTokConstantBuffer: return "ConstantBuffer";
  ------------------
  |  Branch (4491:5): [True: 0, False: 636k]
  ------------------
 4492|      0|    case EHTokLayout:     return "layout";
  ------------------
  |  Branch (4492:5): [True: 0, False: 636k]
  ------------------
 4493|   636k|    default:
  ------------------
  |  Branch (4493:5): [True: 636k, False: 0]
  ------------------
 4494|   636k|        return nullptr;
 4495|   636k|    }
 4496|   636k|}

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

_ZN7glslang16HlslParseContextC2ERNS_12TSymbolTableERNS_13TIntermediateEbi8EProfileRKNS_10SpvVersionE11EShLanguageR9TInfoSinkNSt3__112basic_stringIcNSC_11char_traitsIcEENS_14pool_allocatorIcEEEEb11EShMessages:
   59|    965|    TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language, infoSink,
   60|    965|                      forwardCompatible, messages, &sourceEntryPointName),
   61|    965|    annotationNestingLevel(0),
   62|    965|    inputPatch(nullptr),
   63|    965|    nextInLocation(0), nextOutLocation(0),
   64|    965|    entryPointFunction(nullptr),
   65|    965|    entryPointFunctionBody(nullptr),
   66|    965|    gsStreamOutput(nullptr),
   67|    965|    clipDistanceOutput(nullptr),
   68|    965|    cullDistanceOutput(nullptr),
   69|    965|    clipDistanceInput(nullptr),
   70|    965|    cullDistanceInput(nullptr),
   71|    965|    parsingEntrypointParameters(false)
   72|    965|{
   73|    965|    globalUniformDefaults.clear();
   74|    965|    globalUniformDefaults.layoutMatrix = ElmRowMajor;
   75|    965|    globalUniformDefaults.layoutPacking = ElpStd140;
   76|       |
   77|    965|    globalBufferDefaults.clear();
   78|    965|    globalBufferDefaults.layoutMatrix = ElmRowMajor;
   79|    965|    globalBufferDefaults.layoutPacking = ElpStd430;
   80|       |
   81|    965|    globalInputDefaults.clear();
   82|    965|    globalOutputDefaults.clear();
   83|       |
   84|    965|    clipSemanticNSizeIn.fill(0);
   85|    965|    cullSemanticNSizeIn.fill(0);
   86|    965|    clipSemanticNSizeOut.fill(0);
   87|    965|    cullSemanticNSizeOut.fill(0);
   88|       |
   89|       |    // "Shaders in the transform
   90|       |    // feedback capturing mode have an initial global default of
   91|       |    //     layout(xfb_buffer = 0) out;"
   92|    965|    if (language == EShLangVertex ||
  ------------------
  |  Branch (92:9): [True: 264, False: 701]
  ------------------
   93|    701|        language == EShLangTessControl ||
  ------------------
  |  Branch (93:9): [True: 57, False: 644]
  ------------------
   94|    644|        language == EShLangTessEvaluation ||
  ------------------
  |  Branch (94:9): [True: 53, False: 591]
  ------------------
   95|    591|        language == EShLangGeometry)
  ------------------
  |  Branch (95:9): [True: 53, False: 538]
  ------------------
   96|    427|        globalOutputDefaults.layoutXfbBuffer = 0;
   97|       |
   98|    965|    if (language == EShLangGeometry)
  ------------------
  |  Branch (98:9): [True: 53, False: 912]
  ------------------
   99|     53|        globalOutputDefaults.layoutStream = 0;
  100|    965|}
_ZN7glslang16HlslParseContextD2Ev:
  103|    965|{
  104|    965|}
_ZN7glslang16HlslParseContext27initializeExtensionBehaviorEv:
  107|    115|{
  108|    115|    TParseContextBase::initializeExtensionBehavior();
  109|       |
  110|       |    // HLSL allows #line by default.
  111|    115|    extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhEnable;
  112|    115|}
_ZN7glslang16HlslParseContext9setLimitsERK16TBuiltInResource:
  115|    115|{
  116|    115|    resources = r;
  117|    115|    intermediate.setLimits(resources);
  118|    115|}
_ZN7glslang16HlslParseContext18parseShaderStringsERNS_10TPpContextERNS_13TInputScannerEb:
  126|     95|{
  127|     95|    currentScanner = &input;
  128|     95|    ppContext.setInput(input, versionWillBeError);
  129|       |
  130|     95|    HlslScanContext scanContext(*this, ppContext);
  131|     95|    HlslGrammar grammar(scanContext, *this);
  132|     95|    if (!grammar.parse()) {
  ------------------
  |  Branch (132:9): [True: 38, False: 57]
  ------------------
  133|       |        // Print a message formated such that if you click on the message it will take you right to
  134|       |        // the line through most UIs.
  135|     38|        const glslang::TSourceLoc& sourceLoc = input.getSourceLoc();
  136|     38|        infoSink.info << sourceLoc.getFilenameStr() << "(" << sourceLoc.line << "): error at column " << sourceLoc.column
  137|     38|                      << ", HLSL parsing failed.\n";
  138|     38|        ++numErrors;
  139|     38|        return false;
  140|     38|    }
  141|       |
  142|     57|    finish();
  143|       |
  144|     57|    return numErrors == 0;
  145|     95|}
_ZN7glslang16HlslParseContext19getLayoutFromTxTypeERKNS_10TSourceLocERKNS_5TTypeE:
  186|  2.79k|{
  187|  2.79k|    if (txType.isStruct()) {
  ------------------
  |  Branch (187:9): [True: 0, False: 2.79k]
  ------------------
  188|       |        // TODO: implement.
  189|      0|        error(loc, "unimplemented: structure type in image or buffer", "", "");
  190|      0|        return ElfNone;
  191|      0|    }
  192|       |
  193|  2.79k|    const int components = txType.getVectorSize();
  194|  2.79k|    const TBasicType txBasicType = txType.getBasicType();
  195|       |
  196|  2.79k|    const auto selectFormat = [this,&components](TLayoutFormat v1, TLayoutFormat v2, TLayoutFormat v4) -> TLayoutFormat {
  197|  2.79k|        if (intermediate.getNoStorageFormat())
  198|  2.79k|            return ElfNone;
  199|       |
  200|  2.79k|        return components == 1 ? v1 :
  201|  2.79k|               components == 2 ? v2 : v4;
  202|  2.79k|    };
  203|       |
  204|  2.79k|    switch (txBasicType) {
  205|    931|    case EbtFloat: return selectFormat(ElfR32f,  ElfRg32f,  ElfRgba32f);
  ------------------
  |  Branch (205:5): [True: 931, False: 1.86k]
  ------------------
  206|    931|    case EbtInt:   return selectFormat(ElfR32i,  ElfRg32i,  ElfRgba32i);
  ------------------
  |  Branch (206:5): [True: 931, False: 1.86k]
  ------------------
  207|    931|    case EbtUint:  return selectFormat(ElfR32ui, ElfRg32ui, ElfRgba32ui);
  ------------------
  |  Branch (207:5): [True: 931, False: 1.86k]
  ------------------
  208|      0|    default:
  ------------------
  |  Branch (208:5): [True: 0, False: 2.79k]
  ------------------
  209|      0|        error(loc, "unknown basic type in image format", "", "");
  210|      0|        return ElfNone;
  211|  2.79k|    }
  212|  2.79k|}
_ZN7glslang16HlslParseContext24handleFunctionDeclaratorERKNS_10TSourceLocERNS_9TFunctionEb:
 1595|   196k|{
 1596|       |    //
 1597|       |    // Multiple declarations of the same function name are allowed.
 1598|       |    //
 1599|       |    // If this is a definition, the definition production code will check for redefinitions
 1600|       |    // (we don't know at this point if it's a definition or not).
 1601|       |    //
 1602|   196k|    bool builtIn;
 1603|   196k|    TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn);
 1604|   196k|    const TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr;
  ------------------
  |  Branch (1604:32): [True: 1.17k, False: 195k]
  ------------------
 1605|       |
 1606|   196k|    if (prototype) {
  ------------------
  |  Branch (1606:9): [True: 196k, False: 0]
  ------------------
 1607|       |        // All built-in functions are defined, even though they don't have a body.
 1608|       |        // Count their prototype as a definition instead.
 1609|   196k|        if (symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (1609:13): [True: 196k, False: 0]
  ------------------
 1610|   196k|            function.setDefined();
 1611|      0|        else {
 1612|      0|            if (prevDec && ! builtIn)
  ------------------
  |  Branch (1612:17): [True: 0, False: 0]
  |  Branch (1612:28): [True: 0, False: 0]
  ------------------
 1613|      0|                symbol->getAsFunction()->setPrototyped();  // need a writable one, but like having prevDec as a const
 1614|      0|            function.setPrototyped();
 1615|      0|        }
 1616|   196k|    }
 1617|       |
 1618|       |    // This insert won't actually insert it if it's a duplicate signature, but it will still check for
 1619|       |    // other forms of name collisions.
 1620|   196k|    if (! symbolTable.insert(function))
  ------------------
  |  Branch (1620:9): [True: 0, False: 196k]
  ------------------
 1621|      0|        error(loc, "function name is redeclaration of existing name", function.getName().c_str(), "");
 1622|   196k|}
_ZN7glslang16HlslParseContext22transferTypeAttributesERKNS_10TSourceLocERKNS_5TListINS_14TAttributeArgsEEERNS_5TTypeEb:
 1917|   636k|{
 1918|   636k|    if (attributes.size() == 0)
  ------------------
  |  Branch (1918:9): [True: 636k, False: 0]
  ------------------
 1919|   636k|        return;
 1920|       |
 1921|      0|    int value;
 1922|      0|    TString builtInString;
 1923|      0|    for (auto it = attributes.begin(); it != attributes.end(); ++it) {
  ------------------
  |  Branch (1923:40): [True: 0, False: 0]
  ------------------
 1924|      0|        switch (it->name) {
 1925|      0|        case EatLocation:
  ------------------
  |  Branch (1925:9): [True: 0, False: 0]
  ------------------
 1926|       |            // location
 1927|      0|            if (it->getInt(value))
  ------------------
  |  Branch (1927:17): [True: 0, False: 0]
  ------------------
 1928|      0|                type.getQualifier().layoutLocation = value;
 1929|      0|            else
 1930|      0|                error(loc, "needs a literal integer", "location", "");
 1931|      0|            break;
 1932|      0|        case EatBinding:
  ------------------
  |  Branch (1932:9): [True: 0, False: 0]
  ------------------
 1933|       |            // binding
 1934|      0|            if (it->getInt(value)) {
  ------------------
  |  Branch (1934:17): [True: 0, False: 0]
  ------------------
 1935|      0|                type.getQualifier().layoutBinding = value;
 1936|      0|                type.getQualifier().layoutSet = 0;
 1937|      0|            } else
 1938|      0|                error(loc, "needs a literal integer", "binding", "");
 1939|       |            // set
 1940|      0|            if (it->getInt(value, 1))
  ------------------
  |  Branch (1940:17): [True: 0, False: 0]
  ------------------
 1941|      0|                type.getQualifier().layoutSet = value;
 1942|      0|            break;
 1943|      0|        case EatGlobalBinding:
  ------------------
  |  Branch (1943:9): [True: 0, False: 0]
  ------------------
 1944|       |            // global cbuffer binding
 1945|      0|            if (it->getInt(value))
  ------------------
  |  Branch (1945:17): [True: 0, False: 0]
  ------------------
 1946|      0|                globalUniformBinding = value;
 1947|      0|            else
 1948|      0|                error(loc, "needs a literal integer", "global binding", "");
 1949|       |            // global cbuffer set
 1950|      0|            if (it->getInt(value, 1))
  ------------------
  |  Branch (1950:17): [True: 0, False: 0]
  ------------------
 1951|      0|                globalUniformSet = value;
 1952|      0|            break;
 1953|      0|        case EatInputAttachment:
  ------------------
  |  Branch (1953:9): [True: 0, False: 0]
  ------------------
 1954|       |            // input attachment
 1955|      0|            if (it->getInt(value))
  ------------------
  |  Branch (1955:17): [True: 0, False: 0]
  ------------------
 1956|      0|                type.getQualifier().layoutAttachment = value;
 1957|      0|            else
 1958|      0|                error(loc, "needs a literal integer", "input attachment", "");
 1959|      0|            break;
 1960|      0|        case EatBuiltIn:
  ------------------
  |  Branch (1960:9): [True: 0, False: 0]
  ------------------
 1961|       |            // PointSize built-in
 1962|      0|            if (it->getString(builtInString, 0, false)) {
  ------------------
  |  Branch (1962:17): [True: 0, False: 0]
  ------------------
 1963|      0|                if (builtInString == "PointSize")
  ------------------
  |  Branch (1963:21): [True: 0, False: 0]
  ------------------
 1964|      0|                    type.getQualifier().builtIn = EbvPointSize;
 1965|      0|            }
 1966|      0|            break;
 1967|      0|        case EatPushConstant:
  ------------------
  |  Branch (1967:9): [True: 0, False: 0]
  ------------------
 1968|       |            // push_constant
 1969|      0|            type.getQualifier().layoutPushConstant = true;
 1970|      0|            break;
 1971|      0|        case EatConstantId:
  ------------------
  |  Branch (1971:9): [True: 0, False: 0]
  ------------------
 1972|       |            // specialization constant
 1973|      0|            if (type.getQualifier().storage != EvqConst) {
  ------------------
  |  Branch (1973:17): [True: 0, False: 0]
  ------------------
 1974|      0|                error(loc, "needs a const type", "constant_id", "");
 1975|      0|                break;
 1976|      0|            }
 1977|      0|            if (it->getInt(value)) {
  ------------------
  |  Branch (1977:17): [True: 0, False: 0]
  ------------------
 1978|      0|                TSourceLoc loc;
 1979|      0|                loc.init();
 1980|      0|                setSpecConstantId(loc, type.getQualifier(), (unsigned)value);
 1981|      0|            }
 1982|      0|            break;
 1983|       |
 1984|       |        // image formats
 1985|      0|        case EatFormatRgba32f:      type.getQualifier().layoutFormat = ElfRgba32f;      break;
  ------------------
  |  Branch (1985:9): [True: 0, False: 0]
  ------------------
 1986|      0|        case EatFormatRgba16f:      type.getQualifier().layoutFormat = ElfRgba16f;      break;
  ------------------
  |  Branch (1986:9): [True: 0, False: 0]
  ------------------
 1987|      0|        case EatFormatR32f:         type.getQualifier().layoutFormat = ElfR32f;         break;
  ------------------
  |  Branch (1987:9): [True: 0, False: 0]
  ------------------
 1988|      0|        case EatFormatRgba8:        type.getQualifier().layoutFormat = ElfRgba8;        break;
  ------------------
  |  Branch (1988:9): [True: 0, False: 0]
  ------------------
 1989|      0|        case EatFormatRgba8Snorm:   type.getQualifier().layoutFormat = ElfRgba8Snorm;   break;
  ------------------
  |  Branch (1989:9): [True: 0, False: 0]
  ------------------
 1990|      0|        case EatFormatRg32f:        type.getQualifier().layoutFormat = ElfRg32f;        break;
  ------------------
  |  Branch (1990:9): [True: 0, False: 0]
  ------------------
 1991|      0|        case EatFormatRg16f:        type.getQualifier().layoutFormat = ElfRg16f;        break;
  ------------------
  |  Branch (1991:9): [True: 0, False: 0]
  ------------------
 1992|      0|        case EatFormatR11fG11fB10f: type.getQualifier().layoutFormat = ElfR11fG11fB10f; break;
  ------------------
  |  Branch (1992:9): [True: 0, False: 0]
  ------------------
 1993|      0|        case EatFormatR16f:         type.getQualifier().layoutFormat = ElfR16f;         break;
  ------------------
  |  Branch (1993:9): [True: 0, False: 0]
  ------------------
 1994|      0|        case EatFormatRgba16:       type.getQualifier().layoutFormat = ElfRgba16;       break;
  ------------------
  |  Branch (1994:9): [True: 0, False: 0]
  ------------------
 1995|      0|        case EatFormatRgb10A2:      type.getQualifier().layoutFormat = ElfRgb10A2;      break;
  ------------------
  |  Branch (1995:9): [True: 0, False: 0]
  ------------------
 1996|      0|        case EatFormatRg16:         type.getQualifier().layoutFormat = ElfRg16;         break;
  ------------------
  |  Branch (1996:9): [True: 0, False: 0]
  ------------------
 1997|      0|        case EatFormatRg8:          type.getQualifier().layoutFormat = ElfRg8;          break;
  ------------------
  |  Branch (1997:9): [True: 0, False: 0]
  ------------------
 1998|      0|        case EatFormatR16:          type.getQualifier().layoutFormat = ElfR16;          break;
  ------------------
  |  Branch (1998:9): [True: 0, False: 0]
  ------------------
 1999|      0|        case EatFormatR8:           type.getQualifier().layoutFormat = ElfR8;           break;
  ------------------
  |  Branch (1999:9): [True: 0, False: 0]
  ------------------
 2000|      0|        case EatFormatRgba16Snorm:  type.getQualifier().layoutFormat = ElfRgba16Snorm;  break;
  ------------------
  |  Branch (2000:9): [True: 0, False: 0]
  ------------------
 2001|      0|        case EatFormatRg16Snorm:    type.getQualifier().layoutFormat = ElfRg16Snorm;    break;
  ------------------
  |  Branch (2001:9): [True: 0, False: 0]
  ------------------
 2002|      0|        case EatFormatRg8Snorm:     type.getQualifier().layoutFormat = ElfRg8Snorm;     break;
  ------------------
  |  Branch (2002:9): [True: 0, False: 0]
  ------------------
 2003|      0|        case EatFormatR16Snorm:     type.getQualifier().layoutFormat = ElfR16Snorm;     break;
  ------------------
  |  Branch (2003:9): [True: 0, False: 0]
  ------------------
 2004|      0|        case EatFormatR8Snorm:      type.getQualifier().layoutFormat = ElfR8Snorm;      break;
  ------------------
  |  Branch (2004:9): [True: 0, False: 0]
  ------------------
 2005|      0|        case EatFormatRgba32i:      type.getQualifier().layoutFormat = ElfRgba32i;      break;
  ------------------
  |  Branch (2005:9): [True: 0, False: 0]
  ------------------
 2006|      0|        case EatFormatRgba16i:      type.getQualifier().layoutFormat = ElfRgba16i;      break;
  ------------------
  |  Branch (2006:9): [True: 0, False: 0]
  ------------------
 2007|      0|        case EatFormatRgba8i:       type.getQualifier().layoutFormat = ElfRgba8i;       break;
  ------------------
  |  Branch (2007:9): [True: 0, False: 0]
  ------------------
 2008|      0|        case EatFormatR32i:         type.getQualifier().layoutFormat = ElfR32i;         break;
  ------------------
  |  Branch (2008:9): [True: 0, False: 0]
  ------------------
 2009|      0|        case EatFormatRg32i:        type.getQualifier().layoutFormat = ElfRg32i;        break;
  ------------------
  |  Branch (2009:9): [True: 0, False: 0]
  ------------------
 2010|      0|        case EatFormatRg16i:        type.getQualifier().layoutFormat = ElfRg16i;        break;
  ------------------
  |  Branch (2010:9): [True: 0, False: 0]
  ------------------
 2011|      0|        case EatFormatRg8i:         type.getQualifier().layoutFormat = ElfRg8i;         break;
  ------------------
  |  Branch (2011:9): [True: 0, False: 0]
  ------------------
 2012|      0|        case EatFormatR16i:         type.getQualifier().layoutFormat = ElfR16i;         break;
  ------------------
  |  Branch (2012:9): [True: 0, False: 0]
  ------------------
 2013|      0|        case EatFormatR8i:          type.getQualifier().layoutFormat = ElfR8i;          break;
  ------------------
  |  Branch (2013:9): [True: 0, False: 0]
  ------------------
 2014|      0|        case EatFormatRgba32ui:     type.getQualifier().layoutFormat = ElfRgba32ui;     break;
  ------------------
  |  Branch (2014:9): [True: 0, False: 0]
  ------------------
 2015|      0|        case EatFormatRgba16ui:     type.getQualifier().layoutFormat = ElfRgba16ui;     break;
  ------------------
  |  Branch (2015:9): [True: 0, False: 0]
  ------------------
 2016|      0|        case EatFormatRgba8ui:      type.getQualifier().layoutFormat = ElfRgba8ui;      break;
  ------------------
  |  Branch (2016:9): [True: 0, False: 0]
  ------------------
 2017|      0|        case EatFormatR32ui:        type.getQualifier().layoutFormat = ElfR32ui;        break;
  ------------------
  |  Branch (2017:9): [True: 0, False: 0]
  ------------------
 2018|      0|        case EatFormatRgb10a2ui:    type.getQualifier().layoutFormat = ElfRgb10a2ui;    break;
  ------------------
  |  Branch (2018:9): [True: 0, False: 0]
  ------------------
 2019|      0|        case EatFormatRg32ui:       type.getQualifier().layoutFormat = ElfRg32ui;       break;
  ------------------
  |  Branch (2019:9): [True: 0, False: 0]
  ------------------
 2020|      0|        case EatFormatRg16ui:       type.getQualifier().layoutFormat = ElfRg16ui;       break;
  ------------------
  |  Branch (2020:9): [True: 0, False: 0]
  ------------------
 2021|      0|        case EatFormatRg8ui:        type.getQualifier().layoutFormat = ElfRg8ui;        break;
  ------------------
  |  Branch (2021:9): [True: 0, False: 0]
  ------------------
 2022|      0|        case EatFormatR16ui:        type.getQualifier().layoutFormat = ElfR16ui;        break;
  ------------------
  |  Branch (2022:9): [True: 0, False: 0]
  ------------------
 2023|      0|        case EatFormatR8ui:         type.getQualifier().layoutFormat = ElfR8ui;         break;
  ------------------
  |  Branch (2023:9): [True: 0, False: 0]
  ------------------
 2024|      0|        case EatFormatUnknown:      type.getQualifier().layoutFormat = ElfNone;         break;
  ------------------
  |  Branch (2024:9): [True: 0, False: 0]
  ------------------
 2025|       |
 2026|      0|        case EatNonWritable:  type.getQualifier().readonly = true;   break;
  ------------------
  |  Branch (2026:9): [True: 0, False: 0]
  ------------------
 2027|      0|        case EatNonReadable:  type.getQualifier().writeonly = true;  break;
  ------------------
  |  Branch (2027:9): [True: 0, False: 0]
  ------------------
 2028|       |
 2029|      0|        default:
  ------------------
  |  Branch (2029:9): [True: 0, False: 0]
  ------------------
 2030|      0|            if (! allowEntry)
  ------------------
  |  Branch (2030:17): [True: 0, False: 0]
  ------------------
 2031|      0|                warn(loc, "attribute does not apply to a type", "", "");
 2032|      0|            break;
 2033|      0|        }
 2034|      0|    }
 2035|      0|}
_ZN7glslang16HlslParseContext8paramFixERNS_5TTypeE:
 7093|   440k|{
 7094|   440k|    switch (type.getQualifier().storage) {
 7095|      0|    case EvqConst:
  ------------------
  |  Branch (7095:5): [True: 0, False: 440k]
  ------------------
 7096|      0|        type.getQualifier().storage = EvqConstReadOnly;
 7097|      0|        break;
 7098|      0|    case EvqGlobal:
  ------------------
  |  Branch (7098:5): [True: 0, False: 440k]
  ------------------
 7099|   398k|    case EvqTemporary:
  ------------------
  |  Branch (7099:5): [True: 398k, False: 42.6k]
  ------------------
 7100|   398k|        type.getQualifier().storage = EvqIn;
 7101|   398k|        break;
 7102|      0|    case EvqBuffer:
  ------------------
  |  Branch (7102:5): [True: 0, False: 440k]
  ------------------
 7103|      0|        {
 7104|       |            // SSBO parameter.  These do not go through the declareBlock path since they are fn parameters.
 7105|      0|            correctUniform(type.getQualifier());
 7106|      0|            TQualifier bufferQualifier = globalBufferDefaults;
 7107|      0|            mergeObjectLayoutQualifiers(bufferQualifier, type.getQualifier(), true);
 7108|      0|            bufferQualifier.storage = type.getQualifier().storage;
 7109|      0|            bufferQualifier.readonly = type.getQualifier().readonly;
 7110|      0|            bufferQualifier.coherent = type.getQualifier().coherent;
 7111|      0|            bufferQualifier.declaredBuiltIn = type.getQualifier().declaredBuiltIn;
 7112|      0|            type.getQualifier() = bufferQualifier;
 7113|      0|            break;
 7114|      0|        }
 7115|  42.6k|    default:
  ------------------
  |  Branch (7115:5): [True: 42.6k, False: 398k]
  ------------------
 7116|  42.6k|        break;
 7117|   440k|    }
 7118|   440k|}
_ZN7glslang16HlslParseContext14lookupUserTypeERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEERNS_5TTypeE:
 7976|     24|{
 7977|     24|    TSymbol* symbol = symbolTable.find(typeName);
 7978|     24|    if (symbol && symbol->getAsVariable() && symbol->getAsVariable()->isUserType()) {
  ------------------
  |  Branch (7978:9): [True: 0, False: 24]
  |  Branch (7978:19): [True: 0, False: 0]
  |  Branch (7978:46): [True: 0, False: 0]
  ------------------
 7979|      0|        type.shallowCopy(symbol->getType());
 7980|      0|        return symbol;
 7981|      0|    } else
 7982|     24|        return nullptr;
 7983|     24|}
_ZNK7glslang16HlslParseContext20getFullNamespaceNameERPNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 9500|   196k|{
 9501|   196k|    if (currentTypePrefix.size() == 0)
  ------------------
  |  Branch (9501:9): [True: 196k, False: 0]
  ------------------
 9502|   196k|        return;
 9503|       |
 9504|      0|    TString* fullName = NewPoolTString(currentTypePrefix.back().c_str());
 9505|      0|    fullName->append(*name);
 9506|      0|    name = fullName;
 9507|      0|}
_ZN7glslang16HlslParseContext20setTextureReturnTypeERNS_8TSamplerERKNS_5TTypeERKNS_10TSourceLocE:
 9729|  39.8k|{
 9730|       |    // Seed the output with an invalid index.  We will set it to a valid one if we can.
 9731|  39.8k|    sampler.structReturnIndex = TSampler::noReturnStruct;
 9732|       |
 9733|       |    // Arrays aren't supported.
 9734|  39.8k|    if (retType.isArray()) {
  ------------------
  |  Branch (9734:9): [True: 0, False: 39.8k]
  ------------------
 9735|      0|        error(loc, "Arrays not supported in texture template types", "", "");
 9736|      0|        return false;
 9737|      0|    }
 9738|       |
 9739|       |    // If return type is a vector, remember the vector size in the sampler, and return.
 9740|  39.8k|    if (retType.isVector() || retType.isScalar()) {
  ------------------
  |  Branch (9740:9): [True: 39.8k, False: 0]
  |  Branch (9740:31): [True: 0, False: 0]
  ------------------
 9741|  39.8k|        sampler.vectorSize = retType.getVectorSize();
 9742|  39.8k|        return true;
 9743|  39.8k|    }
 9744|       |
 9745|       |    // If it wasn't a vector, it must be a struct meeting certain requirements.  The requirements
 9746|       |    // are checked below: just check for struct-ness here.
 9747|      0|    if (!retType.isStruct()) {
  ------------------
  |  Branch (9747:9): [True: 0, False: 0]
  ------------------
 9748|      0|        error(loc, "Invalid texture template type", "", "");
 9749|      0|        return false;
 9750|      0|    }
 9751|       |
 9752|       |    // TODO: Subpass doesn't handle struct returns, due to some oddities with fn overloading.
 9753|      0|    if (sampler.isSubpass()) {
  ------------------
  |  Branch (9753:9): [True: 0, False: 0]
  ------------------
 9754|      0|        error(loc, "Unimplemented: structure template type in subpass input", "", "");
 9755|      0|        return false;
 9756|      0|    }
 9757|       |
 9758|      0|    TTypeList* members = retType.getWritableStruct();
 9759|       |
 9760|       |    // Check for too many or not enough structure members.
 9761|      0|    if (members->size() > 4 || members->size() == 0) {
  ------------------
  |  Branch (9761:9): [True: 0, False: 0]
  |  Branch (9761:32): [True: 0, False: 0]
  ------------------
 9762|      0|        error(loc, "Invalid member count in texture template structure", "", "");
 9763|      0|        return false;
 9764|      0|    }
 9765|       |
 9766|       |    // Error checking: We must have <= 4 total components, all of the same basic type.
 9767|      0|    unsigned totalComponents = 0;
 9768|      0|    for (unsigned m = 0; m < members->size(); ++m) {
  ------------------
  |  Branch (9768:26): [True: 0, False: 0]
  ------------------
 9769|       |        // Check for bad member types
 9770|      0|        if (!(*members)[m].type->isScalar() && !(*members)[m].type->isVector()) {
  ------------------
  |  Branch (9770:13): [True: 0, False: 0]
  |  Branch (9770:48): [True: 0, False: 0]
  ------------------
 9771|      0|            error(loc, "Invalid texture template struct member type", "", "");
 9772|      0|            return false;
 9773|      0|        }
 9774|       |
 9775|      0|        const unsigned memberVectorSize = (*members)[m].type->getVectorSize();
 9776|      0|        totalComponents += memberVectorSize;
 9777|       |
 9778|       |        // too many total member components
 9779|      0|        if (totalComponents > 4) {
  ------------------
  |  Branch (9779:13): [True: 0, False: 0]
  ------------------
 9780|      0|            error(loc, "Too many components in texture template structure type", "", "");
 9781|      0|            return false;
 9782|      0|        }
 9783|       |
 9784|       |        // All members must be of a common basic type
 9785|      0|        if ((*members)[m].type->getBasicType() != (*members)[0].type->getBasicType()) {
  ------------------
  |  Branch (9785:13): [True: 0, False: 0]
  ------------------
 9786|      0|            error(loc, "Texture template structure members must same basic type", "", "");
 9787|      0|            return false;
 9788|      0|        }
 9789|      0|    }
 9790|       |
 9791|       |    // If the structure in the return type already exists in the table, we'll use it.  Otherwise, we'll make
 9792|       |    // a new entry.  This is a linear search, but it hardly ever happens, and the list cannot be very large.
 9793|      0|    for (unsigned int idx = 0; idx < textureReturnStruct.size(); ++idx) {
  ------------------
  |  Branch (9793:32): [True: 0, False: 0]
  ------------------
 9794|      0|        if (textureReturnStruct[idx] == members) {
  ------------------
  |  Branch (9794:13): [True: 0, False: 0]
  ------------------
 9795|      0|            sampler.structReturnIndex = idx;
 9796|      0|            return true;
 9797|      0|        }
 9798|      0|    }
 9799|       |
 9800|       |    // It wasn't found as an existing entry.  See if we have room for a new one.
 9801|      0|    if (textureReturnStruct.size() >= TSampler::structReturnSlots) {
  ------------------
  |  Branch (9801:9): [True: 0, False: 0]
  ------------------
 9802|      0|        error(loc, "Texture template struct return slots exceeded", "", "");
 9803|      0|        return false;
 9804|      0|    }
 9805|       |
 9806|       |    // Insert it in the vector that tracks struct return types.
 9807|      0|    sampler.structReturnIndex = unsigned(textureReturnStruct.size());
 9808|      0|    textureReturnStruct.push_back(members);
 9809|       |
 9810|       |    // Success!
 9811|      0|    return true;
 9812|      0|}
_ZN7glslang16HlslParseContext26addPatchConstantInvocationEv:
 9878|     57|{
 9879|     57|    TSourceLoc loc;
 9880|     57|    loc.init();
 9881|       |
 9882|       |    // If there's no patch constant function, or we're not a HS, do nothing.
 9883|     57|    if (patchConstantFunctionName.empty() || language != EShLangTessControl)
  ------------------
  |  Branch (9883:9): [True: 57, False: 0]
  |  Branch (9883:46): [True: 0, False: 0]
  ------------------
 9884|     57|        return;
 9885|       |
 9886|       |    // Look for built-in variables in a function's parameter list.
 9887|      0|    const auto findBuiltIns = [&](const TFunction& function, std::set<tInterstageIoData>& builtIns) {
 9888|      0|        for (int p=0; p<function.getParamCount(); ++p) {
 9889|      0|            TStorageQualifier storage = function[p].type->getQualifier().storage;
 9890|       |
 9891|      0|            if (storage == EvqConstReadOnly) // treated identically to input
 9892|      0|                storage = EvqIn;
 9893|       |
 9894|      0|            if (function[p].getDeclaredBuiltIn() != EbvNone)
 9895|      0|                builtIns.insert(HlslParseContext::tInterstageIoData(function[p].getDeclaredBuiltIn(), storage));
 9896|      0|            else
 9897|      0|                builtIns.insert(HlslParseContext::tInterstageIoData(function[p].type->getQualifier().builtIn, storage));
 9898|      0|        }
 9899|      0|    };
 9900|       |
 9901|       |    // If we synthesize a built-in interface variable, we must add it to the linkage.
 9902|      0|    const auto addToLinkage = [&](const TType& type, const TString* name, TIntermSymbol** symbolNode) {
 9903|      0|        if (name == nullptr) {
 9904|      0|            error(loc, "unable to locate patch function parameter name", "", "");
 9905|      0|            return;
 9906|      0|        } else {
 9907|      0|            TVariable& variable = *new TVariable(name, type);
 9908|      0|            if (! symbolTable.insert(variable)) {
 9909|      0|                error(loc, "unable to declare patch constant function interface variable", name->c_str(), "");
 9910|      0|                return;
 9911|      0|            }
 9912|       |
 9913|      0|            globalQualifierFix(loc, variable.getWritableType().getQualifier());
 9914|       |
 9915|      0|            if (symbolNode != nullptr)
 9916|      0|                *symbolNode = intermediate.addSymbol(variable);
 9917|       |
 9918|      0|            trackLinkage(variable);
 9919|      0|        }
 9920|      0|    };
 9921|       |
 9922|      0|    const auto isOutputPatch = [](TFunction& patchConstantFunction, int param) {
 9923|      0|        const TType& type = *patchConstantFunction[param].type;
 9924|      0|        const TBuiltInVariable biType = patchConstantFunction[param].getDeclaredBuiltIn();
 9925|       |
 9926|      0|        return type.isSizedArray() && biType == EbvOutputPatch;
 9927|      0|    };
 9928|       |
 9929|       |    // We will perform these steps.  Each is in a scoped block for separation: they could
 9930|       |    // become separate functions to make addPatchConstantInvocation shorter.
 9931|       |    //
 9932|       |    // 1. Union the interfaces, and create built-ins for anything present in the PCF and
 9933|       |    //    declared as a built-in variable that isn't present in the entry point's signature.
 9934|       |    //
 9935|       |    // 2. Synthesizes a call to the patchconstfunction using built-in variables from either main,
 9936|       |    //    or the ones we created.  Matching is based on built-in type.  We may use synthesized
 9937|       |    //    variables from (1) above.
 9938|       |    //
 9939|       |    // 2B: Synthesize per control point invocations of wrapped entry point if the PCF requires them.
 9940|       |    //
 9941|       |    // 3. Create a return sequence: copy the return value (if any) from the PCF to a
 9942|       |    //    (non-sanitized) output variable.  In case this may involve multiple copies, such as for
 9943|       |    //    an arrayed variable, a temporary copy of the PCF output is created to avoid multiple
 9944|       |    //    indirections into a complex R-value coming from the call to the PCF.
 9945|       |    //
 9946|       |    // 4. Create a barrier.
 9947|       |    //
 9948|       |    // 5/5B. Call the PCF inside an if test for (invocation id == 0).
 9949|       |
 9950|      0|    TFunction* patchConstantFunctionPtr = const_cast<TFunction*>(findPatchConstantFunction(loc));
 9951|       |
 9952|      0|    if (patchConstantFunctionPtr == nullptr)
  ------------------
  |  Branch (9952:9): [True: 0, False: 0]
  ------------------
 9953|      0|        return;
 9954|       |
 9955|      0|    TFunction& patchConstantFunction = *patchConstantFunctionPtr;
 9956|       |
 9957|      0|    const int pcfParamCount = patchConstantFunction.getParamCount();
 9958|      0|    TIntermSymbol* invocationIdSym = findTessLinkageSymbol(EbvInvocationId);
 9959|      0|    TIntermSequence& epBodySeq = entryPointFunctionBody->getAsAggregate()->getSequence();
 9960|       |
 9961|      0|    int outPatchParam = -1; // -1 means there isn't one.
 9962|       |
 9963|       |    // ================ Step 1A: Union Interfaces ================
 9964|       |    // Our patch constant function.
 9965|      0|    {
 9966|      0|        std::set<tInterstageIoData> pcfBuiltIns;  // patch constant function built-ins
 9967|      0|        std::set<tInterstageIoData> epfBuiltIns;  // entry point function built-ins
 9968|       |
 9969|      0|        assert(entryPointFunction);
 9970|      0|        assert(entryPointFunctionBody);
 9971|       |
 9972|      0|        findBuiltIns(patchConstantFunction, pcfBuiltIns);
 9973|      0|        findBuiltIns(*entryPointFunction,   epfBuiltIns);
 9974|       |
 9975|       |        // Find the set of built-ins in the PCF that are not present in the entry point.
 9976|      0|        std::set<tInterstageIoData> notInEntryPoint;
 9977|       |
 9978|      0|        notInEntryPoint = pcfBuiltIns;
 9979|       |
 9980|       |        // std::set_difference not usable on unordered containers
 9981|      0|        for (auto bi = epfBuiltIns.begin(); bi != epfBuiltIns.end(); ++bi)
  ------------------
  |  Branch (9981:45): [True: 0, False: 0]
  ------------------
 9982|      0|            notInEntryPoint.erase(*bi);
 9983|       |
 9984|       |        // Now we'll add those to the entry and to the linkage.
 9985|      0|        for (int p=0; p<pcfParamCount; ++p) {
  ------------------
  |  Branch (9985:23): [True: 0, False: 0]
  ------------------
 9986|      0|            const TBuiltInVariable biType   = patchConstantFunction[p].getDeclaredBuiltIn();
 9987|      0|            TStorageQualifier storage = patchConstantFunction[p].type->getQualifier().storage;
 9988|       |
 9989|       |            // Track whether there is an output patch param
 9990|      0|            if (isOutputPatch(patchConstantFunction, p)) {
  ------------------
  |  Branch (9990:17): [True: 0, False: 0]
  ------------------
 9991|      0|                if (outPatchParam >= 0) {
  ------------------
  |  Branch (9991:21): [True: 0, False: 0]
  ------------------
 9992|       |                    // Presently we only support one per ctrl pt input.
 9993|      0|                    error(loc, "unimplemented: multiple output patches in patch constant function", "", "");
 9994|      0|                    return;
 9995|      0|                }
 9996|      0|                outPatchParam = p;
 9997|      0|            }
 9998|       |
 9999|      0|            if (biType != EbvNone) {
  ------------------
  |  Branch (9999:17): [True: 0, False: 0]
  ------------------
10000|      0|                TType* paramType = patchConstantFunction[p].type->clone();
10001|       |
10002|      0|                if (storage == EvqConstReadOnly) // treated identically to input
  ------------------
  |  Branch (10002:21): [True: 0, False: 0]
  ------------------
10003|      0|                    storage = EvqIn;
10004|       |
10005|       |                // Presently, the only non-built-in we support is InputPatch, which is treated as
10006|       |                // a pseudo-built-in.
10007|      0|                if (biType == EbvInputPatch) {
  ------------------
  |  Branch (10007:21): [True: 0, False: 0]
  ------------------
10008|      0|                    builtInTessLinkageSymbols[biType] = inputPatch;
10009|      0|                } else if (biType == EbvOutputPatch) {
  ------------------
  |  Branch (10009:28): [True: 0, False: 0]
  ------------------
10010|       |                    // Nothing...
10011|      0|                } else {
10012|       |                    // Use the original declaration type for the linkage
10013|      0|                    paramType->getQualifier().builtIn = biType;
10014|      0|                    if (biType == EbvTessLevelInner || biType == EbvTessLevelOuter)
  ------------------
  |  Branch (10014:25): [True: 0, False: 0]
  |  Branch (10014:56): [True: 0, False: 0]
  ------------------
10015|      0|                        paramType->getQualifier().patch = true;
10016|       |
10017|      0|                    if (notInEntryPoint.count(tInterstageIoData(biType, storage)) == 1)
  ------------------
  |  Branch (10017:25): [True: 0, False: 0]
  ------------------
10018|      0|                        addToLinkage(*paramType, patchConstantFunction[p].name, nullptr);
10019|      0|                }
10020|      0|            }
10021|      0|        }
10022|       |
10023|       |        // If we didn't find it because the shader made one, add our own.
10024|      0|        if (invocationIdSym == nullptr) {
  ------------------
  |  Branch (10024:13): [True: 0, False: 0]
  ------------------
10025|      0|            TType invocationIdType(EbtUint, EvqIn, 1);
10026|      0|            TString* invocationIdName = NewPoolTString("InvocationId");
10027|      0|            invocationIdType.getQualifier().builtIn = EbvInvocationId;
10028|      0|            addToLinkage(invocationIdType, invocationIdName, &invocationIdSym);
10029|      0|        }
10030|       |
10031|      0|        assert(invocationIdSym);
10032|      0|    }
10033|       |
10034|      0|    TIntermTyped* pcfArguments = nullptr;
10035|      0|    TVariable* perCtrlPtVar = nullptr;
10036|       |
10037|       |    // ================ Step 1B: Argument synthesis ================
10038|       |    // Create pcfArguments for synthesis of patchconstantfunction invocation
10039|      0|    {
10040|      0|        for (int p=0; p<pcfParamCount; ++p) {
  ------------------
  |  Branch (10040:23): [True: 0, False: 0]
  ------------------
10041|      0|            TIntermTyped* inputArg = nullptr;
10042|       |
10043|      0|            if (p == outPatchParam) {
  ------------------
  |  Branch (10043:17): [True: 0, False: 0]
  ------------------
10044|      0|                if (perCtrlPtVar == nullptr) {
  ------------------
  |  Branch (10044:21): [True: 0, False: 0]
  ------------------
10045|      0|                    perCtrlPtVar = makeInternalVariable(*patchConstantFunction[outPatchParam].name,
10046|      0|                                                        *patchConstantFunction[outPatchParam].type);
10047|       |
10048|      0|                    perCtrlPtVar->getWritableType().getQualifier().makeTemporary();
10049|      0|                }
10050|      0|                inputArg = intermediate.addSymbol(*perCtrlPtVar, loc);
10051|      0|            } else {
10052|       |                // find which built-in it is
10053|      0|                const TBuiltInVariable biType = patchConstantFunction[p].getDeclaredBuiltIn();
10054|       |
10055|      0|                if (biType == EbvInputPatch && inputPatch == nullptr) {
  ------------------
  |  Branch (10055:21): [True: 0, False: 0]
  |  Branch (10055:48): [True: 0, False: 0]
  ------------------
10056|      0|                    error(loc, "unimplemented: PCF input patch without entry point input patch parameter", "", "");
10057|      0|                    return;
10058|      0|                }
10059|       |
10060|      0|                inputArg = findTessLinkageSymbol(biType);
10061|       |
10062|      0|                if (inputArg == nullptr) {
  ------------------
  |  Branch (10062:21): [True: 0, False: 0]
  ------------------
10063|      0|                    error(loc, "unable to find patch constant function built-in variable", "", "");
10064|      0|                    return;
10065|      0|                }
10066|      0|            }
10067|       |
10068|      0|            if (pcfParamCount == 1)
  ------------------
  |  Branch (10068:17): [True: 0, False: 0]
  ------------------
10069|      0|                pcfArguments = inputArg;
10070|      0|            else
10071|      0|                pcfArguments = intermediate.growAggregate(pcfArguments, inputArg);
10072|      0|        }
10073|      0|    }
10074|       |
10075|       |    // ================ Step 2: Synthesize call to PCF ================
10076|      0|    TIntermAggregate* pcfCallSequence = nullptr;
10077|      0|    TIntermTyped* pcfCall = nullptr;
10078|       |
10079|      0|    {
10080|       |        // Create a function call to the patchconstantfunction
10081|      0|        if (pcfArguments)
  ------------------
  |  Branch (10081:13): [True: 0, False: 0]
  ------------------
10082|      0|            addInputArgumentConversions(patchConstantFunction, pcfArguments);
10083|       |
10084|       |        // Synthetic call.
10085|      0|        pcfCall = intermediate.setAggregateOperator(pcfArguments, EOpFunctionCall, patchConstantFunction.getType(), loc);
10086|      0|        pcfCall->getAsAggregate()->setUserDefined();
10087|      0|        pcfCall->getAsAggregate()->setName(patchConstantFunction.getMangledName());
10088|      0|        intermediate.addToCallGraph(infoSink, intermediate.getEntryPointMangledName().c_str(),
10089|      0|                                    patchConstantFunction.getMangledName());
10090|       |
10091|      0|        if (pcfCall->getAsAggregate()) {
  ------------------
  |  Branch (10091:13): [True: 0, False: 0]
  ------------------
10092|      0|            TQualifierList& qualifierList = pcfCall->getAsAggregate()->getQualifierList();
10093|      0|            for (int i = 0; i < patchConstantFunction.getParamCount(); ++i) {
  ------------------
  |  Branch (10093:29): [True: 0, False: 0]
  ------------------
10094|      0|                TStorageQualifier qual = patchConstantFunction[i].type->getQualifier().storage;
10095|      0|                qualifierList.push_back(qual);
10096|      0|            }
10097|      0|            pcfCall = addOutputArgumentConversions(patchConstantFunction, *pcfCall->getAsOperator());
10098|      0|        }
10099|      0|    }
10100|       |
10101|       |    // ================ Step 2B: Per Control Point synthesis ================
10102|       |    // If there is per control point data, we must either emulate that with multiple
10103|       |    // invocations of the entry point to build up an array, or (TODO:) use a yet
10104|       |    // unavailable extension to look across the SIMD lanes.  This is the former
10105|       |    // as a placeholder for the latter.
10106|      0|    if (outPatchParam >= 0) {
  ------------------
  |  Branch (10106:9): [True: 0, False: 0]
  ------------------
10107|       |        // We must introduce a local temp variable of the type wanted by the PCF input.
10108|      0|        const int arraySize = patchConstantFunction[outPatchParam].type->getOuterArraySize();
10109|       |
10110|      0|        if (entryPointFunction->getType().getBasicType() == EbtVoid) {
  ------------------
  |  Branch (10110:13): [True: 0, False: 0]
  ------------------
10111|      0|            error(loc, "entry point must return a value for use with patch constant function", "", "");
10112|      0|            return;
10113|      0|        }
10114|       |
10115|       |        // Create calls to wrapped main to fill in the array.  We will substitute fixed values
10116|       |        // of invocation ID when calling the wrapped main.
10117|       |
10118|       |        // This is the type of the each member of the per ctrl point array.
10119|      0|        const TType derefType(perCtrlPtVar->getType(), 0);
10120|       |
10121|      0|        for (int cpt = 0; cpt < arraySize; ++cpt) {
  ------------------
  |  Branch (10121:27): [True: 0, False: 0]
  ------------------
10122|       |            // TODO: improve.  substr(1) here is to avoid the '@' that was grafted on but isn't in the symtab
10123|       |            // for this function.
10124|      0|            const TString origName = entryPointFunction->getName().substr(1);
10125|      0|            TFunction callee(&origName, TType(EbtVoid));
10126|      0|            TIntermTyped* callingArgs = nullptr;
10127|       |
10128|      0|            for (int i = 0; i < entryPointFunction->getParamCount(); i++) {
  ------------------
  |  Branch (10128:29): [True: 0, False: 0]
  ------------------
10129|      0|                TParameter& param = (*entryPointFunction)[i];
10130|      0|                TType& paramType = *param.type;
10131|       |
10132|      0|                if (paramType.getQualifier().isParamOutput()) {
  ------------------
  |  Branch (10132:21): [True: 0, False: 0]
  ------------------
10133|      0|                    error(loc, "unimplemented: entry point outputs in patch constant function invocation", "", "");
10134|      0|                    return;
10135|      0|                }
10136|       |
10137|      0|                if (paramType.getQualifier().isParamInput())  {
  ------------------
  |  Branch (10137:21): [True: 0, False: 0]
  ------------------
10138|      0|                    TIntermTyped* arg = nullptr;
10139|      0|                    if ((*entryPointFunction)[i].getDeclaredBuiltIn() == EbvInvocationId) {
  ------------------
  |  Branch (10139:25): [True: 0, False: 0]
  ------------------
10140|       |                        // substitute invocation ID with the array element ID
10141|      0|                        arg = intermediate.addConstantUnion(cpt, loc);
10142|      0|                    } else {
10143|      0|                        TVariable* argVar = makeInternalVariable(*param.name, *param.type);
10144|      0|                        argVar->getWritableType().getQualifier().makeTemporary();
10145|      0|                        arg = intermediate.addSymbol(*argVar);
10146|      0|                    }
10147|       |
10148|      0|                    handleFunctionArgument(&callee, callingArgs, arg);
10149|      0|                }
10150|      0|            }
10151|       |
10152|       |            // Call and assign to per ctrl point variable
10153|      0|            currentCaller = intermediate.getEntryPointMangledName().c_str();
10154|      0|            TIntermTyped* callReturn = handleFunctionCall(loc, &callee, callingArgs);
10155|      0|            TIntermTyped* index = intermediate.addConstantUnion(cpt, loc);
10156|      0|            TIntermSymbol* perCtrlPtSym = intermediate.addSymbol(*perCtrlPtVar, loc);
10157|      0|            TIntermTyped* element = intermediate.addIndex(EOpIndexDirect, perCtrlPtSym, index, loc);
10158|      0|            element->setType(derefType);
10159|      0|            element->setLoc(loc);
10160|       |
10161|      0|            pcfCallSequence = intermediate.growAggregate(pcfCallSequence,
10162|      0|                                                         handleAssign(loc, EOpAssign, element, callReturn));
10163|      0|        }
10164|      0|    }
10165|       |
10166|       |    // ================ Step 3: Create return Sequence ================
10167|       |    // Return sequence: copy PCF result to a temporary, then to shader output variable.
10168|      0|    if (pcfCall->getBasicType() != EbtVoid) {
  ------------------
  |  Branch (10168:9): [True: 0, False: 0]
  ------------------
10169|      0|        const TType* retType = &patchConstantFunction.getType();  // return type from the PCF
10170|      0|        TType outType; // output type that goes with the return type.
10171|      0|        outType.shallowCopy(*retType);
10172|       |
10173|       |        // substitute the output type
10174|      0|        const auto newLists = ioTypeMap.find(retType->getStruct());
10175|      0|        if (newLists != ioTypeMap.end())
  ------------------
  |  Branch (10175:13): [True: 0, False: 0]
  ------------------
10176|      0|            outType.setStruct(newLists->second.output);
10177|       |
10178|       |        // Substitute the top level type's built-in type
10179|      0|        if (patchConstantFunction.getDeclaredBuiltInType() != EbvNone)
  ------------------
  |  Branch (10179:13): [True: 0, False: 0]
  ------------------
10180|      0|            outType.getQualifier().builtIn = patchConstantFunction.getDeclaredBuiltInType();
10181|       |
10182|      0|        outType.getQualifier().patch = true; // make it a per-patch variable
10183|       |
10184|      0|        TVariable* pcfOutput = makeInternalVariable("@patchConstantOutput", outType);
10185|      0|        pcfOutput->getWritableType().getQualifier().storage = EvqVaryingOut;
10186|       |
10187|      0|        if (pcfOutput->getType().isStruct())
  ------------------
  |  Branch (10187:13): [True: 0, False: 0]
  ------------------
10188|      0|            flatten(*pcfOutput, false);
10189|       |
10190|      0|        assignToInterface(*pcfOutput);
10191|       |
10192|      0|        TIntermSymbol* pcfOutputSym = intermediate.addSymbol(*pcfOutput, loc);
10193|       |
10194|       |        // The call to the PCF is a complex R-value: we want to store it in a temp to avoid
10195|       |        // repeated calls to the PCF:
10196|      0|        TVariable* pcfCallResult = makeInternalVariable("@patchConstantResult", *retType);
10197|      0|        pcfCallResult->getWritableType().getQualifier().makeTemporary();
10198|       |
10199|      0|        TIntermSymbol* pcfResultVar = intermediate.addSymbol(*pcfCallResult, loc);
10200|      0|        TIntermNode* pcfResultAssign = handleAssign(loc, EOpAssign, pcfResultVar, pcfCall);
10201|      0|        TIntermNode* pcfResultToOut = handleAssign(loc, EOpAssign, pcfOutputSym,
10202|      0|                                                   intermediate.addSymbol(*pcfCallResult, loc));
10203|       |
10204|      0|        pcfCallSequence = intermediate.growAggregate(pcfCallSequence, pcfResultAssign);
10205|      0|        pcfCallSequence = intermediate.growAggregate(pcfCallSequence, pcfResultToOut);
10206|      0|    } else {
10207|      0|        pcfCallSequence = intermediate.growAggregate(pcfCallSequence, pcfCall);
10208|      0|    }
10209|       |
10210|       |    // ================ Step 4: Barrier ================
10211|      0|    TIntermTyped* barrier = new TIntermAggregate(EOpBarrier);
10212|      0|    barrier->setLoc(loc);
10213|      0|    barrier->setType(TType(EbtVoid));
10214|      0|    epBodySeq.insert(epBodySeq.end(), barrier);
10215|       |
10216|       |    // ================ Step 5: Test on invocation ID ================
10217|      0|    TIntermTyped* zero = intermediate.addConstantUnion(0, loc, true);
10218|      0|    TIntermTyped* cmp =  intermediate.addBinaryNode(EOpEqual, invocationIdSym, zero, loc, TType(EbtBool));
10219|       |
10220|       |
10221|       |    // ================ Step 5B: Create if statement on Invocation ID == 0 ================
10222|      0|    intermediate.setAggregateOperator(pcfCallSequence, EOpSequence, TType(EbtVoid), loc);
10223|      0|    TIntermTyped* invocationIdTest = new TIntermSelection(cmp, pcfCallSequence, nullptr);
10224|      0|    invocationIdTest->setLoc(loc);
10225|       |
10226|       |    // add our test sequence before the return.
10227|      0|    epBodySeq.insert(epBodySeq.end(), invocationIdTest);
10228|      0|}
_ZN7glslang16HlslParseContext32removeUnusedStructBufferCountersEv:
10234|     57|{
10235|     57|    const auto endIt = std::remove_if(linkageSymbols.begin(), linkageSymbols.end(),
10236|     57|                                      [this](const TSymbol* sym) {
10237|     57|                                          const auto sbcIt = structBufferCounter.find(sym->getName());
10238|     57|                                          return sbcIt != structBufferCounter.end() && !sbcIt->second;
10239|     57|                                      });
10240|       |
10241|     57|    linkageSymbols.erase(endIt, linkageSymbols.end());
10242|     57|}
_ZN7glslang16HlslParseContext21fixTextureShadowModesEv:
10246|     57|{
10247|     57|    for (auto symbol = linkageSymbols.begin(); symbol != linkageSymbols.end(); ++symbol) {
  ------------------
  |  Branch (10247:48): [True: 0, False: 57]
  ------------------
10248|      0|        TSampler& sampler = (*symbol)->getWritableType().getSampler();
10249|       |
10250|      0|        if (sampler.isTexture()) {
  ------------------
  |  Branch (10250:13): [True: 0, False: 0]
  ------------------
10251|      0|            const auto shadowMode = textureShadowVariant.find((*symbol)->getUniqueId());
10252|      0|            if (shadowMode != textureShadowVariant.end()) {
  ------------------
  |  Branch (10252:17): [True: 0, False: 0]
  ------------------
10253|       |
10254|      0|                if (shadowMode->second->overloaded())
  ------------------
  |  Branch (10254:21): [True: 0, False: 0]
  ------------------
10255|       |                    // Texture needs legalization if it's been seen with both shadow and non-shadow modes.
10256|      0|                    intermediate.setNeedsLegalization();
10257|       |
10258|      0|                sampler.shadow = shadowMode->second->isShadowId((*symbol)->getUniqueId());
10259|      0|            }
10260|      0|        }
10261|      0|    }
10262|     57|}
_ZN7glslang16HlslParseContext21finalizeAppendMethodsEv:
10267|     57|{
10268|     57|    TSourceLoc loc;
10269|     57|    loc.init();
10270|       |
10271|       |    // Nothing to do: bypass test for valid stream output.
10272|     57|    if (gsAppends.empty())
  ------------------
  |  Branch (10272:9): [True: 57, False: 0]
  ------------------
10273|     57|        return;
10274|       |
10275|      0|    if (gsStreamOutput == nullptr) {
  ------------------
  |  Branch (10275:9): [True: 0, False: 0]
  ------------------
10276|      0|        error(loc, "unable to find output symbol for Append()", "", "");
10277|      0|        return;
10278|      0|    }
10279|       |
10280|       |    // Patch append sequences, now that we know the stream output symbol.
10281|      0|    for (auto append = gsAppends.begin(); append != gsAppends.end(); ++append) {
  ------------------
  |  Branch (10281:43): [True: 0, False: 0]
  ------------------
10282|      0|        append->node->getSequence()[0] =
10283|      0|            handleAssign(append->loc, EOpAssign,
10284|      0|                         intermediate.addSymbol(*gsStreamOutput, append->loc),
10285|      0|                         append->node->getSequence()[0]->getAsTyped());
10286|      0|    }
10287|      0|}
_ZN7glslang16HlslParseContext6finishEv:
10291|     57|{
10292|       |    // Error check: There was a dangling .mips operator.  These are not nested constructs in the grammar, so
10293|       |    // cannot be detected there.  This is not strictly needed in a non-validating parser; it's just helpful.
10294|     57|    if (! mipsOperatorMipArg.empty()) {
  ------------------
  |  Branch (10294:9): [True: 0, False: 57]
  ------------------
10295|      0|        error(mipsOperatorMipArg.back().loc, "unterminated mips operator:", "", "");
10296|      0|    }
10297|       |
10298|     57|    removeUnusedStructBufferCounters();
10299|     57|    addPatchConstantInvocation();
10300|     57|    fixTextureShadowModes();
10301|     57|    finalizeAppendMethods();
10302|       |
10303|       |    // Communicate out (esp. for command line) that we formed AST that will make
10304|       |    // illegal AST SPIR-V and it needs transforms to legalize it.
10305|     57|    if (intermediate.needsLegalization() && (messages & EShMsgHlslLegalization))
  ------------------
  |  Branch (10305:9): [True: 0, False: 57]
  |  Branch (10305:45): [True: 0, False: 0]
  ------------------
10306|      0|        infoSink.info << "WARNING: AST will form illegal SPIR-V; need to transform to legalize";
10307|       |
10308|     57|    TParseContextBase::finish();
10309|     57|}
hlslParseHelper.cpp:_ZZN7glslang16HlslParseContext19getLayoutFromTxTypeERKNS_10TSourceLocERKNS_5TTypeEENK3$_0clENS_13TLayoutFormatES8_S8_:
  196|  2.79k|    const auto selectFormat = [this,&components](TLayoutFormat v1, TLayoutFormat v2, TLayoutFormat v4) -> TLayoutFormat {
  197|  2.79k|        if (intermediate.getNoStorageFormat())
  ------------------
  |  Branch (197:13): [True: 0, False: 2.79k]
  ------------------
  198|      0|            return ElfNone;
  199|       |
  200|  2.79k|        return components == 1 ? v1 :
  ------------------
  |  Branch (200:16): [True: 1.47k, False: 1.32k]
  ------------------
  201|  2.79k|               components == 2 ? v2 : v4;
  ------------------
  |  Branch (201:16): [True: 882, False: 441]
  ------------------
  202|  2.79k|    };

_ZN7glslang16HlslParseContext20reservedPpErrorCheckERKNS_10TSourceLocEPKcS5_:
   67|      1|    void reservedPpErrorCheck(const TSourceLoc&, const char* /*name*/, const char* /*op*/) override { }
_ZN7glslang16HlslParseContext21beginParameterParsingERNS_9TFunctionE:
  189|   196k|    {
  190|   196k|        parsingEntrypointParameters = isEntrypointName(function.getName());
  191|   196k|    }
_ZN7glslang16HlslParseContext16isEntrypointNameERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  252|   196k|    bool isEntrypointName(const TString& name) { return name.compare(intermediate.getEntryPointName().c_str()) == 0; }

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

_ZN7glslang15HlslScanContext8tokenizeERNS_9HlslTokenE:
  517|  1.83M|{
  518|  1.83M|    EHlslTokenClass tokenClass = tokenizeClass(token);
  519|  1.83M|    token.tokenClass = tokenClass;
  520|  1.83M|}
_ZN7glslang15HlslScanContext13tokenizeClassERNS_9HlslTokenE:
  537|  1.83M|{
  538|  3.18M|    do {
  539|  3.18M|        parserToken = &token;
  540|  3.18M|        TPpToken ppToken;
  541|  3.18M|        int token = ppContext.tokenize(ppToken);
  542|  3.18M|        if (token == EndOfInput)
  ------------------
  |  Branch (542:13): [True: 57, False: 3.17M]
  ------------------
  543|     57|            return EHTokNone;
  544|       |
  545|  3.17M|        tokenText = ppToken.name;
  546|  3.17M|        loc = ppToken.loc;
  547|  3.17M|        parserToken->loc = loc;
  548|  3.17M|        switch (token) {
  549|   196k|        case ';':                       return EHTokSemicolon;
  ------------------
  |  Branch (549:9): [True: 196k, False: 2.98M]
  ------------------
  550|   246k|        case ',':                       return EHTokComma;
  ------------------
  |  Branch (550:9): [True: 246k, False: 2.93M]
  ------------------
  551|      0|        case ':':                       return EHTokColon;
  ------------------
  |  Branch (551:9): [True: 0, False: 3.17M]
  ------------------
  552|      2|        case '=':                       return EHTokAssign;
  ------------------
  |  Branch (552:9): [True: 2, False: 3.17M]
  ------------------
  553|   196k|        case '(':                       return EHTokLeftParen;
  ------------------
  |  Branch (553:9): [True: 196k, False: 2.98M]
  ------------------
  554|   196k|        case ')':                       return EHTokRightParen;
  ------------------
  |  Branch (554:9): [True: 196k, False: 2.98M]
  ------------------
  555|      6|        case '.':                       return EHTokDot;
  ------------------
  |  Branch (555:9): [True: 6, False: 3.17M]
  ------------------
  556|      0|        case '!':                       return EHTokBang;
  ------------------
  |  Branch (556:9): [True: 0, False: 3.17M]
  ------------------
  557|      0|        case '-':                       return EHTokDash;
  ------------------
  |  Branch (557:9): [True: 0, False: 3.17M]
  ------------------
  558|      2|        case '~':                       return EHTokTilde;
  ------------------
  |  Branch (558:9): [True: 2, False: 3.17M]
  ------------------
  559|      0|        case '+':                       return EHTokPlus;
  ------------------
  |  Branch (559:9): [True: 0, False: 3.17M]
  ------------------
  560|      0|        case '*':                       return EHTokStar;
  ------------------
  |  Branch (560:9): [True: 0, False: 3.17M]
  ------------------
  561|      0|        case '/':                       return EHTokSlash;
  ------------------
  |  Branch (561:9): [True: 0, False: 3.17M]
  ------------------
  562|      0|        case '%':                       return EHTokPercent;
  ------------------
  |  Branch (562:9): [True: 0, False: 3.17M]
  ------------------
  563|  39.8k|        case '<':                       return EHTokLeftAngle;
  ------------------
  |  Branch (563:9): [True: 39.8k, False: 3.14M]
  ------------------
  564|  39.8k|        case '>':                       return EHTokRightAngle;
  ------------------
  |  Branch (564:9): [True: 39.8k, False: 3.14M]
  ------------------
  565|      0|        case '|':                       return EHTokVerticalBar;
  ------------------
  |  Branch (565:9): [True: 0, False: 3.17M]
  ------------------
  566|      0|        case '^':                       return EHTokCaret;
  ------------------
  |  Branch (566:9): [True: 0, False: 3.17M]
  ------------------
  567|      0|        case '&':                       return EHTokAmpersand;
  ------------------
  |  Branch (567:9): [True: 0, False: 3.17M]
  ------------------
  568|      0|        case '?':                       return EHTokQuestion;
  ------------------
  |  Branch (568:9): [True: 0, False: 3.17M]
  ------------------
  569|      0|        case '[':                       return EHTokLeftBracket;
  ------------------
  |  Branch (569:9): [True: 0, False: 3.17M]
  ------------------
  570|      0|        case ']':                       return EHTokRightBracket;
  ------------------
  |  Branch (570:9): [True: 0, False: 3.17M]
  ------------------
  571|      0|        case '{':                       return EHTokLeftBrace;
  ------------------
  |  Branch (571:9): [True: 0, False: 3.17M]
  ------------------
  572|      0|        case '}':                       return EHTokRightBrace;
  ------------------
  |  Branch (572:9): [True: 0, False: 3.17M]
  ------------------
  573|      0|        case '\\':
  ------------------
  |  Branch (573:9): [True: 0, False: 3.17M]
  ------------------
  574|      0|            parseContext.error(loc, "illegal use of escape character", "\\", "");
  575|      0|            break;
  576|       |
  577|      0|        case PPAtomAddAssign:          return EHTokAddAssign;
  ------------------
  |  Branch (577:9): [True: 0, False: 3.17M]
  ------------------
  578|      0|        case PPAtomSubAssign:          return EHTokSubAssign;
  ------------------
  |  Branch (578:9): [True: 0, False: 3.17M]
  ------------------
  579|      0|        case PPAtomMulAssign:          return EHTokMulAssign;
  ------------------
  |  Branch (579:9): [True: 0, False: 3.17M]
  ------------------
  580|      0|        case PPAtomDivAssign:          return EHTokDivAssign;
  ------------------
  |  Branch (580:9): [True: 0, False: 3.17M]
  ------------------
  581|      0|        case PPAtomModAssign:          return EHTokModAssign;
  ------------------
  |  Branch (581:9): [True: 0, False: 3.17M]
  ------------------
  582|       |
  583|      0|        case PpAtomRight:              return EHTokRightOp;
  ------------------
  |  Branch (583:9): [True: 0, False: 3.17M]
  ------------------
  584|      0|        case PpAtomLeft:               return EHTokLeftOp;
  ------------------
  |  Branch (584:9): [True: 0, False: 3.17M]
  ------------------
  585|       |
  586|      0|        case PpAtomRightAssign:        return EHTokRightAssign;
  ------------------
  |  Branch (586:9): [True: 0, False: 3.17M]
  ------------------
  587|      0|        case PpAtomLeftAssign:         return EHTokLeftAssign;
  ------------------
  |  Branch (587:9): [True: 0, False: 3.17M]
  ------------------
  588|      0|        case PpAtomAndAssign:          return EHTokAndAssign;
  ------------------
  |  Branch (588:9): [True: 0, False: 3.17M]
  ------------------
  589|      0|        case PpAtomOrAssign:           return EHTokOrAssign;
  ------------------
  |  Branch (589:9): [True: 0, False: 3.17M]
  ------------------
  590|      0|        case PpAtomXorAssign:          return EHTokXorAssign;
  ------------------
  |  Branch (590:9): [True: 0, False: 3.17M]
  ------------------
  591|       |
  592|      0|        case PpAtomAnd:                return EHTokAndOp;
  ------------------
  |  Branch (592:9): [True: 0, False: 3.17M]
  ------------------
  593|      0|        case PpAtomOr:                 return EHTokOrOp;
  ------------------
  |  Branch (593:9): [True: 0, False: 3.17M]
  ------------------
  594|      0|        case PpAtomXor:                return EHTokXorOp;
  ------------------
  |  Branch (594:9): [True: 0, False: 3.17M]
  ------------------
  595|       |
  596|      0|        case PpAtomEQ:                 return EHTokEqOp;
  ------------------
  |  Branch (596:9): [True: 0, False: 3.17M]
  ------------------
  597|      0|        case PpAtomGE:                 return EHTokGeOp;
  ------------------
  |  Branch (597:9): [True: 0, False: 3.17M]
  ------------------
  598|      0|        case PpAtomNE:                 return EHTokNeOp;
  ------------------
  |  Branch (598:9): [True: 0, False: 3.17M]
  ------------------
  599|      0|        case PpAtomLE:                 return EHTokLeOp;
  ------------------
  |  Branch (599:9): [True: 0, False: 3.17M]
  ------------------
  600|       |
  601|      0|        case PpAtomDecrement:          return EHTokDecOp;
  ------------------
  |  Branch (601:9): [True: 0, False: 3.17M]
  ------------------
  602|      0|        case PpAtomIncrement:          return EHTokIncOp;
  ------------------
  |  Branch (602:9): [True: 0, False: 3.17M]
  ------------------
  603|       |
  604|      2|        case PpAtomColonColon:         return EHTokColonColon;
  ------------------
  |  Branch (604:9): [True: 2, False: 3.17M]
  ------------------
  605|       |
  606|      0|        case PpAtomConstInt:           parserToken->i = ppToken.ival;       return EHTokIntConstant;
  ------------------
  |  Branch (606:9): [True: 0, False: 3.17M]
  ------------------
  607|      0|        case PpAtomConstUint:          parserToken->i = ppToken.ival;       return EHTokUintConstant;
  ------------------
  |  Branch (607:9): [True: 0, False: 3.17M]
  ------------------
  608|      0|        case PpAtomConstFloat16:       parserToken->d = ppToken.dval;       return EHTokFloat16Constant;
  ------------------
  |  Branch (608:9): [True: 0, False: 3.17M]
  ------------------
  609|      0|        case PpAtomConstFloat:         parserToken->d = ppToken.dval;       return EHTokFloatConstant;
  ------------------
  |  Branch (609:9): [True: 0, False: 3.17M]
  ------------------
  610|      0|        case PpAtomConstDouble:        parserToken->d = ppToken.dval;       return EHTokDoubleConstant;
  ------------------
  |  Branch (610:9): [True: 0, False: 3.17M]
  ------------------
  611|   917k|        case PpAtomIdentifier:
  ------------------
  |  Branch (611:9): [True: 917k, False: 2.26M]
  ------------------
  612|   917k|        {
  613|   917k|            EHlslTokenClass token = tokenizeIdentifier();
  614|   917k|            return token;
  615|      0|        }
  616|       |
  617|      0|        case PpAtomConstString: {
  ------------------
  |  Branch (617:9): [True: 0, False: 3.17M]
  ------------------
  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: 3.17M]
  ------------------
  623|       |
  624|  1.34M|        default:
  ------------------
  |  Branch (624:9): [True: 1.34M, False: 1.83M]
  ------------------
  625|  1.34M|            if (token < PpAtomMaxSingle) {
  ------------------
  |  Branch (625:17): [True: 56.5k, False: 1.29M]
  ------------------
  626|  56.5k|                char buf[2];
  627|  56.5k|                buf[0] = (char)token;
  628|  56.5k|                buf[1] = 0;
  629|  56.5k|                parseContext.error(loc, "unexpected token", buf, "");
  630|  1.29M|            } else if (tokenText[0] != 0)
  ------------------
  |  Branch (630:24): [True: 1.29M, False: 0]
  ------------------
  631|  1.29M|                parseContext.error(loc, "unexpected token", tokenText, "");
  632|      0|            else
  633|      0|                parseContext.error(loc, "unexpected token", "", "");
  634|  1.34M|            break;
  635|  3.17M|        }
  636|  3.17M|    } while (true);
  ------------------
  |  Branch (636:14): [True: 1.34M, Folded]
  ------------------
  637|  1.83M|}
_ZN7glslang15HlslScanContext18tokenizeIdentifierEv:
  640|   917k|{
  641|   917k|    if (ReservedSet.find(tokenText) != ReservedSet.end())
  ------------------
  |  Branch (641:9): [True: 0, False: 917k]
  ------------------
  642|      0|        return reservedWord();
  643|       |
  644|   917k|    auto it = KeywordMap.find(tokenText);
  645|   917k|    if (it == KeywordMap.end()) {
  ------------------
  |  Branch (645:9): [True: 196k, False: 721k]
  ------------------
  646|       |        // Should have an identifier of some sort
  647|   196k|        return identifierOrType();
  648|   196k|    }
  649|   721k|    keyword = it->second;
  650|       |
  651|   721k|    switch (keyword) {
  652|       |
  653|       |    // qualifiers
  654|      0|    case EHTokStatic:
  ------------------
  |  Branch (654:5): [True: 0, False: 721k]
  ------------------
  655|      0|    case EHTokConst:
  ------------------
  |  Branch (655:5): [True: 0, False: 721k]
  ------------------
  656|      0|    case EHTokSNorm:
  ------------------
  |  Branch (656:5): [True: 0, False: 721k]
  ------------------
  657|      0|    case EHTokUnorm:
  ------------------
  |  Branch (657:5): [True: 0, False: 721k]
  ------------------
  658|      0|    case EHTokExtern:
  ------------------
  |  Branch (658:5): [True: 0, False: 721k]
  ------------------
  659|      0|    case EHTokUniform:
  ------------------
  |  Branch (659:5): [True: 0, False: 721k]
  ------------------
  660|      0|    case EHTokVolatile:
  ------------------
  |  Branch (660:5): [True: 0, False: 721k]
  ------------------
  661|      0|    case EHTokShared:
  ------------------
  |  Branch (661:5): [True: 0, False: 721k]
  ------------------
  662|      0|    case EHTokGroupShared:
  ------------------
  |  Branch (662:5): [True: 0, False: 721k]
  ------------------
  663|      0|    case EHTokLinear:
  ------------------
  |  Branch (663:5): [True: 0, False: 721k]
  ------------------
  664|      0|    case EHTokCentroid:
  ------------------
  |  Branch (664:5): [True: 0, False: 721k]
  ------------------
  665|      0|    case EHTokNointerpolation:
  ------------------
  |  Branch (665:5): [True: 0, False: 721k]
  ------------------
  666|      0|    case EHTokNoperspective:
  ------------------
  |  Branch (666:5): [True: 0, False: 721k]
  ------------------
  667|      0|    case EHTokSample:
  ------------------
  |  Branch (667:5): [True: 0, False: 721k]
  ------------------
  668|      0|    case EHTokRowMajor:
  ------------------
  |  Branch (668:5): [True: 0, False: 721k]
  ------------------
  669|      0|    case EHTokColumnMajor:
  ------------------
  |  Branch (669:5): [True: 0, False: 721k]
  ------------------
  670|      0|    case EHTokPackOffset:
  ------------------
  |  Branch (670:5): [True: 0, False: 721k]
  ------------------
  671|      0|    case EHTokIn:
  ------------------
  |  Branch (671:5): [True: 0, False: 721k]
  ------------------
  672|  42.6k|    case EHTokOut:
  ------------------
  |  Branch (672:5): [True: 42.6k, False: 678k]
  ------------------
  673|  42.6k|    case EHTokInOut:
  ------------------
  |  Branch (673:5): [True: 0, False: 721k]
  ------------------
  674|  42.6k|    case EHTokPrecise:
  ------------------
  |  Branch (674:5): [True: 0, False: 721k]
  ------------------
  675|  42.6k|    case EHTokLayout:
  ------------------
  |  Branch (675:5): [True: 0, False: 721k]
  ------------------
  676|  42.6k|    case EHTokGloballyCoherent:
  ------------------
  |  Branch (676:5): [True: 0, False: 721k]
  ------------------
  677|  42.6k|    case EHTokInline:
  ------------------
  |  Branch (677:5): [True: 0, False: 721k]
  ------------------
  678|  42.6k|        return keyword;
  679|       |
  680|       |    // primitive types
  681|      0|    case EHTokPoint:
  ------------------
  |  Branch (681:5): [True: 0, False: 721k]
  ------------------
  682|      0|    case EHTokLine:
  ------------------
  |  Branch (682:5): [True: 0, False: 721k]
  ------------------
  683|      0|    case EHTokTriangle:
  ------------------
  |  Branch (683:5): [True: 0, False: 721k]
  ------------------
  684|      0|    case EHTokLineAdj:
  ------------------
  |  Branch (684:5): [True: 0, False: 721k]
  ------------------
  685|      0|    case EHTokTriangleAdj:
  ------------------
  |  Branch (685:5): [True: 0, False: 721k]
  ------------------
  686|      0|        return keyword;
  687|       |
  688|       |    // stream out types
  689|      0|    case EHTokPointStream:
  ------------------
  |  Branch (689:5): [True: 0, False: 721k]
  ------------------
  690|      0|    case EHTokLineStream:
  ------------------
  |  Branch (690:5): [True: 0, False: 721k]
  ------------------
  691|      0|    case EHTokTriangleStream:
  ------------------
  |  Branch (691:5): [True: 0, False: 721k]
  ------------------
  692|      0|        return keyword;
  693|       |
  694|       |    // Tessellation patches
  695|      0|    case EHTokInputPatch:
  ------------------
  |  Branch (695:5): [True: 0, False: 721k]
  ------------------
  696|      0|    case EHTokOutputPatch:
  ------------------
  |  Branch (696:5): [True: 0, False: 721k]
  ------------------
  697|      0|        return keyword;
  698|       |
  699|    147|    case EHTokBuffer:
  ------------------
  |  Branch (699:5): [True: 147, False: 720k]
  ------------------
  700|    147|    case EHTokVector:
  ------------------
  |  Branch (700:5): [True: 0, False: 721k]
  ------------------
  701|    147|    case EHTokMatrix:
  ------------------
  |  Branch (701:5): [True: 0, False: 721k]
  ------------------
  702|    147|        return keyword;
  703|       |
  704|       |    // scalar types
  705|  45.4k|    case EHTokVoid:
  ------------------
  |  Branch (705:5): [True: 45.4k, False: 675k]
  ------------------
  706|  45.4k|    case EHTokString:
  ------------------
  |  Branch (706:5): [True: 0, False: 721k]
  ------------------
  707|  54.9k|    case EHTokBool:
  ------------------
  |  Branch (707:5): [True: 9.45k, False: 711k]
  ------------------
  708|  67.4k|    case EHTokInt:
  ------------------
  |  Branch (708:5): [True: 12.5k, False: 708k]
  ------------------
  709|  92.2k|    case EHTokUint:
  ------------------
  |  Branch (709:5): [True: 24.7k, False: 696k]
  ------------------
  710|  92.2k|    case EHTokUint64:
  ------------------
  |  Branch (710:5): [True: 0, False: 721k]
  ------------------
  711|  92.2k|    case EHTokDword:
  ------------------
  |  Branch (711:5): [True: 0, False: 721k]
  ------------------
  712|  92.2k|    case EHTokHalf:
  ------------------
  |  Branch (712:5): [True: 0, False: 721k]
  ------------------
  713|   138k|    case EHTokFloat:
  ------------------
  |  Branch (713:5): [True: 46.3k, False: 674k]
  ------------------
  714|   140k|    case EHTokDouble:
  ------------------
  |  Branch (714:5): [True: 2.20k, False: 718k]
  ------------------
  715|   140k|    case EHTokMin16float:
  ------------------
  |  Branch (715:5): [True: 0, False: 721k]
  ------------------
  716|   140k|    case EHTokMin10float:
  ------------------
  |  Branch (716:5): [True: 0, False: 721k]
  ------------------
  717|   140k|    case EHTokMin16int:
  ------------------
  |  Branch (717:5): [True: 0, False: 721k]
  ------------------
  718|   140k|    case EHTokMin12int:
  ------------------
  |  Branch (718:5): [True: 0, False: 721k]
  ------------------
  719|   140k|    case EHTokMin16uint:
  ------------------
  |  Branch (719:5): [True: 0, False: 721k]
  ------------------
  720|       |
  721|       |    // vector types
  722|   140k|    case EHTokBool1:
  ------------------
  |  Branch (722:5): [True: 0, False: 721k]
  ------------------
  723|   141k|    case EHTokBool2:
  ------------------
  |  Branch (723:5): [True: 294, False: 720k]
  ------------------
  724|   141k|    case EHTokBool3:
  ------------------
  |  Branch (724:5): [True: 294, False: 720k]
  ------------------
  725|   141k|    case EHTokBool4:
  ------------------
  |  Branch (725:5): [True: 294, False: 720k]
  ------------------
  726|   145k|    case EHTokFloat1:
  ------------------
  |  Branch (726:5): [True: 3.82k, False: 717k]
  ------------------
  727|   176k|    case EHTokFloat2:
  ------------------
  |  Branch (727:5): [True: 31.5k, False: 689k]
  ------------------
  728|   203k|    case EHTokFloat3:
  ------------------
  |  Branch (728:5): [True: 26.9k, False: 694k]
  ------------------
  729|   231k|    case EHTokFloat4:
  ------------------
  |  Branch (729:5): [True: 28.0k, False: 693k]
  ------------------
  730|   234k|    case EHTokInt1:
  ------------------
  |  Branch (730:5): [True: 2.64k, False: 718k]
  ------------------
  731|   278k|    case EHTokInt2:
  ------------------
  |  Branch (731:5): [True: 43.8k, False: 677k]
  ------------------
  732|   287k|    case EHTokInt3:
  ------------------
  |  Branch (732:5): [True: 8.67k, False: 712k]
  ------------------
  733|   305k|    case EHTokInt4:
  ------------------
  |  Branch (733:5): [True: 17.9k, False: 703k]
  ------------------
  734|   305k|    case EHTokDouble1:
  ------------------
  |  Branch (734:5): [True: 0, False: 721k]
  ------------------
  735|   307k|    case EHTokDouble2:
  ------------------
  |  Branch (735:5): [True: 2.20k, False: 718k]
  ------------------
  736|   309k|    case EHTokDouble3:
  ------------------
  |  Branch (736:5): [True: 2.10k, False: 719k]
  ------------------
  737|   311k|    case EHTokDouble4:
  ------------------
  |  Branch (737:5): [True: 2.10k, False: 719k]
  ------------------
  738|   314k|    case EHTokUint1:
  ------------------
  |  Branch (738:5): [True: 2.54k, False: 718k]
  ------------------
  739|   327k|    case EHTokUint2:
  ------------------
  |  Branch (739:5): [True: 13.0k, False: 708k]
  ------------------
  740|   333k|    case EHTokUint3:
  ------------------
  |  Branch (740:5): [True: 6.37k, False: 714k]
  ------------------
  741|   350k|    case EHTokUint4:
  ------------------
  |  Branch (741:5): [True: 17.3k, False: 703k]
  ------------------
  742|   350k|    case EHTokHalf1:
  ------------------
  |  Branch (742:5): [True: 0, False: 721k]
  ------------------
  743|   350k|    case EHTokHalf2:
  ------------------
  |  Branch (743:5): [True: 0, False: 721k]
  ------------------
  744|   350k|    case EHTokHalf3:
  ------------------
  |  Branch (744:5): [True: 0, False: 721k]
  ------------------
  745|   350k|    case EHTokHalf4:
  ------------------
  |  Branch (745:5): [True: 0, False: 721k]
  ------------------
  746|   350k|    case EHTokMin16float1:
  ------------------
  |  Branch (746:5): [True: 0, False: 721k]
  ------------------
  747|   350k|    case EHTokMin16float2:
  ------------------
  |  Branch (747:5): [True: 0, False: 721k]
  ------------------
  748|   350k|    case EHTokMin16float3:
  ------------------
  |  Branch (748:5): [True: 0, False: 721k]
  ------------------
  749|   350k|    case EHTokMin16float4:
  ------------------
  |  Branch (749:5): [True: 0, False: 721k]
  ------------------
  750|   350k|    case EHTokMin10float1:
  ------------------
  |  Branch (750:5): [True: 0, False: 721k]
  ------------------
  751|   350k|    case EHTokMin10float2:
  ------------------
  |  Branch (751:5): [True: 0, False: 721k]
  ------------------
  752|   350k|    case EHTokMin10float3:
  ------------------
  |  Branch (752:5): [True: 0, False: 721k]
  ------------------
  753|   350k|    case EHTokMin10float4:
  ------------------
  |  Branch (753:5): [True: 0, False: 721k]
  ------------------
  754|   350k|    case EHTokMin16int1:
  ------------------
  |  Branch (754:5): [True: 0, False: 721k]
  ------------------
  755|   350k|    case EHTokMin16int2:
  ------------------
  |  Branch (755:5): [True: 0, False: 721k]
  ------------------
  756|   350k|    case EHTokMin16int3:
  ------------------
  |  Branch (756:5): [True: 0, False: 721k]
  ------------------
  757|   350k|    case EHTokMin16int4:
  ------------------
  |  Branch (757:5): [True: 0, False: 721k]
  ------------------
  758|   350k|    case EHTokMin12int1:
  ------------------
  |  Branch (758:5): [True: 0, False: 721k]
  ------------------
  759|   350k|    case EHTokMin12int2:
  ------------------
  |  Branch (759:5): [True: 0, False: 721k]
  ------------------
  760|   350k|    case EHTokMin12int3:
  ------------------
  |  Branch (760:5): [True: 0, False: 721k]
  ------------------
  761|   350k|    case EHTokMin12int4:
  ------------------
  |  Branch (761:5): [True: 0, False: 721k]
  ------------------
  762|   350k|    case EHTokMin16uint1:
  ------------------
  |  Branch (762:5): [True: 0, False: 721k]
  ------------------
  763|   350k|    case EHTokMin16uint2:
  ------------------
  |  Branch (763:5): [True: 0, False: 721k]
  ------------------
  764|   350k|    case EHTokMin16uint3:
  ------------------
  |  Branch (764:5): [True: 0, False: 721k]
  ------------------
  765|   350k|    case EHTokMin16uint4:
  ------------------
  |  Branch (765:5): [True: 0, False: 721k]
  ------------------
  766|       |
  767|       |    // matrix types
  768|   351k|    case EHTokBool1x1:
  ------------------
  |  Branch (768:5): [True: 392, False: 720k]
  ------------------
  769|   351k|    case EHTokBool1x2:
  ------------------
  |  Branch (769:5): [True: 392, False: 720k]
  ------------------
  770|   352k|    case EHTokBool1x3:
  ------------------
  |  Branch (770:5): [True: 392, False: 720k]
  ------------------
  771|   352k|    case EHTokBool1x4:
  ------------------
  |  Branch (771:5): [True: 392, False: 720k]
  ------------------
  772|   352k|    case EHTokBool2x1:
  ------------------
  |  Branch (772:5): [True: 392, False: 720k]
  ------------------
  773|   353k|    case EHTokBool2x2:
  ------------------
  |  Branch (773:5): [True: 392, False: 720k]
  ------------------
  774|   353k|    case EHTokBool2x3:
  ------------------
  |  Branch (774:5): [True: 392, False: 720k]
  ------------------
  775|   354k|    case EHTokBool2x4:
  ------------------
  |  Branch (775:5): [True: 392, False: 720k]
  ------------------
  776|   354k|    case EHTokBool3x1:
  ------------------
  |  Branch (776:5): [True: 392, False: 720k]
  ------------------
  777|   354k|    case EHTokBool3x2:
  ------------------
  |  Branch (777:5): [True: 392, False: 720k]
  ------------------
  778|   355k|    case EHTokBool3x3:
  ------------------
  |  Branch (778:5): [True: 392, False: 720k]
  ------------------
  779|   355k|    case EHTokBool3x4:
  ------------------
  |  Branch (779:5): [True: 392, False: 720k]
  ------------------
  780|   355k|    case EHTokBool4x1:
  ------------------
  |  Branch (780:5): [True: 392, False: 720k]
  ------------------
  781|   356k|    case EHTokBool4x2:
  ------------------
  |  Branch (781:5): [True: 392, False: 720k]
  ------------------
  782|   356k|    case EHTokBool4x3:
  ------------------
  |  Branch (782:5): [True: 392, False: 720k]
  ------------------
  783|   357k|    case EHTokBool4x4:
  ------------------
  |  Branch (783:5): [True: 392, False: 720k]
  ------------------
  784|   360k|    case EHTokInt1x1:
  ------------------
  |  Branch (784:5): [True: 3.72k, False: 717k]
  ------------------
  785|   364k|    case EHTokInt1x2:
  ------------------
  |  Branch (785:5): [True: 3.72k, False: 717k]
  ------------------
  786|   368k|    case EHTokInt1x3:
  ------------------
  |  Branch (786:5): [True: 3.72k, False: 717k]
  ------------------
  787|   372k|    case EHTokInt1x4:
  ------------------
  |  Branch (787:5): [True: 3.72k, False: 717k]
  ------------------
  788|   375k|    case EHTokInt2x1:
  ------------------
  |  Branch (788:5): [True: 3.72k, False: 717k]
  ------------------
  789|   379k|    case EHTokInt2x2:
  ------------------
  |  Branch (789:5): [True: 3.72k, False: 717k]
  ------------------
  790|   383k|    case EHTokInt2x3:
  ------------------
  |  Branch (790:5): [True: 3.72k, False: 717k]
  ------------------
  791|   386k|    case EHTokInt2x4:
  ------------------
  |  Branch (791:5): [True: 3.72k, False: 717k]
  ------------------
  792|   390k|    case EHTokInt3x1:
  ------------------
  |  Branch (792:5): [True: 3.72k, False: 717k]
  ------------------
  793|   394k|    case EHTokInt3x2:
  ------------------
  |  Branch (793:5): [True: 3.72k, False: 717k]
  ------------------
  794|   398k|    case EHTokInt3x3:
  ------------------
  |  Branch (794:5): [True: 3.72k, False: 717k]
  ------------------
  795|   401k|    case EHTokInt3x4:
  ------------------
  |  Branch (795:5): [True: 3.72k, False: 717k]
  ------------------
  796|   405k|    case EHTokInt4x1:
  ------------------
  |  Branch (796:5): [True: 3.72k, False: 717k]
  ------------------
  797|   409k|    case EHTokInt4x2:
  ------------------
  |  Branch (797:5): [True: 3.72k, False: 717k]
  ------------------
  798|   413k|    case EHTokInt4x3:
  ------------------
  |  Branch (798:5): [True: 3.72k, False: 717k]
  ------------------
  799|   416k|    case EHTokInt4x4:
  ------------------
  |  Branch (799:5): [True: 3.72k, False: 717k]
  ------------------
  800|   420k|    case EHTokUint1x1:
  ------------------
  |  Branch (800:5): [True: 3.43k, False: 717k]
  ------------------
  801|   423k|    case EHTokUint1x2:
  ------------------
  |  Branch (801:5): [True: 3.43k, False: 717k]
  ------------------
  802|   427k|    case EHTokUint1x3:
  ------------------
  |  Branch (802:5): [True: 3.43k, False: 717k]
  ------------------
  803|   430k|    case EHTokUint1x4:
  ------------------
  |  Branch (803:5): [True: 3.43k, False: 717k]
  ------------------
  804|   433k|    case EHTokUint2x1:
  ------------------
  |  Branch (804:5): [True: 3.43k, False: 717k]
  ------------------
  805|   437k|    case EHTokUint2x2:
  ------------------
  |  Branch (805:5): [True: 3.43k, False: 717k]
  ------------------
  806|   440k|    case EHTokUint2x3:
  ------------------
  |  Branch (806:5): [True: 3.43k, False: 717k]
  ------------------
  807|   444k|    case EHTokUint2x4:
  ------------------
  |  Branch (807:5): [True: 3.43k, False: 717k]
  ------------------
  808|   447k|    case EHTokUint3x1:
  ------------------
  |  Branch (808:5): [True: 3.43k, False: 717k]
  ------------------
  809|   451k|    case EHTokUint3x2:
  ------------------
  |  Branch (809:5): [True: 3.43k, False: 717k]
  ------------------
  810|   454k|    case EHTokUint3x3:
  ------------------
  |  Branch (810:5): [True: 3.43k, False: 717k]
  ------------------
  811|   457k|    case EHTokUint3x4:
  ------------------
  |  Branch (811:5): [True: 3.43k, False: 717k]
  ------------------
  812|   461k|    case EHTokUint4x1:
  ------------------
  |  Branch (812:5): [True: 3.43k, False: 717k]
  ------------------
  813|   464k|    case EHTokUint4x2:
  ------------------
  |  Branch (813:5): [True: 3.43k, False: 717k]
  ------------------
  814|   468k|    case EHTokUint4x3:
  ------------------
  |  Branch (814:5): [True: 3.43k, False: 717k]
  ------------------
  815|   471k|    case EHTokUint4x4:
  ------------------
  |  Branch (815:5): [True: 3.43k, False: 717k]
  ------------------
  816|   479k|    case EHTokFloat1x1:
  ------------------
  |  Branch (816:5): [True: 7.93k, False: 713k]
  ------------------
  817|   487k|    case EHTokFloat1x2:
  ------------------
  |  Branch (817:5): [True: 7.93k, False: 713k]
  ------------------
  818|   495k|    case EHTokFloat1x3:
  ------------------
  |  Branch (818:5): [True: 7.93k, False: 713k]
  ------------------
  819|   503k|    case EHTokFloat1x4:
  ------------------
  |  Branch (819:5): [True: 7.93k, False: 713k]
  ------------------
  820|   511k|    case EHTokFloat2x1:
  ------------------
  |  Branch (820:5): [True: 7.93k, False: 713k]
  ------------------
  821|   519k|    case EHTokFloat2x2:
  ------------------
  |  Branch (821:5): [True: 7.93k, False: 713k]
  ------------------
  822|   527k|    case EHTokFloat2x3:
  ------------------
  |  Branch (822:5): [True: 7.93k, False: 713k]
  ------------------
  823|   535k|    case EHTokFloat2x4:
  ------------------
  |  Branch (823:5): [True: 7.93k, False: 713k]
  ------------------
  824|   543k|    case EHTokFloat3x1:
  ------------------
  |  Branch (824:5): [True: 7.93k, False: 713k]
  ------------------
  825|   551k|    case EHTokFloat3x2:
  ------------------
  |  Branch (825:5): [True: 7.93k, False: 713k]
  ------------------
  826|   558k|    case EHTokFloat3x3:
  ------------------
  |  Branch (826:5): [True: 7.93k, False: 713k]
  ------------------
  827|   566k|    case EHTokFloat3x4:
  ------------------
  |  Branch (827:5): [True: 7.93k, False: 713k]
  ------------------
  828|   574k|    case EHTokFloat4x1:
  ------------------
  |  Branch (828:5): [True: 7.93k, False: 713k]
  ------------------
  829|   582k|    case EHTokFloat4x2:
  ------------------
  |  Branch (829:5): [True: 7.93k, False: 713k]
  ------------------
  830|   590k|    case EHTokFloat4x3:
  ------------------
  |  Branch (830:5): [True: 7.93k, False: 713k]
  ------------------
  831|   598k|    case EHTokFloat4x4:
  ------------------
  |  Branch (831:5): [True: 7.93k, False: 713k]
  ------------------
  832|   598k|    case EHTokHalf1x1:
  ------------------
  |  Branch (832:5): [True: 0, False: 721k]
  ------------------
  833|   598k|    case EHTokHalf1x2:
  ------------------
  |  Branch (833:5): [True: 0, False: 721k]
  ------------------
  834|   598k|    case EHTokHalf1x3:
  ------------------
  |  Branch (834:5): [True: 0, False: 721k]
  ------------------
  835|   598k|    case EHTokHalf1x4:
  ------------------
  |  Branch (835:5): [True: 0, False: 721k]
  ------------------
  836|   598k|    case EHTokHalf2x1:
  ------------------
  |  Branch (836:5): [True: 0, False: 721k]
  ------------------
  837|   598k|    case EHTokHalf2x2:
  ------------------
  |  Branch (837:5): [True: 0, False: 721k]
  ------------------
  838|   598k|    case EHTokHalf2x3:
  ------------------
  |  Branch (838:5): [True: 0, False: 721k]
  ------------------
  839|   598k|    case EHTokHalf2x4:
  ------------------
  |  Branch (839:5): [True: 0, False: 721k]
  ------------------
  840|   598k|    case EHTokHalf3x1:
  ------------------
  |  Branch (840:5): [True: 0, False: 721k]
  ------------------
  841|   598k|    case EHTokHalf3x2:
  ------------------
  |  Branch (841:5): [True: 0, False: 721k]
  ------------------
  842|   598k|    case EHTokHalf3x3:
  ------------------
  |  Branch (842:5): [True: 0, False: 721k]
  ------------------
  843|   598k|    case EHTokHalf3x4:
  ------------------
  |  Branch (843:5): [True: 0, False: 721k]
  ------------------
  844|   598k|    case EHTokHalf4x1:
  ------------------
  |  Branch (844:5): [True: 0, False: 721k]
  ------------------
  845|   598k|    case EHTokHalf4x2:
  ------------------
  |  Branch (845:5): [True: 0, False: 721k]
  ------------------
  846|   598k|    case EHTokHalf4x3:
  ------------------
  |  Branch (846:5): [True: 0, False: 721k]
  ------------------
  847|   598k|    case EHTokHalf4x4:
  ------------------
  |  Branch (847:5): [True: 0, False: 721k]
  ------------------
  848|   599k|    case EHTokDouble1x1:
  ------------------
  |  Branch (848:5): [True: 588, False: 720k]
  ------------------
  849|   599k|    case EHTokDouble1x2:
  ------------------
  |  Branch (849:5): [True: 588, False: 720k]
  ------------------
  850|   600k|    case EHTokDouble1x3:
  ------------------
  |  Branch (850:5): [True: 588, False: 720k]
  ------------------
  851|   600k|    case EHTokDouble1x4:
  ------------------
  |  Branch (851:5): [True: 588, False: 720k]
  ------------------
  852|   601k|    case EHTokDouble2x1:
  ------------------
  |  Branch (852:5): [True: 588, False: 720k]
  ------------------
  853|   602k|    case EHTokDouble2x2:
  ------------------
  |  Branch (853:5): [True: 588, False: 720k]
  ------------------
  854|   602k|    case EHTokDouble2x3:
  ------------------
  |  Branch (854:5): [True: 588, False: 720k]
  ------------------
  855|   603k|    case EHTokDouble2x4:
  ------------------
  |  Branch (855:5): [True: 588, False: 720k]
  ------------------
  856|   603k|    case EHTokDouble3x1:
  ------------------
  |  Branch (856:5): [True: 588, False: 720k]
  ------------------
  857|   604k|    case EHTokDouble3x2:
  ------------------
  |  Branch (857:5): [True: 588, False: 720k]
  ------------------
  858|   605k|    case EHTokDouble3x3:
  ------------------
  |  Branch (858:5): [True: 588, False: 720k]
  ------------------
  859|   605k|    case EHTokDouble3x4:
  ------------------
  |  Branch (859:5): [True: 588, False: 720k]
  ------------------
  860|   606k|    case EHTokDouble4x1:
  ------------------
  |  Branch (860:5): [True: 588, False: 720k]
  ------------------
  861|   606k|    case EHTokDouble4x2:
  ------------------
  |  Branch (861:5): [True: 588, False: 720k]
  ------------------
  862|   607k|    case EHTokDouble4x3:
  ------------------
  |  Branch (862:5): [True: 588, False: 720k]
  ------------------
  863|   608k|    case EHTokDouble4x4:
  ------------------
  |  Branch (863:5): [True: 588, False: 720k]
  ------------------
  864|   608k|    case EHTokMin16float1x1:
  ------------------
  |  Branch (864:5): [True: 0, False: 721k]
  ------------------
  865|   608k|    case EHTokMin16float1x2:
  ------------------
  |  Branch (865:5): [True: 0, False: 721k]
  ------------------
  866|   608k|    case EHTokMin16float1x3:
  ------------------
  |  Branch (866:5): [True: 0, False: 721k]
  ------------------
  867|   608k|    case EHTokMin16float1x4:
  ------------------
  |  Branch (867:5): [True: 0, False: 721k]
  ------------------
  868|   608k|    case EHTokMin16float2x1:
  ------------------
  |  Branch (868:5): [True: 0, False: 721k]
  ------------------
  869|   608k|    case EHTokMin16float2x2:
  ------------------
  |  Branch (869:5): [True: 0, False: 721k]
  ------------------
  870|   608k|    case EHTokMin16float2x3:
  ------------------
  |  Branch (870:5): [True: 0, False: 721k]
  ------------------
  871|   608k|    case EHTokMin16float2x4:
  ------------------
  |  Branch (871:5): [True: 0, False: 721k]
  ------------------
  872|   608k|    case EHTokMin16float3x1:
  ------------------
  |  Branch (872:5): [True: 0, False: 721k]
  ------------------
  873|   608k|    case EHTokMin16float3x2:
  ------------------
  |  Branch (873:5): [True: 0, False: 721k]
  ------------------
  874|   608k|    case EHTokMin16float3x3:
  ------------------
  |  Branch (874:5): [True: 0, False: 721k]
  ------------------
  875|   608k|    case EHTokMin16float3x4:
  ------------------
  |  Branch (875:5): [True: 0, False: 721k]
  ------------------
  876|   608k|    case EHTokMin16float4x1:
  ------------------
  |  Branch (876:5): [True: 0, False: 721k]
  ------------------
  877|   608k|    case EHTokMin16float4x2:
  ------------------
  |  Branch (877:5): [True: 0, False: 721k]
  ------------------
  878|   608k|    case EHTokMin16float4x3:
  ------------------
  |  Branch (878:5): [True: 0, False: 721k]
  ------------------
  879|   608k|    case EHTokMin16float4x4:
  ------------------
  |  Branch (879:5): [True: 0, False: 721k]
  ------------------
  880|   608k|    case EHTokMin10float1x1:
  ------------------
  |  Branch (880:5): [True: 0, False: 721k]
  ------------------
  881|   608k|    case EHTokMin10float1x2:
  ------------------
  |  Branch (881:5): [True: 0, False: 721k]
  ------------------
  882|   608k|    case EHTokMin10float1x3:
  ------------------
  |  Branch (882:5): [True: 0, False: 721k]
  ------------------
  883|   608k|    case EHTokMin10float1x4:
  ------------------
  |  Branch (883:5): [True: 0, False: 721k]
  ------------------
  884|   608k|    case EHTokMin10float2x1:
  ------------------
  |  Branch (884:5): [True: 0, False: 721k]
  ------------------
  885|   608k|    case EHTokMin10float2x2:
  ------------------
  |  Branch (885:5): [True: 0, False: 721k]
  ------------------
  886|   608k|    case EHTokMin10float2x3:
  ------------------
  |  Branch (886:5): [True: 0, False: 721k]
  ------------------
  887|   608k|    case EHTokMin10float2x4:
  ------------------
  |  Branch (887:5): [True: 0, False: 721k]
  ------------------
  888|   608k|    case EHTokMin10float3x1:
  ------------------
  |  Branch (888:5): [True: 0, False: 721k]
  ------------------
  889|   608k|    case EHTokMin10float3x2:
  ------------------
  |  Branch (889:5): [True: 0, False: 721k]
  ------------------
  890|   608k|    case EHTokMin10float3x3:
  ------------------
  |  Branch (890:5): [True: 0, False: 721k]
  ------------------
  891|   608k|    case EHTokMin10float3x4:
  ------------------
  |  Branch (891:5): [True: 0, False: 721k]
  ------------------
  892|   608k|    case EHTokMin10float4x1:
  ------------------
  |  Branch (892:5): [True: 0, False: 721k]
  ------------------
  893|   608k|    case EHTokMin10float4x2:
  ------------------
  |  Branch (893:5): [True: 0, False: 721k]
  ------------------
  894|   608k|    case EHTokMin10float4x3:
  ------------------
  |  Branch (894:5): [True: 0, False: 721k]
  ------------------
  895|   608k|    case EHTokMin10float4x4:
  ------------------
  |  Branch (895:5): [True: 0, False: 721k]
  ------------------
  896|   608k|    case EHTokMin16int1x1:
  ------------------
  |  Branch (896:5): [True: 0, False: 721k]
  ------------------
  897|   608k|    case EHTokMin16int1x2:
  ------------------
  |  Branch (897:5): [True: 0, False: 721k]
  ------------------
  898|   608k|    case EHTokMin16int1x3:
  ------------------
  |  Branch (898:5): [True: 0, False: 721k]
  ------------------
  899|   608k|    case EHTokMin16int1x4:
  ------------------
  |  Branch (899:5): [True: 0, False: 721k]
  ------------------
  900|   608k|    case EHTokMin16int2x1:
  ------------------
  |  Branch (900:5): [True: 0, False: 721k]
  ------------------
  901|   608k|    case EHTokMin16int2x2:
  ------------------
  |  Branch (901:5): [True: 0, False: 721k]
  ------------------
  902|   608k|    case EHTokMin16int2x3:
  ------------------
  |  Branch (902:5): [True: 0, False: 721k]
  ------------------
  903|   608k|    case EHTokMin16int2x4:
  ------------------
  |  Branch (903:5): [True: 0, False: 721k]
  ------------------
  904|   608k|    case EHTokMin16int3x1:
  ------------------
  |  Branch (904:5): [True: 0, False: 721k]
  ------------------
  905|   608k|    case EHTokMin16int3x2:
  ------------------
  |  Branch (905:5): [True: 0, False: 721k]
  ------------------
  906|   608k|    case EHTokMin16int3x3:
  ------------------
  |  Branch (906:5): [True: 0, False: 721k]
  ------------------
  907|   608k|    case EHTokMin16int3x4:
  ------------------
  |  Branch (907:5): [True: 0, False: 721k]
  ------------------
  908|   608k|    case EHTokMin16int4x1:
  ------------------
  |  Branch (908:5): [True: 0, False: 721k]
  ------------------
  909|   608k|    case EHTokMin16int4x2:
  ------------------
  |  Branch (909:5): [True: 0, False: 721k]
  ------------------
  910|   608k|    case EHTokMin16int4x3:
  ------------------
  |  Branch (910:5): [True: 0, False: 721k]
  ------------------
  911|   608k|    case EHTokMin16int4x4:
  ------------------
  |  Branch (911:5): [True: 0, False: 721k]
  ------------------
  912|   608k|    case EHTokMin12int1x1:
  ------------------
  |  Branch (912:5): [True: 0, False: 721k]
  ------------------
  913|   608k|    case EHTokMin12int1x2:
  ------------------
  |  Branch (913:5): [True: 0, False: 721k]
  ------------------
  914|   608k|    case EHTokMin12int1x3:
  ------------------
  |  Branch (914:5): [True: 0, False: 721k]
  ------------------
  915|   608k|    case EHTokMin12int1x4:
  ------------------
  |  Branch (915:5): [True: 0, False: 721k]
  ------------------
  916|   608k|    case EHTokMin12int2x1:
  ------------------
  |  Branch (916:5): [True: 0, False: 721k]
  ------------------
  917|   608k|    case EHTokMin12int2x2:
  ------------------
  |  Branch (917:5): [True: 0, False: 721k]
  ------------------
  918|   608k|    case EHTokMin12int2x3:
  ------------------
  |  Branch (918:5): [True: 0, False: 721k]
  ------------------
  919|   608k|    case EHTokMin12int2x4:
  ------------------
  |  Branch (919:5): [True: 0, False: 721k]
  ------------------
  920|   608k|    case EHTokMin12int3x1:
  ------------------
  |  Branch (920:5): [True: 0, False: 721k]
  ------------------
  921|   608k|    case EHTokMin12int3x2:
  ------------------
  |  Branch (921:5): [True: 0, False: 721k]
  ------------------
  922|   608k|    case EHTokMin12int3x3:
  ------------------
  |  Branch (922:5): [True: 0, False: 721k]
  ------------------
  923|   608k|    case EHTokMin12int3x4:
  ------------------
  |  Branch (923:5): [True: 0, False: 721k]
  ------------------
  924|   608k|    case EHTokMin12int4x1:
  ------------------
  |  Branch (924:5): [True: 0, False: 721k]
  ------------------
  925|   608k|    case EHTokMin12int4x2:
  ------------------
  |  Branch (925:5): [True: 0, False: 721k]
  ------------------
  926|   608k|    case EHTokMin12int4x3:
  ------------------
  |  Branch (926:5): [True: 0, False: 721k]
  ------------------
  927|   608k|    case EHTokMin12int4x4:
  ------------------
  |  Branch (927:5): [True: 0, False: 721k]
  ------------------
  928|   608k|    case EHTokMin16uint1x1:
  ------------------
  |  Branch (928:5): [True: 0, False: 721k]
  ------------------
  929|   608k|    case EHTokMin16uint1x2:
  ------------------
  |  Branch (929:5): [True: 0, False: 721k]
  ------------------
  930|   608k|    case EHTokMin16uint1x3:
  ------------------
  |  Branch (930:5): [True: 0, False: 721k]
  ------------------
  931|   608k|    case EHTokMin16uint1x4:
  ------------------
  |  Branch (931:5): [True: 0, False: 721k]
  ------------------
  932|   608k|    case EHTokMin16uint2x1:
  ------------------
  |  Branch (932:5): [True: 0, False: 721k]
  ------------------
  933|   608k|    case EHTokMin16uint2x2:
  ------------------
  |  Branch (933:5): [True: 0, False: 721k]
  ------------------
  934|   608k|    case EHTokMin16uint2x3:
  ------------------
  |  Branch (934:5): [True: 0, False: 721k]
  ------------------
  935|   608k|    case EHTokMin16uint2x4:
  ------------------
  |  Branch (935:5): [True: 0, False: 721k]
  ------------------
  936|   608k|    case EHTokMin16uint3x1:
  ------------------
  |  Branch (936:5): [True: 0, False: 721k]
  ------------------
  937|   608k|    case EHTokMin16uint3x2:
  ------------------
  |  Branch (937:5): [True: 0, False: 721k]
  ------------------
  938|   608k|    case EHTokMin16uint3x3:
  ------------------
  |  Branch (938:5): [True: 0, False: 721k]
  ------------------
  939|   608k|    case EHTokMin16uint3x4:
  ------------------
  |  Branch (939:5): [True: 0, False: 721k]
  ------------------
  940|   608k|    case EHTokMin16uint4x1:
  ------------------
  |  Branch (940:5): [True: 0, False: 721k]
  ------------------
  941|   608k|    case EHTokMin16uint4x2:
  ------------------
  |  Branch (941:5): [True: 0, False: 721k]
  ------------------
  942|   608k|    case EHTokMin16uint4x3:
  ------------------
  |  Branch (942:5): [True: 0, False: 721k]
  ------------------
  943|   608k|    case EHTokMin16uint4x4:
  ------------------
  |  Branch (943:5): [True: 0, False: 721k]
  ------------------
  944|   608k|        return keyword;
  945|       |
  946|       |    // texturing types
  947|  17.9k|    case EHTokSampler:
  ------------------
  |  Branch (947:5): [True: 17.9k, False: 703k]
  ------------------
  948|  17.9k|    case EHTokSampler1d:
  ------------------
  |  Branch (948:5): [True: 0, False: 721k]
  ------------------
  949|  18.2k|    case EHTokSampler2d:
  ------------------
  |  Branch (949:5): [True: 294, False: 720k]
  ------------------
  950|  18.5k|    case EHTokSampler3d:
  ------------------
  |  Branch (950:5): [True: 294, False: 720k]
  ------------------
  951|  18.8k|    case EHTokSamplerCube:
  ------------------
  |  Branch (951:5): [True: 294, False: 720k]
  ------------------
  952|  18.8k|    case EHTokSamplerState:
  ------------------
  |  Branch (952:5): [True: 0, False: 721k]
  ------------------
  953|  30.5k|    case EHTokSamplerComparisonState:
  ------------------
  |  Branch (953:5): [True: 11.7k, False: 709k]
  ------------------
  954|  30.5k|    case EHTokTexture:
  ------------------
  |  Branch (954:5): [True: 0, False: 721k]
  ------------------
  955|  33.5k|    case EHTokTexture1d:
  ------------------
  |  Branch (955:5): [True: 2.94k, False: 718k]
  ------------------
  956|  36.4k|    case EHTokTexture1darray:
  ------------------
  |  Branch (956:5): [True: 2.94k, False: 718k]
  ------------------
  957|  46.3k|    case EHTokTexture2d:
  ------------------
  |  Branch (957:5): [True: 9.84k, False: 711k]
  ------------------
  958|  56.1k|    case EHTokTexture2darray:
  ------------------
  |  Branch (958:5): [True: 9.84k, False: 711k]
  ------------------
  959|  58.5k|    case EHTokTexture3d:
  ------------------
  |  Branch (959:5): [True: 2.35k, False: 718k]
  ------------------
  960|  61.7k|    case EHTokTextureCube:
  ------------------
  |  Branch (960:5): [True: 3.23k, False: 717k]
  ------------------
  961|  64.9k|    case EHTokTextureCubearray:
  ------------------
  |  Branch (961:5): [True: 3.23k, False: 717k]
  ------------------
  962|  65.7k|    case EHTokTexture2DMS:
  ------------------
  |  Branch (962:5): [True: 735, False: 720k]
  ------------------
  963|  66.4k|    case EHTokTexture2DMSarray:
  ------------------
  |  Branch (963:5): [True: 735, False: 720k]
  ------------------
  964|  66.8k|    case EHTokRWTexture1d:
  ------------------
  |  Branch (964:5): [True: 441, False: 720k]
  ------------------
  965|  67.3k|    case EHTokRWTexture1darray:
  ------------------
  |  Branch (965:5): [True: 441, False: 720k]
  ------------------
  966|  67.7k|    case EHTokRWTexture2d:
  ------------------
  |  Branch (966:5): [True: 441, False: 720k]
  ------------------
  967|  68.2k|    case EHTokRWTexture2darray:
  ------------------
  |  Branch (967:5): [True: 441, False: 720k]
  ------------------
  968|  68.6k|    case EHTokRWTexture3d:
  ------------------
  |  Branch (968:5): [True: 441, False: 720k]
  ------------------
  969|  69.0k|    case EHTokRWBuffer:
  ------------------
  |  Branch (969:5): [True: 441, False: 720k]
  ------------------
  970|  69.0k|    case EHTokAppendStructuredBuffer:
  ------------------
  |  Branch (970:5): [True: 0, False: 721k]
  ------------------
  971|  69.0k|    case EHTokByteAddressBuffer:
  ------------------
  |  Branch (971:5): [True: 0, False: 721k]
  ------------------
  972|  69.0k|    case EHTokConsumeStructuredBuffer:
  ------------------
  |  Branch (972:5): [True: 0, False: 721k]
  ------------------
  973|  69.0k|    case EHTokRWByteAddressBuffer:
  ------------------
  |  Branch (973:5): [True: 0, False: 721k]
  ------------------
  974|  69.0k|    case EHTokRWStructuredBuffer:
  ------------------
  |  Branch (974:5): [True: 0, False: 721k]
  ------------------
  975|  69.0k|    case EHTokStructuredBuffer:
  ------------------
  |  Branch (975:5): [True: 0, False: 721k]
  ------------------
  976|  69.0k|    case EHTokTextureBuffer:
  ------------------
  |  Branch (976:5): [True: 0, False: 721k]
  ------------------
  977|  69.6k|    case EHTokSubpassInput:
  ------------------
  |  Branch (977:5): [True: 588, False: 720k]
  ------------------
  978|  70.2k|    case EHTokSubpassInputMS:
  ------------------
  |  Branch (978:5): [True: 588, False: 720k]
  ------------------
  979|  70.2k|        return keyword;
  980|       |
  981|       |    // variable, user type, ...
  982|      0|    case EHTokClass:
  ------------------
  |  Branch (982:5): [True: 0, False: 721k]
  ------------------
  983|      0|    case EHTokStruct:
  ------------------
  |  Branch (983:5): [True: 0, False: 721k]
  ------------------
  984|      0|    case EHTokTypedef:
  ------------------
  |  Branch (984:5): [True: 0, False: 721k]
  ------------------
  985|      0|    case EHTokCBuffer:
  ------------------
  |  Branch (985:5): [True: 0, False: 721k]
  ------------------
  986|      0|    case EHTokConstantBuffer:
  ------------------
  |  Branch (986:5): [True: 0, False: 721k]
  ------------------
  987|      0|    case EHTokTBuffer:
  ------------------
  |  Branch (987:5): [True: 0, False: 721k]
  ------------------
  988|      0|    case EHTokThis:
  ------------------
  |  Branch (988:5): [True: 0, False: 721k]
  ------------------
  989|      0|    case EHTokNamespace:
  ------------------
  |  Branch (989:5): [True: 0, False: 721k]
  ------------------
  990|      0|        return keyword;
  991|       |
  992|      0|    case EHTokBoolConstant:
  ------------------
  |  Branch (992:5): [True: 0, False: 721k]
  ------------------
  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: 721k]
  ------------------
 1001|      0|    case EHTokDo:
  ------------------
  |  Branch (1001:5): [True: 0, False: 721k]
  ------------------
 1002|      0|    case EHTokWhile:
  ------------------
  |  Branch (1002:5): [True: 0, False: 721k]
  ------------------
 1003|      0|    case EHTokBreak:
  ------------------
  |  Branch (1003:5): [True: 0, False: 721k]
  ------------------
 1004|      0|    case EHTokContinue:
  ------------------
  |  Branch (1004:5): [True: 0, False: 721k]
  ------------------
 1005|      0|    case EHTokIf:
  ------------------
  |  Branch (1005:5): [True: 0, False: 721k]
  ------------------
 1006|      0|    case EHTokElse:
  ------------------
  |  Branch (1006:5): [True: 0, False: 721k]
  ------------------
 1007|      0|    case EHTokDiscard:
  ------------------
  |  Branch (1007:5): [True: 0, False: 721k]
  ------------------
 1008|      0|    case EHTokReturn:
  ------------------
  |  Branch (1008:5): [True: 0, False: 721k]
  ------------------
 1009|      0|    case EHTokCase:
  ------------------
  |  Branch (1009:5): [True: 0, False: 721k]
  ------------------
 1010|      0|    case EHTokSwitch:
  ------------------
  |  Branch (1010:5): [True: 0, False: 721k]
  ------------------
 1011|      0|    case EHTokDefault:
  ------------------
  |  Branch (1011:5): [True: 0, False: 721k]
  ------------------
 1012|      0|        return keyword;
 1013|       |
 1014|      0|    default:
  ------------------
  |  Branch (1014:5): [True: 0, False: 721k]
  ------------------
 1015|      0|        parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);
 1016|      0|        return EHTokNone;
 1017|   721k|    }
 1018|   721k|}
_ZN7glslang15HlslScanContext16identifierOrTypeEv:
 1021|   196k|{
 1022|   196k|    parserToken->string = NewPoolTString(tokenText);
 1023|       |
 1024|   196k|    return EHTokIdentifier;
 1025|   196k|}
hlslScanContext.cpp:_ZNK12_GLOBAL__N_18str_hashclEPKc:
   68|  1.83M|    {
   69|       |        // djb2
   70|  1.83M|        unsigned long hash = 5381;
   71|  1.83M|        int c;
   72|       |
   73|  14.9M|        while ((c = *str++) != 0)
  ------------------
  |  Branch (73:16): [True: 13.0M, False: 1.83M]
  ------------------
   74|  13.0M|            hash = ((hash << 5) + hash) + c;
   75|       |
   76|  1.83M|        return hash;
   77|  1.83M|    }
hlslScanContext.cpp:_ZNK12_GLOBAL__N_16str_eqclEPKcS2_:
   60|   721k|    {
   61|   721k|        return strcmp(lhs, rhs) == 0;
   62|   721k|    }

_ZN7glslang9HlslTokenC2Ev:
   57|  1.27M|    HlslToken() : string(nullptr) { loc.init(); }
_ZN7glslang15HlslScanContextC2ERNS_17TParseContextBaseERNS_10TPpContextE:
   85|     95|        : parseContext(parseContext), ppContext(ppContext) { }
_ZN7glslang15HlslScanContextD2Ev:
   86|     95|    virtual ~HlslScanContext() { }

_ZN7glslang15HlslTokenStream15pushTokenBufferERKNS_9HlslTokenE:
   54|  1.83M|{
   55|  1.83M|    tokenBuffer[tokenBufferPos] = tok;
   56|  1.83M|    tokenBufferPos = (tokenBufferPos+1) % tokenBufferSize;
   57|  1.83M|}
_ZN7glslang15HlslTokenStream12advanceTokenEv:
  102|  1.83M|{
  103|  1.83M|    pushTokenBuffer(token);
  104|  1.83M|    if (preTokenStackSize > 0)
  ------------------
  |  Branch (104:9): [True: 0, False: 1.83M]
  ------------------
  105|      0|        token = popPreToken();
  106|  1.83M|    else {
  107|  1.83M|        if (tokenStreamStack.size() == 0)
  ------------------
  |  Branch (107:13): [True: 1.83M, False: 0]
  ------------------
  108|  1.83M|            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|  1.83M|    }
  117|  1.83M|}
_ZNK7glslang15HlslTokenStream4peekEv:
  127|  10.9M|{
  128|  10.9M|    return token.tokenClass;
  129|  10.9M|}
_ZNK7glslang15HlslTokenStream14peekTokenClassENS_15EHlslTokenClassE:
  134|  7.53M|{
  135|  7.53M|    return peek() == tokenClass;
  136|  7.53M|}
_ZN7glslang15HlslTokenStream16acceptTokenClassENS_15EHlslTokenClassE:
  141|  3.80M|{
  142|  3.80M|    if (peekTokenClass(tokenClass)) {
  ------------------
  |  Branch (142:9): [True: 916k, False: 2.88M]
  ------------------
  143|   916k|        advanceToken();
  144|   916k|        return true;
  145|   916k|    }
  146|       |
  147|  2.88M|    return false;
  148|  3.80M|}

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

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

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

_ZN7glslang9TBuiltIns17addTabledBuiltinsEi8EProfileRKNS_10SpvVersionE:
  509|     99|{
  510|     99|    const auto forEachFunction = [&](TString& decls, const span<const BuiltInFunction>& functions) {
  511|     99|        for (const auto& fn : functions) {
  512|     99|            if (ValidVersion(fn, version, profile, spvVersion)) {
  513|     99|                AddTabledBuiltin(decls, fn);
  514|     99|                if (profile != EEsProfile) {
  515|     99|                    AddLongVectorBuiltin(decls, fn);
  516|     99|                }
  517|     99|            }
  518|     99|        }
  519|     99|    };
  520|       |
  521|     99|    forEachFunction(commonBuiltins, BaseFunctions);
  522|     99|    forEachFunction(stageBuiltins[EShLangFragment], DerivativeFunctions);
  523|       |
  524|     99|    if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450))
  ------------------
  |  Branch (524:10): [True: 0, False: 99]
  |  Branch (524:35): [True: 0, False: 0]
  |  Branch (524:55): [True: 99, False: 0]
  |  Branch (524:80): [True: 10, False: 89]
  ------------------
  525|     10|        forEachFunction(stageBuiltins[EShLangCompute], DerivativeFunctions);
  526|     99|}
_ZN7glslang9TBuiltIns20relateTabledBuiltinsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableE:
  530|    322|{
  531|    322|    RelateTabledBuiltins(BaseFunctions, symbolTable);
  532|    322|    RelateTabledBuiltins(DerivativeFunctions, symbolTable);
  533|    322|    RelateTabledBuiltins(CustomFunctions, symbolTable);
  534|    322|}
_ZN7glslang18TBuiltInParseablesC2Ev:
  544|    363|{
  545|    363|}
_ZN7glslang18TBuiltInParseablesD2Ev:
  549|    363|{
  550|    363|}
_ZN7glslang9TBuiltInsC2Ev:
  553|    199|{
  554|       |    // Set up textual representations for making all the permutations
  555|       |    // of texturing/imaging functions.
  556|    199|    prefixes[EbtFloat] =  "";
  557|    199|    prefixes[EbtInt]   = "i";
  558|    199|    prefixes[EbtUint]  = "u";
  559|    199|    prefixes[EbtFloat16] = "f16";
  560|    199|    prefixes[EbtInt8]  = "i8";
  561|    199|    prefixes[EbtUint8] = "u8";
  562|    199|    prefixes[EbtInt16]  = "i16";
  563|    199|    prefixes[EbtUint16] = "u16";
  564|    199|    prefixes[EbtInt64]  = "i64";
  565|    199|    prefixes[EbtUint64] = "u64";
  566|       |
  567|    199|    postfixes[2] = "2";
  568|    199|    postfixes[3] = "3";
  569|    199|    postfixes[4] = "4";
  570|       |
  571|       |    // Map from symbolic class of texturing dimension to numeric dimensions.
  572|    199|    dimMap[Esd2D] = 2;
  573|    199|    dimMap[Esd3D] = 3;
  574|    199|    dimMap[EsdCube] = 3;
  575|    199|    dimMap[Esd1D] = 1;
  576|    199|    dimMap[EsdRect] = 2;
  577|    199|    dimMap[EsdBuffer] = 1;
  578|    199|    dimMap[EsdSubpass] = 2;  // potentially unused for now
  579|    199|    dimMap[EsdAttachmentEXT] = 2;  // potentially unused for now
  580|    199|}
_ZN7glslang9TBuiltIns10initializeEi8EProfileRKNS_10SpvVersionE:
  596|     99|{
  597|     99|    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|     99|    TString derivatives (
  609|     99|        "float dFdx(float p);"
  610|     99|        "vec2  dFdx(vec2  p);"
  611|     99|        "vec3  dFdx(vec3  p);"
  612|     99|        "vec4  dFdx(vec4  p);"
  613|       |
  614|     99|        "float dFdy(float p);"
  615|     99|        "vec2  dFdy(vec2  p);"
  616|     99|        "vec3  dFdy(vec3  p);"
  617|     99|        "vec4  dFdy(vec4  p);"
  618|       |
  619|     99|        "float fwidth(float p);"
  620|     99|        "vec2  fwidth(vec2  p);"
  621|     99|        "vec3  fwidth(vec3  p);"
  622|     99|        "vec4  fwidth(vec4  p);"
  623|     99|    );
  624|       |
  625|     99|    TString derivativeControls (
  626|     99|        "float dFdxFine(float p);"
  627|     99|        "vec2  dFdxFine(vec2  p);"
  628|     99|        "vec3  dFdxFine(vec3  p);"
  629|     99|        "vec4  dFdxFine(vec4  p);"
  630|       |
  631|     99|        "float dFdyFine(float p);"
  632|     99|        "vec2  dFdyFine(vec2  p);"
  633|     99|        "vec3  dFdyFine(vec3  p);"
  634|     99|        "vec4  dFdyFine(vec4  p);"
  635|       |
  636|     99|        "float fwidthFine(float p);"
  637|     99|        "vec2  fwidthFine(vec2  p);"
  638|     99|        "vec3  fwidthFine(vec3  p);"
  639|     99|        "vec4  fwidthFine(vec4  p);"
  640|       |
  641|     99|        "float dFdxCoarse(float p);"
  642|     99|        "vec2  dFdxCoarse(vec2  p);"
  643|     99|        "vec3  dFdxCoarse(vec3  p);"
  644|     99|        "vec4  dFdxCoarse(vec4  p);"
  645|       |
  646|     99|        "float dFdyCoarse(float p);"
  647|     99|        "vec2  dFdyCoarse(vec2  p);"
  648|     99|        "vec3  dFdyCoarse(vec3  p);"
  649|     99|        "vec4  dFdyCoarse(vec4  p);"
  650|       |
  651|     99|        "float fwidthCoarse(float p);"
  652|     99|        "vec2  fwidthCoarse(vec2  p);"
  653|     99|        "vec3  fwidthCoarse(vec3  p);"
  654|     99|        "vec4  fwidthCoarse(vec4  p);"
  655|     99|    );
  656|       |
  657|     99|    TString derivativesAndControl16bits (
  658|     99|        "float16_t dFdx(float16_t);"
  659|     99|        "f16vec2   dFdx(f16vec2);"
  660|     99|        "f16vec3   dFdx(f16vec3);"
  661|     99|        "f16vec4   dFdx(f16vec4);"
  662|       |
  663|     99|        "float16_t dFdy(float16_t);"
  664|     99|        "f16vec2   dFdy(f16vec2);"
  665|     99|        "f16vec3   dFdy(f16vec3);"
  666|     99|        "f16vec4   dFdy(f16vec4);"
  667|       |
  668|     99|        "float16_t dFdxFine(float16_t);"
  669|     99|        "f16vec2   dFdxFine(f16vec2);"
  670|     99|        "f16vec3   dFdxFine(f16vec3);"
  671|     99|        "f16vec4   dFdxFine(f16vec4);"
  672|       |
  673|     99|        "float16_t dFdyFine(float16_t);"
  674|     99|        "f16vec2   dFdyFine(f16vec2);"
  675|     99|        "f16vec3   dFdyFine(f16vec3);"
  676|     99|        "f16vec4   dFdyFine(f16vec4);"
  677|       |
  678|     99|        "float16_t dFdxCoarse(float16_t);"
  679|     99|        "f16vec2   dFdxCoarse(f16vec2);"
  680|     99|        "f16vec3   dFdxCoarse(f16vec3);"
  681|     99|        "f16vec4   dFdxCoarse(f16vec4);"
  682|       |
  683|     99|        "float16_t dFdyCoarse(float16_t);"
  684|     99|        "f16vec2   dFdyCoarse(f16vec2);"
  685|     99|        "f16vec3   dFdyCoarse(f16vec3);"
  686|     99|        "f16vec4   dFdyCoarse(f16vec4);"
  687|       |
  688|     99|        "float16_t fwidth(float16_t);"
  689|     99|        "f16vec2   fwidth(f16vec2);"
  690|     99|        "f16vec3   fwidth(f16vec3);"
  691|     99|        "f16vec4   fwidth(f16vec4);"
  692|       |
  693|     99|        "float16_t fwidthFine(float16_t);"
  694|     99|        "f16vec2   fwidthFine(f16vec2);"
  695|     99|        "f16vec3   fwidthFine(f16vec3);"
  696|     99|        "f16vec4   fwidthFine(f16vec4);"
  697|       |
  698|     99|        "float16_t fwidthCoarse(float16_t);"
  699|     99|        "f16vec2   fwidthCoarse(f16vec2);"
  700|     99|        "f16vec3   fwidthCoarse(f16vec3);"
  701|     99|        "f16vec4   fwidthCoarse(f16vec4);"
  702|     99|    );
  703|       |
  704|     99|    TString derivativesAndControl64bits (
  705|     99|        "float64_t dFdx(float64_t);"
  706|     99|        "f64vec2   dFdx(f64vec2);"
  707|     99|        "f64vec3   dFdx(f64vec3);"
  708|     99|        "f64vec4   dFdx(f64vec4);"
  709|       |
  710|     99|        "float64_t dFdy(float64_t);"
  711|     99|        "f64vec2   dFdy(f64vec2);"
  712|     99|        "f64vec3   dFdy(f64vec3);"
  713|     99|        "f64vec4   dFdy(f64vec4);"
  714|       |
  715|     99|        "float64_t dFdxFine(float64_t);"
  716|     99|        "f64vec2   dFdxFine(f64vec2);"
  717|     99|        "f64vec3   dFdxFine(f64vec3);"
  718|     99|        "f64vec4   dFdxFine(f64vec4);"
  719|       |
  720|     99|        "float64_t dFdyFine(float64_t);"
  721|     99|        "f64vec2   dFdyFine(f64vec2);"
  722|     99|        "f64vec3   dFdyFine(f64vec3);"
  723|     99|        "f64vec4   dFdyFine(f64vec4);"
  724|       |
  725|     99|        "float64_t dFdxCoarse(float64_t);"
  726|     99|        "f64vec2   dFdxCoarse(f64vec2);"
  727|     99|        "f64vec3   dFdxCoarse(f64vec3);"
  728|     99|        "f64vec4   dFdxCoarse(f64vec4);"
  729|       |
  730|     99|        "float64_t dFdyCoarse(float64_t);"
  731|     99|        "f64vec2   dFdyCoarse(f64vec2);"
  732|     99|        "f64vec3   dFdyCoarse(f64vec3);"
  733|     99|        "f64vec4   dFdyCoarse(f64vec4);"
  734|       |
  735|     99|        "float64_t fwidth(float64_t);"
  736|     99|        "f64vec2   fwidth(f64vec2);"
  737|     99|        "f64vec3   fwidth(f64vec3);"
  738|     99|        "f64vec4   fwidth(f64vec4);"
  739|       |
  740|     99|        "float64_t fwidthFine(float64_t);"
  741|     99|        "f64vec2   fwidthFine(f64vec2);"
  742|     99|        "f64vec3   fwidthFine(f64vec3);"
  743|     99|        "f64vec4   fwidthFine(f64vec4);"
  744|       |
  745|     99|        "float64_t fwidthCoarse(float64_t);"
  746|     99|        "f64vec2   fwidthCoarse(f64vec2);"
  747|     99|        "f64vec3   fwidthCoarse(f64vec3);"
  748|     99|        "f64vec4   fwidthCoarse(f64vec4);"
  749|     99|    );
  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|     99|    if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
  ------------------
  |  Branch (760:9): [True: 99, False: 0]
  |  Branch (760:34): [True: 13, False: 86]
  ------------------
  761|     13|        commonBuiltins.append(
  762|       |
  763|     13|            "double sqrt(double);"
  764|     13|            "dvec2  sqrt(dvec2);"
  765|     13|            "dvec3  sqrt(dvec3);"
  766|     13|            "dvec4  sqrt(dvec4);"
  767|       |
  768|     13|            "double inversesqrt(double);"
  769|     13|            "dvec2  inversesqrt(dvec2);"
  770|     13|            "dvec3  inversesqrt(dvec3);"
  771|     13|            "dvec4  inversesqrt(dvec4);"
  772|       |
  773|     13|            "double abs(double);"
  774|     13|            "dvec2  abs(dvec2);"
  775|     13|            "dvec3  abs(dvec3);"
  776|     13|            "dvec4  abs(dvec4);"
  777|       |
  778|     13|            "double sign(double);"
  779|     13|            "dvec2  sign(dvec2);"
  780|     13|            "dvec3  sign(dvec3);"
  781|     13|            "dvec4  sign(dvec4);"
  782|       |
  783|     13|            "double floor(double);"
  784|     13|            "dvec2  floor(dvec2);"
  785|     13|            "dvec3  floor(dvec3);"
  786|     13|            "dvec4  floor(dvec4);"
  787|       |
  788|     13|            "double trunc(double);"
  789|     13|            "dvec2  trunc(dvec2);"
  790|     13|            "dvec3  trunc(dvec3);"
  791|     13|            "dvec4  trunc(dvec4);"
  792|       |
  793|     13|            "double round(double);"
  794|     13|            "dvec2  round(dvec2);"
  795|     13|            "dvec3  round(dvec3);"
  796|     13|            "dvec4  round(dvec4);"
  797|       |
  798|     13|            "double roundEven(double);"
  799|     13|            "dvec2  roundEven(dvec2);"
  800|     13|            "dvec3  roundEven(dvec3);"
  801|     13|            "dvec4  roundEven(dvec4);"
  802|       |
  803|     13|            "double ceil(double);"
  804|     13|            "dvec2  ceil(dvec2);"
  805|     13|            "dvec3  ceil(dvec3);"
  806|     13|            "dvec4  ceil(dvec4);"
  807|       |
  808|     13|            "double fract(double);"
  809|     13|            "dvec2  fract(dvec2);"
  810|     13|            "dvec3  fract(dvec3);"
  811|     13|            "dvec4  fract(dvec4);"
  812|       |
  813|     13|            "double mod(double, double);"
  814|     13|            "dvec2  mod(dvec2 , double);"
  815|     13|            "dvec3  mod(dvec3 , double);"
  816|     13|            "dvec4  mod(dvec4 , double);"
  817|     13|            "dvec2  mod(dvec2 , dvec2);"
  818|     13|            "dvec3  mod(dvec3 , dvec3);"
  819|     13|            "dvec4  mod(dvec4 , dvec4);"
  820|       |
  821|     13|            "double modf(double, out double);"
  822|     13|            "dvec2  modf(dvec2,  out dvec2);"
  823|     13|            "dvec3  modf(dvec3,  out dvec3);"
  824|     13|            "dvec4  modf(dvec4,  out dvec4);"
  825|       |
  826|     13|            "double min(double, double);"
  827|     13|            "dvec2  min(dvec2,  double);"
  828|     13|            "dvec3  min(dvec3,  double);"
  829|     13|            "dvec4  min(dvec4,  double);"
  830|     13|            "dvec2  min(dvec2,  dvec2);"
  831|     13|            "dvec3  min(dvec3,  dvec3);"
  832|     13|            "dvec4  min(dvec4,  dvec4);"
  833|       |
  834|     13|            "double max(double, double);"
  835|     13|            "dvec2  max(dvec2 , double);"
  836|     13|            "dvec3  max(dvec3 , double);"
  837|     13|            "dvec4  max(dvec4 , double);"
  838|     13|            "dvec2  max(dvec2 , dvec2);"
  839|     13|            "dvec3  max(dvec3 , dvec3);"
  840|     13|            "dvec4  max(dvec4 , dvec4);"
  841|       |
  842|     13|            "double clamp(double, double, double);"
  843|     13|            "dvec2  clamp(dvec2 , double, double);"
  844|     13|            "dvec3  clamp(dvec3 , double, double);"
  845|     13|            "dvec4  clamp(dvec4 , double, double);"
  846|     13|            "dvec2  clamp(dvec2 , dvec2 , dvec2);"
  847|     13|            "dvec3  clamp(dvec3 , dvec3 , dvec3);"
  848|     13|            "dvec4  clamp(dvec4 , dvec4 , dvec4);"
  849|       |
  850|     13|            "double mix(double, double, double);"
  851|     13|            "dvec2  mix(dvec2,  dvec2,  double);"
  852|     13|            "dvec3  mix(dvec3,  dvec3,  double);"
  853|     13|            "dvec4  mix(dvec4,  dvec4,  double);"
  854|     13|            "dvec2  mix(dvec2,  dvec2,  dvec2);"
  855|     13|            "dvec3  mix(dvec3,  dvec3,  dvec3);"
  856|     13|            "dvec4  mix(dvec4,  dvec4,  dvec4);"
  857|     13|            "double mix(double, double, bool);"
  858|     13|            "dvec2  mix(dvec2,  dvec2,  bvec2);"
  859|     13|            "dvec3  mix(dvec3,  dvec3,  bvec3);"
  860|     13|            "dvec4  mix(dvec4,  dvec4,  bvec4);"
  861|       |
  862|     13|            "double step(double, double);"
  863|     13|            "dvec2  step(dvec2 , dvec2);"
  864|     13|            "dvec3  step(dvec3 , dvec3);"
  865|     13|            "dvec4  step(dvec4 , dvec4);"
  866|     13|            "dvec2  step(double, dvec2);"
  867|     13|            "dvec3  step(double, dvec3);"
  868|     13|            "dvec4  step(double, dvec4);"
  869|       |
  870|     13|            "double smoothstep(double, double, double);"
  871|     13|            "dvec2  smoothstep(dvec2 , dvec2 , dvec2);"
  872|     13|            "dvec3  smoothstep(dvec3 , dvec3 , dvec3);"
  873|     13|            "dvec4  smoothstep(dvec4 , dvec4 , dvec4);"
  874|     13|            "dvec2  smoothstep(double, double, dvec2);"
  875|     13|            "dvec3  smoothstep(double, double, dvec3);"
  876|     13|            "dvec4  smoothstep(double, double, dvec4);"
  877|       |
  878|     13|            "bool  isnan(double);"
  879|     13|            "bvec2 isnan(dvec2);"
  880|     13|            "bvec3 isnan(dvec3);"
  881|     13|            "bvec4 isnan(dvec4);"
  882|       |
  883|     13|            "bool  isinf(double);"
  884|     13|            "bvec2 isinf(dvec2);"
  885|     13|            "bvec3 isinf(dvec3);"
  886|     13|            "bvec4 isinf(dvec4);"
  887|       |
  888|     13|            "double length(double);"
  889|     13|            "double length(dvec2);"
  890|     13|            "double length(dvec3);"
  891|     13|            "double length(dvec4);"
  892|       |
  893|     13|            "double distance(double, double);"
  894|     13|            "double distance(dvec2 , dvec2);"
  895|     13|            "double distance(dvec3 , dvec3);"
  896|     13|            "double distance(dvec4 , dvec4);"
  897|       |
  898|     13|            "double dot(double, double);"
  899|     13|            "double dot(dvec2 , dvec2);"
  900|     13|            "double dot(dvec3 , dvec3);"
  901|     13|            "double dot(dvec4 , dvec4);"
  902|       |
  903|     13|            "dvec3 cross(dvec3, dvec3);"
  904|       |
  905|     13|            "double normalize(double);"
  906|     13|            "dvec2  normalize(dvec2);"
  907|     13|            "dvec3  normalize(dvec3);"
  908|     13|            "dvec4  normalize(dvec4);"
  909|       |
  910|     13|            "double faceforward(double, double, double);"
  911|     13|            "dvec2  faceforward(dvec2,  dvec2,  dvec2);"
  912|     13|            "dvec3  faceforward(dvec3,  dvec3,  dvec3);"
  913|     13|            "dvec4  faceforward(dvec4,  dvec4,  dvec4);"
  914|       |
  915|     13|            "double reflect(double, double);"
  916|     13|            "dvec2  reflect(dvec2 , dvec2 );"
  917|     13|            "dvec3  reflect(dvec3 , dvec3 );"
  918|     13|            "dvec4  reflect(dvec4 , dvec4 );"
  919|       |
  920|     13|            "double refract(double, double, double);"
  921|     13|            "dvec2  refract(dvec2 , dvec2 , double);"
  922|     13|            "dvec3  refract(dvec3 , dvec3 , double);"
  923|     13|            "dvec4  refract(dvec4 , dvec4 , double);"
  924|       |
  925|     13|            "dmat2 matrixCompMult(dmat2, dmat2);"
  926|     13|            "dmat3 matrixCompMult(dmat3, dmat3);"
  927|     13|            "dmat4 matrixCompMult(dmat4, dmat4);"
  928|     13|            "dmat2x3 matrixCompMult(dmat2x3, dmat2x3);"
  929|     13|            "dmat2x4 matrixCompMult(dmat2x4, dmat2x4);"
  930|     13|            "dmat3x2 matrixCompMult(dmat3x2, dmat3x2);"
  931|     13|            "dmat3x4 matrixCompMult(dmat3x4, dmat3x4);"
  932|     13|            "dmat4x2 matrixCompMult(dmat4x2, dmat4x2);"
  933|     13|            "dmat4x3 matrixCompMult(dmat4x3, dmat4x3);"
  934|       |
  935|     13|            "dmat2   outerProduct(dvec2, dvec2);"
  936|     13|            "dmat3   outerProduct(dvec3, dvec3);"
  937|     13|            "dmat4   outerProduct(dvec4, dvec4);"
  938|     13|            "dmat2x3 outerProduct(dvec3, dvec2);"
  939|     13|            "dmat3x2 outerProduct(dvec2, dvec3);"
  940|     13|            "dmat2x4 outerProduct(dvec4, dvec2);"
  941|     13|            "dmat4x2 outerProduct(dvec2, dvec4);"
  942|     13|            "dmat3x4 outerProduct(dvec4, dvec3);"
  943|     13|            "dmat4x3 outerProduct(dvec3, dvec4);"
  944|       |
  945|     13|            "dmat2   transpose(dmat2);"
  946|     13|            "dmat3   transpose(dmat3);"
  947|     13|            "dmat4   transpose(dmat4);"
  948|     13|            "dmat2x3 transpose(dmat3x2);"
  949|     13|            "dmat3x2 transpose(dmat2x3);"
  950|     13|            "dmat2x4 transpose(dmat4x2);"
  951|     13|            "dmat4x2 transpose(dmat2x4);"
  952|     13|            "dmat3x4 transpose(dmat4x3);"
  953|     13|            "dmat4x3 transpose(dmat3x4);"
  954|       |
  955|     13|            "double determinant(dmat2);"
  956|     13|            "double determinant(dmat3);"
  957|     13|            "double determinant(dmat4);"
  958|       |
  959|     13|            "dmat2 inverse(dmat2);"
  960|     13|            "dmat3 inverse(dmat3);"
  961|     13|            "dmat4 inverse(dmat4);"
  962|       |
  963|     13|            "bvec2 lessThan(dvec2, dvec2);"
  964|     13|            "bvec3 lessThan(dvec3, dvec3);"
  965|     13|            "bvec4 lessThan(dvec4, dvec4);"
  966|       |
  967|     13|            "bvec2 lessThanEqual(dvec2, dvec2);"
  968|     13|            "bvec3 lessThanEqual(dvec3, dvec3);"
  969|     13|            "bvec4 lessThanEqual(dvec4, dvec4);"
  970|       |
  971|     13|            "bvec2 greaterThan(dvec2, dvec2);"
  972|     13|            "bvec3 greaterThan(dvec3, dvec3);"
  973|     13|            "bvec4 greaterThan(dvec4, dvec4);"
  974|       |
  975|     13|            "bvec2 greaterThanEqual(dvec2, dvec2);"
  976|     13|            "bvec3 greaterThanEqual(dvec3, dvec3);"
  977|     13|            "bvec4 greaterThanEqual(dvec4, dvec4);"
  978|       |
  979|     13|            "bvec2 equal(dvec2, dvec2);"
  980|     13|            "bvec3 equal(dvec3, dvec3);"
  981|     13|            "bvec4 equal(dvec4, dvec4);"
  982|       |
  983|     13|            "bvec2 notEqual(dvec2, dvec2);"
  984|     13|            "bvec3 notEqual(dvec3, dvec3);"
  985|     13|            "bvec4 notEqual(dvec4, dvec4);"
  986|       |
  987|     13|            "\n");
  988|     13|    }
  989|       |
  990|     99|    if (profile == EEsProfile && version >= 310) {  // Explicit Types
  ------------------
  |  Branch (990:9): [True: 0, False: 99]
  |  Branch (990:34): [True: 0, False: 0]
  ------------------
  991|      0|      commonBuiltins.append(
  992|       |
  993|      0|        "float64_t sqrt(float64_t);"
  994|      0|        "f64vec2  sqrt(f64vec2);"
  995|      0|        "f64vec3  sqrt(f64vec3);"
  996|      0|        "f64vec4  sqrt(f64vec4);"
  997|       |
  998|      0|        "float64_t inversesqrt(float64_t);"
  999|      0|        "f64vec2  inversesqrt(f64vec2);"
 1000|      0|        "f64vec3  inversesqrt(f64vec3);"
 1001|      0|        "f64vec4  inversesqrt(f64vec4);"
 1002|       |
 1003|      0|        "float64_t abs(float64_t);"
 1004|      0|        "f64vec2  abs(f64vec2);"
 1005|      0|        "f64vec3  abs(f64vec3);"
 1006|      0|        "f64vec4  abs(f64vec4);"
 1007|       |
 1008|      0|        "float64_t sign(float64_t);"
 1009|      0|        "f64vec2  sign(f64vec2);"
 1010|      0|        "f64vec3  sign(f64vec3);"
 1011|      0|        "f64vec4  sign(f64vec4);"
 1012|       |
 1013|      0|        "float64_t floor(float64_t);"
 1014|      0|        "f64vec2  floor(f64vec2);"
 1015|      0|        "f64vec3  floor(f64vec3);"
 1016|      0|        "f64vec4  floor(f64vec4);"
 1017|       |
 1018|      0|        "float64_t trunc(float64_t);"
 1019|      0|        "f64vec2  trunc(f64vec2);"
 1020|      0|        "f64vec3  trunc(f64vec3);"
 1021|      0|        "f64vec4  trunc(f64vec4);"
 1022|       |
 1023|      0|        "float64_t round(float64_t);"
 1024|      0|        "f64vec2  round(f64vec2);"
 1025|      0|        "f64vec3  round(f64vec3);"
 1026|      0|        "f64vec4  round(f64vec4);"
 1027|       |
 1028|      0|        "float64_t roundEven(float64_t);"
 1029|      0|        "f64vec2  roundEven(f64vec2);"
 1030|      0|        "f64vec3  roundEven(f64vec3);"
 1031|      0|        "f64vec4  roundEven(f64vec4);"
 1032|       |
 1033|      0|        "float64_t ceil(float64_t);"
 1034|      0|        "f64vec2  ceil(f64vec2);"
 1035|      0|        "f64vec3  ceil(f64vec3);"
 1036|      0|        "f64vec4  ceil(f64vec4);"
 1037|       |
 1038|      0|        "float64_t fract(float64_t);"
 1039|      0|        "f64vec2  fract(f64vec2);"
 1040|      0|        "f64vec3  fract(f64vec3);"
 1041|      0|        "f64vec4  fract(f64vec4);"
 1042|       |
 1043|      0|        "float64_t mod(float64_t, float64_t);"
 1044|      0|        "f64vec2  mod(f64vec2 , float64_t);"
 1045|      0|        "f64vec3  mod(f64vec3 , float64_t);"
 1046|      0|        "f64vec4  mod(f64vec4 , float64_t);"
 1047|      0|        "f64vec2  mod(f64vec2 , f64vec2);"
 1048|      0|        "f64vec3  mod(f64vec3 , f64vec3);"
 1049|      0|        "f64vec4  mod(f64vec4 , f64vec4);"
 1050|       |
 1051|      0|        "float64_t modf(float64_t, out float64_t);"
 1052|      0|        "f64vec2  modf(f64vec2,  out f64vec2);"
 1053|      0|        "f64vec3  modf(f64vec3,  out f64vec3);"
 1054|      0|        "f64vec4  modf(f64vec4,  out f64vec4);"
 1055|       |
 1056|      0|        "float64_t min(float64_t, float64_t);"
 1057|      0|        "f64vec2  min(f64vec2,  float64_t);"
 1058|      0|        "f64vec3  min(f64vec3,  float64_t);"
 1059|      0|        "f64vec4  min(f64vec4,  float64_t);"
 1060|      0|        "f64vec2  min(f64vec2,  f64vec2);"
 1061|      0|        "f64vec3  min(f64vec3,  f64vec3);"
 1062|      0|        "f64vec4  min(f64vec4,  f64vec4);"
 1063|       |
 1064|      0|        "float64_t max(float64_t, float64_t);"
 1065|      0|        "f64vec2  max(f64vec2 , float64_t);"
 1066|      0|        "f64vec3  max(f64vec3 , float64_t);"
 1067|      0|        "f64vec4  max(f64vec4 , float64_t);"
 1068|      0|        "f64vec2  max(f64vec2 , f64vec2);"
 1069|      0|        "f64vec3  max(f64vec3 , f64vec3);"
 1070|      0|        "f64vec4  max(f64vec4 , f64vec4);"
 1071|       |
 1072|      0|        "float64_t clamp(float64_t, float64_t, float64_t);"
 1073|      0|        "f64vec2  clamp(f64vec2 , float64_t, float64_t);"
 1074|      0|        "f64vec3  clamp(f64vec3 , float64_t, float64_t);"
 1075|      0|        "f64vec4  clamp(f64vec4 , float64_t, float64_t);"
 1076|      0|        "f64vec2  clamp(f64vec2 , f64vec2 , f64vec2);"
 1077|      0|        "f64vec3  clamp(f64vec3 , f64vec3 , f64vec3);"
 1078|      0|        "f64vec4  clamp(f64vec4 , f64vec4 , f64vec4);"
 1079|       |
 1080|      0|        "float64_t mix(float64_t, float64_t, float64_t);"
 1081|      0|        "f64vec2  mix(f64vec2,  f64vec2,  float64_t);"
 1082|      0|        "f64vec3  mix(f64vec3,  f64vec3,  float64_t);"
 1083|      0|        "f64vec4  mix(f64vec4,  f64vec4,  float64_t);"
 1084|      0|        "f64vec2  mix(f64vec2,  f64vec2,  f64vec2);"
 1085|      0|        "f64vec3  mix(f64vec3,  f64vec3,  f64vec3);"
 1086|      0|        "f64vec4  mix(f64vec4,  f64vec4,  f64vec4);"
 1087|      0|        "float64_t mix(float64_t, float64_t, bool);"
 1088|      0|        "f64vec2  mix(f64vec2,  f64vec2,  bvec2);"
 1089|      0|        "f64vec3  mix(f64vec3,  f64vec3,  bvec3);"
 1090|      0|        "f64vec4  mix(f64vec4,  f64vec4,  bvec4);"
 1091|       |
 1092|      0|        "float64_t step(float64_t, float64_t);"
 1093|      0|        "f64vec2  step(f64vec2 , f64vec2);"
 1094|      0|        "f64vec3  step(f64vec3 , f64vec3);"
 1095|      0|        "f64vec4  step(f64vec4 , f64vec4);"
 1096|      0|        "f64vec2  step(float64_t, f64vec2);"
 1097|      0|        "f64vec3  step(float64_t, f64vec3);"
 1098|      0|        "f64vec4  step(float64_t, f64vec4);"
 1099|       |
 1100|      0|        "float64_t smoothstep(float64_t, float64_t, float64_t);"
 1101|      0|        "f64vec2  smoothstep(f64vec2 , f64vec2 , f64vec2);"
 1102|      0|        "f64vec3  smoothstep(f64vec3 , f64vec3 , f64vec3);"
 1103|      0|        "f64vec4  smoothstep(f64vec4 , f64vec4 , f64vec4);"
 1104|      0|        "f64vec2  smoothstep(float64_t, float64_t, f64vec2);"
 1105|      0|        "f64vec3  smoothstep(float64_t, float64_t, f64vec3);"
 1106|      0|        "f64vec4  smoothstep(float64_t, float64_t, f64vec4);"
 1107|       |
 1108|      0|        "float64_t length(float64_t);"
 1109|      0|        "float64_t length(f64vec2);"
 1110|      0|        "float64_t length(f64vec3);"
 1111|      0|        "float64_t length(f64vec4);"
 1112|       |
 1113|      0|        "float64_t distance(float64_t, float64_t);"
 1114|      0|        "float64_t distance(f64vec2 , f64vec2);"
 1115|      0|        "float64_t distance(f64vec3 , f64vec3);"
 1116|      0|        "float64_t distance(f64vec4 , f64vec4);"
 1117|       |
 1118|      0|        "float64_t dot(float64_t, float64_t);"
 1119|      0|        "float64_t dot(f64vec2 , f64vec2);"
 1120|      0|        "float64_t dot(f64vec3 , f64vec3);"
 1121|      0|        "float64_t dot(f64vec4 , f64vec4);"
 1122|       |
 1123|      0|        "f64vec3 cross(f64vec3, f64vec3);"
 1124|       |
 1125|      0|        "float64_t normalize(float64_t);"
 1126|      0|        "f64vec2  normalize(f64vec2);"
 1127|      0|        "f64vec3  normalize(f64vec3);"
 1128|      0|        "f64vec4  normalize(f64vec4);"
 1129|       |
 1130|      0|        "float64_t faceforward(float64_t, float64_t, float64_t);"
 1131|      0|        "f64vec2  faceforward(f64vec2,  f64vec2,  f64vec2);"
 1132|      0|        "f64vec3  faceforward(f64vec3,  f64vec3,  f64vec3);"
 1133|      0|        "f64vec4  faceforward(f64vec4,  f64vec4,  f64vec4);"
 1134|       |
 1135|      0|        "float64_t reflect(float64_t, float64_t);"
 1136|      0|        "f64vec2  reflect(f64vec2 , f64vec2 );"
 1137|      0|        "f64vec3  reflect(f64vec3 , f64vec3 );"
 1138|      0|        "f64vec4  reflect(f64vec4 , f64vec4 );"
 1139|       |
 1140|      0|        "float64_t refract(float64_t, float64_t, float64_t);"
 1141|      0|        "f64vec2  refract(f64vec2 , f64vec2 , float64_t);"
 1142|      0|        "f64vec3  refract(f64vec3 , f64vec3 , float64_t);"
 1143|      0|        "f64vec4  refract(f64vec4 , f64vec4 , float64_t);"
 1144|       |
 1145|      0|        "f64mat2 matrixCompMult(f64mat2, f64mat2);"
 1146|      0|        "f64mat3 matrixCompMult(f64mat3, f64mat3);"
 1147|      0|        "f64mat4 matrixCompMult(f64mat4, f64mat4);"
 1148|      0|        "f64mat2x3 matrixCompMult(f64mat2x3, f64mat2x3);"
 1149|      0|        "f64mat2x4 matrixCompMult(f64mat2x4, f64mat2x4);"
 1150|      0|        "f64mat3x2 matrixCompMult(f64mat3x2, f64mat3x2);"
 1151|      0|        "f64mat3x4 matrixCompMult(f64mat3x4, f64mat3x4);"
 1152|      0|        "f64mat4x2 matrixCompMult(f64mat4x2, f64mat4x2);"
 1153|      0|        "f64mat4x3 matrixCompMult(f64mat4x3, f64mat4x3);"
 1154|       |
 1155|      0|        "f64mat2   outerProduct(f64vec2, f64vec2);"
 1156|      0|        "f64mat3   outerProduct(f64vec3, f64vec3);"
 1157|      0|        "f64mat4   outerProduct(f64vec4, f64vec4);"
 1158|      0|        "f64mat2x3 outerProduct(f64vec3, f64vec2);"
 1159|      0|        "f64mat3x2 outerProduct(f64vec2, f64vec3);"
 1160|      0|        "f64mat2x4 outerProduct(f64vec4, f64vec2);"
 1161|      0|        "f64mat4x2 outerProduct(f64vec2, f64vec4);"
 1162|      0|        "f64mat3x4 outerProduct(f64vec4, f64vec3);"
 1163|      0|        "f64mat4x3 outerProduct(f64vec3, f64vec4);"
 1164|       |
 1165|      0|        "f64mat2   transpose(f64mat2);"
 1166|      0|        "f64mat3   transpose(f64mat3);"
 1167|      0|        "f64mat4   transpose(f64mat4);"
 1168|      0|        "f64mat2x3 transpose(f64mat3x2);"
 1169|      0|        "f64mat3x2 transpose(f64mat2x3);"
 1170|      0|        "f64mat2x4 transpose(f64mat4x2);"
 1171|      0|        "f64mat4x2 transpose(f64mat2x4);"
 1172|      0|        "f64mat3x4 transpose(f64mat4x3);"
 1173|      0|        "f64mat4x3 transpose(f64mat3x4);"
 1174|       |
 1175|      0|        "float64_t determinant(f64mat2);"
 1176|      0|        "float64_t determinant(f64mat3);"
 1177|      0|        "float64_t determinant(f64mat4);"
 1178|       |
 1179|      0|        "f64mat2 inverse(f64mat2);"
 1180|      0|        "f64mat3 inverse(f64mat3);"
 1181|      0|        "f64mat4 inverse(f64mat4);"
 1182|       |
 1183|      0|        "\n");
 1184|      0|    }
 1185|       |
 1186|     99|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (1186:10): [True: 99, False: 0]
  |  Branch (1186:35): [True: 10, False: 89]
  |  Branch (1186:55): [True: 0, False: 89]
  |  Branch (1186:80): [True: 0, False: 0]
  ------------------
 1187|     10|        commonBuiltins.append(
 1188|       |
 1189|     10|            "int64_t abs(int64_t);"
 1190|     10|            "i64vec2 abs(i64vec2);"
 1191|     10|            "i64vec3 abs(i64vec3);"
 1192|     10|            "i64vec4 abs(i64vec4);"
 1193|       |
 1194|     10|            "int64_t sign(int64_t);"
 1195|     10|            "i64vec2 sign(i64vec2);"
 1196|     10|            "i64vec3 sign(i64vec3);"
 1197|     10|            "i64vec4 sign(i64vec4);"
 1198|       |
 1199|     10|            "int64_t  min(int64_t,  int64_t);"
 1200|     10|            "i64vec2  min(i64vec2,  int64_t);"
 1201|     10|            "i64vec3  min(i64vec3,  int64_t);"
 1202|     10|            "i64vec4  min(i64vec4,  int64_t);"
 1203|     10|            "i64vec2  min(i64vec2,  i64vec2);"
 1204|     10|            "i64vec3  min(i64vec3,  i64vec3);"
 1205|     10|            "i64vec4  min(i64vec4,  i64vec4);"
 1206|     10|            "uint64_t min(uint64_t, uint64_t);"
 1207|     10|            "u64vec2  min(u64vec2,  uint64_t);"
 1208|     10|            "u64vec3  min(u64vec3,  uint64_t);"
 1209|     10|            "u64vec4  min(u64vec4,  uint64_t);"
 1210|     10|            "u64vec2  min(u64vec2,  u64vec2);"
 1211|     10|            "u64vec3  min(u64vec3,  u64vec3);"
 1212|     10|            "u64vec4  min(u64vec4,  u64vec4);"
 1213|       |
 1214|     10|            "int64_t  max(int64_t,  int64_t);"
 1215|     10|            "i64vec2  max(i64vec2,  int64_t);"
 1216|     10|            "i64vec3  max(i64vec3,  int64_t);"
 1217|     10|            "i64vec4  max(i64vec4,  int64_t);"
 1218|     10|            "i64vec2  max(i64vec2,  i64vec2);"
 1219|     10|            "i64vec3  max(i64vec3,  i64vec3);"
 1220|     10|            "i64vec4  max(i64vec4,  i64vec4);"
 1221|     10|            "uint64_t max(uint64_t, uint64_t);"
 1222|     10|            "u64vec2  max(u64vec2,  uint64_t);"
 1223|     10|            "u64vec3  max(u64vec3,  uint64_t);"
 1224|     10|            "u64vec4  max(u64vec4,  uint64_t);"
 1225|     10|            "u64vec2  max(u64vec2,  u64vec2);"
 1226|     10|            "u64vec3  max(u64vec3,  u64vec3);"
 1227|     10|            "u64vec4  max(u64vec4,  u64vec4);"
 1228|       |
 1229|     10|            "int64_t  clamp(int64_t,  int64_t,  int64_t);"
 1230|     10|            "i64vec2  clamp(i64vec2,  int64_t,  int64_t);"
 1231|     10|            "i64vec3  clamp(i64vec3,  int64_t,  int64_t);"
 1232|     10|            "i64vec4  clamp(i64vec4,  int64_t,  int64_t);"
 1233|     10|            "i64vec2  clamp(i64vec2,  i64vec2,  i64vec2);"
 1234|     10|            "i64vec3  clamp(i64vec3,  i64vec3,  i64vec3);"
 1235|     10|            "i64vec4  clamp(i64vec4,  i64vec4,  i64vec4);"
 1236|     10|            "uint64_t clamp(uint64_t, uint64_t, uint64_t);"
 1237|     10|            "u64vec2  clamp(u64vec2,  uint64_t, uint64_t);"
 1238|     10|            "u64vec3  clamp(u64vec3,  uint64_t, uint64_t);"
 1239|     10|            "u64vec4  clamp(u64vec4,  uint64_t, uint64_t);"
 1240|     10|            "u64vec2  clamp(u64vec2,  u64vec2,  u64vec2);"
 1241|     10|            "u64vec3  clamp(u64vec3,  u64vec3,  u64vec3);"
 1242|     10|            "u64vec4  clamp(u64vec4,  u64vec4,  u64vec4);"
 1243|       |
 1244|     10|            "int64_t  mix(int64_t,  int64_t,  bool);"
 1245|     10|            "i64vec2  mix(i64vec2,  i64vec2,  bvec2);"
 1246|     10|            "i64vec3  mix(i64vec3,  i64vec3,  bvec3);"
 1247|     10|            "i64vec4  mix(i64vec4,  i64vec4,  bvec4);"
 1248|     10|            "uint64_t mix(uint64_t, uint64_t, bool);"
 1249|     10|            "u64vec2  mix(u64vec2,  u64vec2,  bvec2);"
 1250|     10|            "u64vec3  mix(u64vec3,  u64vec3,  bvec3);"
 1251|     10|            "u64vec4  mix(u64vec4,  u64vec4,  bvec4);"
 1252|       |
 1253|     10|            "int64_t doubleBitsToInt64(float64_t);"
 1254|     10|            "i64vec2 doubleBitsToInt64(f64vec2);"
 1255|     10|            "i64vec3 doubleBitsToInt64(f64vec3);"
 1256|     10|            "i64vec4 doubleBitsToInt64(f64vec4);"
 1257|       |
 1258|     10|            "uint64_t doubleBitsToUint64(float64_t);"
 1259|     10|            "u64vec2  doubleBitsToUint64(f64vec2);"
 1260|     10|            "u64vec3  doubleBitsToUint64(f64vec3);"
 1261|     10|            "u64vec4  doubleBitsToUint64(f64vec4);"
 1262|       |
 1263|     10|            "float64_t int64BitsToDouble(int64_t);"
 1264|     10|            "f64vec2  int64BitsToDouble(i64vec2);"
 1265|     10|            "f64vec3  int64BitsToDouble(i64vec3);"
 1266|     10|            "f64vec4  int64BitsToDouble(i64vec4);"
 1267|       |
 1268|     10|            "float64_t uint64BitsToDouble(uint64_t);"
 1269|     10|            "f64vec2  uint64BitsToDouble(u64vec2);"
 1270|     10|            "f64vec3  uint64BitsToDouble(u64vec3);"
 1271|     10|            "f64vec4  uint64BitsToDouble(u64vec4);"
 1272|       |
 1273|     10|            "int64_t  packInt2x32(ivec2);"
 1274|     10|            "uint64_t packUint2x32(uvec2);"
 1275|     10|            "ivec2    unpackInt2x32(int64_t);"
 1276|     10|            "uvec2    unpackUint2x32(uint64_t);"
 1277|       |
 1278|     10|            "bvec2 lessThan(i64vec2, i64vec2);"
 1279|     10|            "bvec3 lessThan(i64vec3, i64vec3);"
 1280|     10|            "bvec4 lessThan(i64vec4, i64vec4);"
 1281|     10|            "bvec2 lessThan(u64vec2, u64vec2);"
 1282|     10|            "bvec3 lessThan(u64vec3, u64vec3);"
 1283|     10|            "bvec4 lessThan(u64vec4, u64vec4);"
 1284|       |
 1285|     10|            "bvec2 lessThanEqual(i64vec2, i64vec2);"
 1286|     10|            "bvec3 lessThanEqual(i64vec3, i64vec3);"
 1287|     10|            "bvec4 lessThanEqual(i64vec4, i64vec4);"
 1288|     10|            "bvec2 lessThanEqual(u64vec2, u64vec2);"
 1289|     10|            "bvec3 lessThanEqual(u64vec3, u64vec3);"
 1290|     10|            "bvec4 lessThanEqual(u64vec4, u64vec4);"
 1291|       |
 1292|     10|            "bvec2 greaterThan(i64vec2, i64vec2);"
 1293|     10|            "bvec3 greaterThan(i64vec3, i64vec3);"
 1294|     10|            "bvec4 greaterThan(i64vec4, i64vec4);"
 1295|     10|            "bvec2 greaterThan(u64vec2, u64vec2);"
 1296|     10|            "bvec3 greaterThan(u64vec3, u64vec3);"
 1297|     10|            "bvec4 greaterThan(u64vec4, u64vec4);"
 1298|       |
 1299|     10|            "bvec2 greaterThanEqual(i64vec2, i64vec2);"
 1300|     10|            "bvec3 greaterThanEqual(i64vec3, i64vec3);"
 1301|     10|            "bvec4 greaterThanEqual(i64vec4, i64vec4);"
 1302|     10|            "bvec2 greaterThanEqual(u64vec2, u64vec2);"
 1303|     10|            "bvec3 greaterThanEqual(u64vec3, u64vec3);"
 1304|     10|            "bvec4 greaterThanEqual(u64vec4, u64vec4);"
 1305|       |
 1306|     10|            "bvec2 equal(i64vec2, i64vec2);"
 1307|     10|            "bvec3 equal(i64vec3, i64vec3);"
 1308|     10|            "bvec4 equal(i64vec4, i64vec4);"
 1309|     10|            "bvec2 equal(u64vec2, u64vec2);"
 1310|     10|            "bvec3 equal(u64vec3, u64vec3);"
 1311|     10|            "bvec4 equal(u64vec4, u64vec4);"
 1312|       |
 1313|     10|            "bvec2 notEqual(i64vec2, i64vec2);"
 1314|     10|            "bvec3 notEqual(i64vec3, i64vec3);"
 1315|     10|            "bvec4 notEqual(i64vec4, i64vec4);"
 1316|     10|            "bvec2 notEqual(u64vec2, u64vec2);"
 1317|     10|            "bvec3 notEqual(u64vec3, u64vec3);"
 1318|     10|            "bvec4 notEqual(u64vec4, u64vec4);"
 1319|       |
 1320|     10|            "int64_t bitCount(int64_t);"
 1321|     10|            "i64vec2 bitCount(i64vec2);"
 1322|     10|            "i64vec3 bitCount(i64vec3);"
 1323|     10|            "i64vec4 bitCount(i64vec4);"
 1324|       |
 1325|     10|            "int64_t bitCount(uint64_t);"
 1326|     10|            "i64vec2 bitCount(u64vec2);"
 1327|     10|            "i64vec3 bitCount(u64vec3);"
 1328|     10|            "i64vec4 bitCount(u64vec4);"
 1329|       |
 1330|     10|            "int64_t findLSB(int64_t);"
 1331|     10|            "i64vec2 findLSB(i64vec2);"
 1332|     10|            "i64vec3 findLSB(i64vec3);"
 1333|     10|            "i64vec4 findLSB(i64vec4);"
 1334|       |
 1335|     10|            "int64_t findLSB(uint64_t);"
 1336|     10|            "i64vec2 findLSB(u64vec2);"
 1337|     10|            "i64vec3 findLSB(u64vec3);"
 1338|     10|            "i64vec4 findLSB(u64vec4);"
 1339|       |
 1340|     10|            "int64_t findMSB(int64_t);"
 1341|     10|            "i64vec2 findMSB(i64vec2);"
 1342|     10|            "i64vec3 findMSB(i64vec3);"
 1343|     10|            "i64vec4 findMSB(i64vec4);"
 1344|       |
 1345|     10|            "int64_t findMSB(uint64_t);"
 1346|     10|            "i64vec2 findMSB(u64vec2);"
 1347|     10|            "i64vec3 findMSB(u64vec3);"
 1348|     10|            "i64vec4 findMSB(u64vec4);"
 1349|       |
 1350|     10|            "\n"
 1351|     10|        );
 1352|     10|    }
 1353|       |
 1354|       |    // GL_AMD_shader_trinary_minmax
 1355|     99|    if (profile != EEsProfile && version >= 430) {
  ------------------
  |  Branch (1355:9): [True: 99, False: 0]
  |  Branch (1355:34): [True: 10, False: 89]
  ------------------
 1356|     10|        commonBuiltins.append(
 1357|     10|            "float min3(float, float, float);"
 1358|     10|            "vec2  min3(vec2,  vec2,  vec2);"
 1359|     10|            "vec3  min3(vec3,  vec3,  vec3);"
 1360|     10|            "vec4  min3(vec4,  vec4,  vec4);"
 1361|       |
 1362|     10|            "int   min3(int,   int,   int);"
 1363|     10|            "ivec2 min3(ivec2, ivec2, ivec2);"
 1364|     10|            "ivec3 min3(ivec3, ivec3, ivec3);"
 1365|     10|            "ivec4 min3(ivec4, ivec4, ivec4);"
 1366|       |
 1367|     10|            "uint  min3(uint,  uint,  uint);"
 1368|     10|            "uvec2 min3(uvec2, uvec2, uvec2);"
 1369|     10|            "uvec3 min3(uvec3, uvec3, uvec3);"
 1370|     10|            "uvec4 min3(uvec4, uvec4, uvec4);"
 1371|       |
 1372|     10|            "float max3(float, float, float);"
 1373|     10|            "vec2  max3(vec2,  vec2,  vec2);"
 1374|     10|            "vec3  max3(vec3,  vec3,  vec3);"
 1375|     10|            "vec4  max3(vec4,  vec4,  vec4);"
 1376|       |
 1377|     10|            "int   max3(int,   int,   int);"
 1378|     10|            "ivec2 max3(ivec2, ivec2, ivec2);"
 1379|     10|            "ivec3 max3(ivec3, ivec3, ivec3);"
 1380|     10|            "ivec4 max3(ivec4, ivec4, ivec4);"
 1381|       |
 1382|     10|            "uint  max3(uint,  uint,  uint);"
 1383|     10|            "uvec2 max3(uvec2, uvec2, uvec2);"
 1384|     10|            "uvec3 max3(uvec3, uvec3, uvec3);"
 1385|     10|            "uvec4 max3(uvec4, uvec4, uvec4);"
 1386|       |
 1387|     10|            "float mid3(float, float, float);"
 1388|     10|            "vec2  mid3(vec2,  vec2,  vec2);"
 1389|     10|            "vec3  mid3(vec3,  vec3,  vec3);"
 1390|     10|            "vec4  mid3(vec4,  vec4,  vec4);"
 1391|       |
 1392|     10|            "int   mid3(int,   int,   int);"
 1393|     10|            "ivec2 mid3(ivec2, ivec2, ivec2);"
 1394|     10|            "ivec3 mid3(ivec3, ivec3, ivec3);"
 1395|     10|            "ivec4 mid3(ivec4, ivec4, ivec4);"
 1396|       |
 1397|     10|            "uint  mid3(uint,  uint,  uint);"
 1398|     10|            "uvec2 mid3(uvec2, uvec2, uvec2);"
 1399|     10|            "uvec3 mid3(uvec3, uvec3, uvec3);"
 1400|     10|            "uvec4 mid3(uvec4, uvec4, uvec4);"
 1401|       |
 1402|     10|            "float16_t min3(float16_t, float16_t, float16_t);"
 1403|     10|            "f16vec2   min3(f16vec2,   f16vec2,   f16vec2);"
 1404|     10|            "f16vec3   min3(f16vec3,   f16vec3,   f16vec3);"
 1405|     10|            "f16vec4   min3(f16vec4,   f16vec4,   f16vec4);"
 1406|       |
 1407|     10|            "float16_t max3(float16_t, float16_t, float16_t);"
 1408|     10|            "f16vec2   max3(f16vec2,   f16vec2,   f16vec2);"
 1409|     10|            "f16vec3   max3(f16vec3,   f16vec3,   f16vec3);"
 1410|     10|            "f16vec4   max3(f16vec4,   f16vec4,   f16vec4);"
 1411|       |
 1412|     10|            "float16_t mid3(float16_t, float16_t, float16_t);"
 1413|     10|            "f16vec2   mid3(f16vec2,   f16vec2,   f16vec2);"
 1414|     10|            "f16vec3   mid3(f16vec3,   f16vec3,   f16vec3);"
 1415|     10|            "f16vec4   mid3(f16vec4,   f16vec4,   f16vec4);"
 1416|       |
 1417|     10|            "int16_t   min3(int16_t,   int16_t,   int16_t);"
 1418|     10|            "i16vec2   min3(i16vec2,   i16vec2,   i16vec2);"
 1419|     10|            "i16vec3   min3(i16vec3,   i16vec3,   i16vec3);"
 1420|     10|            "i16vec4   min3(i16vec4,   i16vec4,   i16vec4);"
 1421|       |
 1422|     10|            "int16_t   max3(int16_t,   int16_t,   int16_t);"
 1423|     10|            "i16vec2   max3(i16vec2,   i16vec2,   i16vec2);"
 1424|     10|            "i16vec3   max3(i16vec3,   i16vec3,   i16vec3);"
 1425|     10|            "i16vec4   max3(i16vec4,   i16vec4,   i16vec4);"
 1426|       |
 1427|     10|            "int16_t   mid3(int16_t,   int16_t,   int16_t);"
 1428|     10|            "i16vec2   mid3(i16vec2,   i16vec2,   i16vec2);"
 1429|     10|            "i16vec3   mid3(i16vec3,   i16vec3,   i16vec3);"
 1430|     10|            "i16vec4   mid3(i16vec4,   i16vec4,   i16vec4);"
 1431|       |
 1432|     10|            "uint16_t  min3(uint16_t,  uint16_t,  uint16_t);"
 1433|     10|            "u16vec2   min3(u16vec2,   u16vec2,   u16vec2);"
 1434|     10|            "u16vec3   min3(u16vec3,   u16vec3,   u16vec3);"
 1435|     10|            "u16vec4   min3(u16vec4,   u16vec4,   u16vec4);"
 1436|       |
 1437|     10|            "uint16_t  max3(uint16_t,  uint16_t,  uint16_t);"
 1438|     10|            "u16vec2   max3(u16vec2,   u16vec2,   u16vec2);"
 1439|     10|            "u16vec3   max3(u16vec3,   u16vec3,   u16vec3);"
 1440|     10|            "u16vec4   max3(u16vec4,   u16vec4,   u16vec4);"
 1441|       |
 1442|     10|            "uint16_t  mid3(uint16_t,  uint16_t,  uint16_t);"
 1443|     10|            "u16vec2   mid3(u16vec2,   u16vec2,   u16vec2);"
 1444|     10|            "u16vec3   mid3(u16vec3,   u16vec3,   u16vec3);"
 1445|     10|            "u16vec4   mid3(u16vec4,   u16vec4,   u16vec4);"
 1446|       |
 1447|     10|            "\n"
 1448|     10|        );
 1449|     10|    }
 1450|       |
 1451|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (1451:10): [True: 0, False: 99]
  |  Branch (1451:35): [True: 0, False: 0]
  ------------------
 1452|     99|        (profile != EEsProfile && version >= 430)) {
  ------------------
  |  Branch (1452:10): [True: 99, False: 0]
  |  Branch (1452:35): [True: 10, False: 89]
  ------------------
 1453|     10|        commonBuiltins.append(
 1454|     10|            "uint atomicAdd(coherent volatile nontemporal inout uint, uint, int, int, int);"
 1455|     10|            " int atomicAdd(coherent volatile nontemporal inout  int,  int, int, int, int);"
 1456|       |
 1457|     10|            "uint atomicMin(coherent volatile nontemporal inout uint, uint, int, int, int);"
 1458|     10|            " int atomicMin(coherent volatile nontemporal inout  int,  int, int, int, int);"
 1459|       |
 1460|     10|            "uint atomicMax(coherent volatile nontemporal inout uint, uint, int, int, int);"
 1461|     10|            " int atomicMax(coherent volatile nontemporal inout  int,  int, int, int, int);"
 1462|       |
 1463|     10|            "uint atomicAnd(coherent volatile nontemporal inout uint, uint, int, int, int);"
 1464|     10|            " int atomicAnd(coherent volatile nontemporal inout  int,  int, int, int, int);"
 1465|       |
 1466|     10|            "uint atomicOr (coherent volatile nontemporal inout uint, uint, int, int, int);"
 1467|     10|            " int atomicOr (coherent volatile nontemporal inout  int,  int, int, int, int);"
 1468|       |
 1469|     10|            "uint atomicXor(coherent volatile nontemporal inout uint, uint, int, int, int);"
 1470|     10|            " int atomicXor(coherent volatile nontemporal inout  int,  int, int, int, int);"
 1471|       |
 1472|     10|            "uint atomicExchange(coherent volatile nontemporal inout uint, uint, int, int, int);"
 1473|     10|            " int atomicExchange(coherent volatile nontemporal inout  int,  int, int, int, int);"
 1474|       |
 1475|     10|            "uint atomicCompSwap(coherent volatile nontemporal inout uint, uint, uint, int, int, int, int, int);"
 1476|     10|            " int atomicCompSwap(coherent volatile nontemporal inout  int,  int,  int, int, int, int, int, int);"
 1477|       |
 1478|     10|            "uint atomicLoad(coherent volatile nontemporal in uint, int, int, int);"
 1479|     10|            " int atomicLoad(coherent volatile nontemporal in  int, int, int, int);"
 1480|       |
 1481|     10|            "void atomicStore(coherent volatile nontemporal out uint, uint, int, int, int);"
 1482|     10|            "void atomicStore(coherent volatile nontemporal out  int,  int, int, int, int);"
 1483|       |
 1484|     10|            "\n");
 1485|     10|    }
 1486|       |
 1487|     99|    if (profile != EEsProfile && version >= 440) {
  ------------------
  |  Branch (1487:9): [True: 99, False: 0]
  |  Branch (1487:34): [True: 10, False: 89]
  ------------------
 1488|     10|        commonBuiltins.append(
 1489|     10|            "uint64_t atomicMin(coherent volatile nontemporal inout uint64_t, uint64_t);"
 1490|     10|            " int64_t atomicMin(coherent volatile nontemporal inout  int64_t,  int64_t);"
 1491|     10|            "uint64_t atomicMin(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1492|     10|            " int64_t atomicMin(coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1493|     10|            "float16_t atomicMin(coherent volatile nontemporal inout float16_t, float16_t);"
 1494|     10|            "float16_t atomicMin(coherent volatile nontemporal inout float16_t, float16_t, int, int, int);"
 1495|     10|            "   float atomicMin(coherent volatile nontemporal inout float, float);"
 1496|     10|            "   float atomicMin(coherent volatile nontemporal inout float, float, int, int, int);"
 1497|     10|            "  double atomicMin(coherent volatile nontemporal inout double, double);"
 1498|     10|            "  double atomicMin(coherent volatile nontemporal inout double, double, int, int, int);"
 1499|       |
 1500|     10|            "uint64_t atomicMax(coherent volatile nontemporal inout uint64_t, uint64_t);"
 1501|     10|            " int64_t atomicMax(coherent volatile nontemporal inout  int64_t,  int64_t);"
 1502|     10|            "uint64_t atomicMax(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1503|     10|            " int64_t atomicMax(coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1504|     10|            "float16_t atomicMax(coherent volatile nontemporal inout float16_t, float16_t);"
 1505|     10|            "float16_t atomicMax(coherent volatile nontemporal inout float16_t, float16_t, int, int, int);"
 1506|     10|            "   float atomicMax(coherent volatile nontemporal inout float, float);"
 1507|     10|            "   float atomicMax(coherent volatile nontemporal inout float, float, int, int, int);"
 1508|     10|            "  double atomicMax(coherent volatile nontemporal inout double, double);"
 1509|     10|            "  double atomicMax(coherent volatile nontemporal inout double, double, int, int, int);"
 1510|       |
 1511|     10|            "uint64_t atomicAnd(coherent volatile nontemporal inout uint64_t, uint64_t);"
 1512|     10|            " int64_t atomicAnd(coherent volatile nontemporal inout  int64_t,  int64_t);"
 1513|     10|            "uint64_t atomicAnd(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1514|     10|            " int64_t atomicAnd(coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1515|       |
 1516|     10|            "uint64_t atomicOr (coherent volatile nontemporal inout uint64_t, uint64_t);"
 1517|     10|            " int64_t atomicOr (coherent volatile nontemporal inout  int64_t,  int64_t);"
 1518|     10|            "uint64_t atomicOr (coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1519|     10|            " int64_t atomicOr (coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1520|       |
 1521|     10|            "uint64_t atomicXor(coherent volatile nontemporal inout uint64_t, uint64_t);"
 1522|     10|            " int64_t atomicXor(coherent volatile nontemporal inout  int64_t,  int64_t);"
 1523|     10|            "uint64_t atomicXor(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1524|     10|            " int64_t atomicXor(coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1525|       |
 1526|     10|            "uint64_t atomicAdd(coherent volatile nontemporal inout uint64_t, uint64_t);"
 1527|     10|            " int64_t atomicAdd(coherent volatile nontemporal inout  int64_t,  int64_t);"
 1528|     10|            "uint64_t atomicAdd(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1529|     10|            " int64_t atomicAdd(coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1530|     10|            "float16_t atomicAdd(coherent volatile nontemporal inout float16_t, float16_t);"
 1531|     10|            "float16_t atomicAdd(coherent volatile nontemporal inout float16_t, float16_t, int, int, int);"
 1532|     10|            "   float atomicAdd(coherent volatile nontemporal inout float, float);"
 1533|     10|            "   float atomicAdd(coherent volatile nontemporal inout float, float, int, int, int);"
 1534|     10|            "  double atomicAdd(coherent volatile nontemporal inout double, double);"
 1535|     10|            "  double atomicAdd(coherent volatile nontemporal inout double, double, int, int, int);"
 1536|       |
 1537|     10|            "uint64_t atomicExchange(coherent volatile nontemporal inout uint64_t, uint64_t);"
 1538|     10|            " int64_t atomicExchange(coherent volatile nontemporal inout  int64_t,  int64_t);"
 1539|     10|            "uint64_t atomicExchange(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);"
 1540|     10|            " int64_t atomicExchange(coherent volatile nontemporal inout  int64_t,  int64_t, int, int, int);"
 1541|     10|            "float16_t atomicExchange(coherent volatile nontemporal inout float16_t, float16_t);"
 1542|     10|            "float16_t atomicExchange(coherent volatile nontemporal inout float16_t, float16_t, int, int, int);"
 1543|     10|            "   float atomicExchange(coherent volatile nontemporal inout float, float);"
 1544|     10|            "   float atomicExchange(coherent volatile nontemporal inout float, float, int, int, int);"
 1545|     10|            "  double atomicExchange(coherent volatile nontemporal inout double, double);"
 1546|     10|            "  double atomicExchange(coherent volatile nontemporal inout double, double, int, int, int);"
 1547|       |
 1548|     10|            "uint64_t atomicCompSwap(coherent volatile nontemporal inout uint64_t, uint64_t, uint64_t);"
 1549|     10|            " int64_t atomicCompSwap(coherent volatile nontemporal inout  int64_t,  int64_t,  int64_t);"
 1550|     10|            "uint64_t atomicCompSwap(coherent volatile nontemporal inout uint64_t, uint64_t, uint64_t, int, int, int, int, int);"
 1551|     10|            " int64_t atomicCompSwap(coherent volatile nontemporal inout  int64_t,  int64_t,  int64_t, int, int, int, int, int);"
 1552|       |
 1553|     10|            "uint64_t atomicLoad(coherent volatile nontemporal in uint64_t, int, int, int);"
 1554|     10|            " int64_t atomicLoad(coherent volatile nontemporal in  int64_t, int, int, int);"
 1555|     10|            "float16_t atomicLoad(coherent volatile nontemporal in float16_t, int, int, int);"
 1556|     10|            "   float atomicLoad(coherent volatile nontemporal in float, int, int, int);"
 1557|     10|            "  double atomicLoad(coherent volatile nontemporal in double, int, int, int);"
 1558|       |
 1559|     10|            "void atomicStore(coherent volatile nontemporal out uint64_t, uint64_t, int, int, int);"
 1560|     10|            "void atomicStore(coherent volatile nontemporal out  int64_t,  int64_t, int, int, int);"
 1561|     10|            "void atomicStore(coherent volatile nontemporal out float16_t, float16_t, int, int, int);"
 1562|     10|            "void atomicStore(coherent volatile nontemporal out float, float, int, int, int);"
 1563|     10|            "void atomicStore(coherent volatile nontemporal out double, double, int, int, int);"
 1564|     10|            "\n");
 1565|     10|    }
 1566|       |
 1567|       |    // NV_shader_atomic_fp16_vector
 1568|     99|    if (profile != EEsProfile && version >= 430) {
  ------------------
  |  Branch (1568:9): [True: 99, False: 0]
  |  Branch (1568:34): [True: 10, False: 89]
  ------------------
 1569|     10|        commonBuiltins.append(
 1570|     10|            "f16vec2 atomicAdd(coherent volatile nontemporal inout f16vec2, f16vec2);"
 1571|     10|            "f16vec4 atomicAdd(coherent volatile nontemporal inout f16vec4, f16vec4);"
 1572|     10|            "f16vec2 atomicMin(coherent volatile nontemporal inout f16vec2, f16vec2);"
 1573|     10|            "f16vec4 atomicMin(coherent volatile nontemporal inout f16vec4, f16vec4);"
 1574|     10|            "f16vec2 atomicMax(coherent volatile nontemporal inout f16vec2, f16vec2);"
 1575|     10|            "f16vec4 atomicMax(coherent volatile nontemporal inout f16vec4, f16vec4);"
 1576|     10|            "f16vec2 atomicExchange(coherent volatile nontemporal inout f16vec2, f16vec2);"
 1577|     10|            "f16vec4 atomicExchange(coherent volatile nontemporal inout f16vec4, f16vec4);"
 1578|     10|            "\n");
 1579|     10|    }
 1580|       |
 1581|     99|    if ((profile == EEsProfile && version >= 300) ||
  ------------------
  |  Branch (1581:10): [True: 0, False: 99]
  |  Branch (1581:35): [True: 0, False: 0]
  ------------------
 1582|     99|        (profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding
  ------------------
  |  Branch (1582:10): [True: 99, False: 0]
  |  Branch (1582:35): [True: 13, False: 86]
  ------------------
 1583|     13|        commonBuiltins.append(
 1584|     13|            "int   floatBitsToInt(highp float value);"
 1585|     13|            "ivec2 floatBitsToInt(highp vec2  value);"
 1586|     13|            "ivec3 floatBitsToInt(highp vec3  value);"
 1587|     13|            "ivec4 floatBitsToInt(highp vec4  value);"
 1588|       |
 1589|     13|            "uint  floatBitsToUint(highp float value);"
 1590|     13|            "uvec2 floatBitsToUint(highp vec2  value);"
 1591|     13|            "uvec3 floatBitsToUint(highp vec3  value);"
 1592|     13|            "uvec4 floatBitsToUint(highp vec4  value);"
 1593|       |
 1594|     13|            "float intBitsToFloat(highp int   value);"
 1595|     13|            "vec2  intBitsToFloat(highp ivec2 value);"
 1596|     13|            "vec3  intBitsToFloat(highp ivec3 value);"
 1597|     13|            "vec4  intBitsToFloat(highp ivec4 value);"
 1598|       |
 1599|     13|            "float uintBitsToFloat(highp uint  value);"
 1600|     13|            "vec2  uintBitsToFloat(highp uvec2 value);"
 1601|     13|            "vec3  uintBitsToFloat(highp uvec3 value);"
 1602|     13|            "vec4  uintBitsToFloat(highp uvec4 value);"
 1603|       |
 1604|     13|            "\n");
 1605|     13|    }
 1606|       |
 1607|     99|    if ((profile != EEsProfile && version >= 150) || // GL_NV_gpu_shader5
  ------------------
  |  Branch (1607:10): [True: 99, False: 0]
  |  Branch (1607:35): [True: 13, False: 86]
  ------------------
 1608|     86|        (profile == EEsProfile && version >= 310)) {    // GL_OES_gpu_shader5
  ------------------
  |  Branch (1608:10): [True: 0, False: 86]
  |  Branch (1608:35): [True: 0, False: 0]
  ------------------
 1609|       |
 1610|     13|        commonBuiltins.append(
 1611|     13|            "float  fma(float,  float,  float );"
 1612|     13|            "vec2   fma(vec2,   vec2,   vec2  );"
 1613|     13|            "vec3   fma(vec3,   vec3,   vec3  );"
 1614|     13|            "vec4   fma(vec4,   vec4,   vec4  );"
 1615|     13|            "\n");
 1616|     13|    }
 1617|       |
 1618|     99|    if (profile != EEsProfile && version >= 150) {  // ARB_gpu_shader_fp64
  ------------------
  |  Branch (1618:9): [True: 99, False: 0]
  |  Branch (1618:34): [True: 13, False: 86]
  ------------------
 1619|     13|            commonBuiltins.append(
 1620|     13|                "double fma(double, double, double);"
 1621|     13|                "dvec2  fma(dvec2,  dvec2,  dvec2 );"
 1622|     13|                "dvec3  fma(dvec3,  dvec3,  dvec3 );"
 1623|     13|                "dvec4  fma(dvec4,  dvec4,  dvec4 );"
 1624|     13|                "\n");
 1625|     13|    }
 1626|       |
 1627|     99|    if (profile == EEsProfile && version >= 310) {  // ARB_gpu_shader_fp64
  ------------------
  |  Branch (1627:9): [True: 0, False: 99]
  |  Branch (1627:34): [True: 0, False: 0]
  ------------------
 1628|      0|            commonBuiltins.append(
 1629|      0|                "float64_t fma(float64_t, float64_t, float64_t);"
 1630|      0|                "f64vec2  fma(f64vec2,  f64vec2,  f64vec2 );"
 1631|      0|                "f64vec3  fma(f64vec3,  f64vec3,  f64vec3 );"
 1632|      0|                "f64vec4  fma(f64vec4,  f64vec4,  f64vec4 );"
 1633|      0|                "\n");
 1634|      0|    }
 1635|       |
 1636|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (1636:10): [True: 0, False: 99]
  |  Branch (1636:35): [True: 0, False: 0]
  ------------------
 1637|     99|        (profile != EEsProfile && version >= 150)) { // GL_NV_gpu_shader5
  ------------------
  |  Branch (1637:10): [True: 99, False: 0]
  |  Branch (1637:35): [True: 13, False: 86]
  ------------------
 1638|     13|        commonBuiltins.append(
 1639|     13|            "float frexp(highp float, out highp int);"
 1640|     13|            "vec2  frexp(highp vec2,  out highp ivec2);"
 1641|     13|            "vec3  frexp(highp vec3,  out highp ivec3);"
 1642|     13|            "vec4  frexp(highp vec4,  out highp ivec4);"
 1643|       |
 1644|     13|            "float ldexp(highp float, highp int);"
 1645|     13|            "vec2  ldexp(highp vec2,  highp ivec2);"
 1646|     13|            "vec3  ldexp(highp vec3,  highp ivec3);"
 1647|     13|            "vec4  ldexp(highp vec4,  highp ivec4);"
 1648|       |
 1649|     13|            "\n");
 1650|     13|    }
 1651|       |
 1652|     99|    if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64
  ------------------
  |  Branch (1652:9): [True: 99, False: 0]
  |  Branch (1652:34): [True: 13, False: 86]
  ------------------
 1653|     13|        commonBuiltins.append(
 1654|     13|            "double frexp(double, out int);"
 1655|     13|            "dvec2  frexp( dvec2, out ivec2);"
 1656|     13|            "dvec3  frexp( dvec3, out ivec3);"
 1657|     13|            "dvec4  frexp( dvec4, out ivec4);"
 1658|       |
 1659|     13|            "double ldexp(double, int);"
 1660|     13|            "dvec2  ldexp( dvec2, ivec2);"
 1661|     13|            "dvec3  ldexp( dvec3, ivec3);"
 1662|     13|            "dvec4  ldexp( dvec4, ivec4);"
 1663|       |
 1664|     13|            "double packDouble2x32(uvec2);"
 1665|     13|            "uvec2 unpackDouble2x32(double);"
 1666|       |
 1667|     13|            "\n");
 1668|     13|    }
 1669|       |
 1670|     99|    if (profile == EEsProfile && version >= 310) { // ARB_gpu_shader_fp64
  ------------------
  |  Branch (1670:9): [True: 0, False: 99]
  |  Branch (1670:34): [True: 0, False: 0]
  ------------------
 1671|      0|        commonBuiltins.append(
 1672|      0|            "float64_t frexp(float64_t, out int);"
 1673|      0|            "f64vec2  frexp( f64vec2, out ivec2);"
 1674|      0|            "f64vec3  frexp( f64vec3, out ivec3);"
 1675|      0|            "f64vec4  frexp( f64vec4, out ivec4);"
 1676|       |
 1677|      0|            "float64_t ldexp(float64_t, int);"
 1678|      0|            "f64vec2  ldexp( f64vec2, ivec2);"
 1679|      0|            "f64vec3  ldexp( f64vec3, ivec3);"
 1680|      0|            "f64vec4  ldexp( f64vec4, ivec4);"
 1681|       |
 1682|      0|            "\n");
 1683|      0|    }
 1684|       |
 1685|     99|    if ((profile == EEsProfile && version >= 300) ||
  ------------------
  |  Branch (1685:10): [True: 0, False: 99]
  |  Branch (1685:35): [True: 0, False: 0]
  ------------------
 1686|     99|        (profile != EEsProfile && version >= 150)) {
  ------------------
  |  Branch (1686:10): [True: 99, False: 0]
  |  Branch (1686:35): [True: 13, False: 86]
  ------------------
 1687|     13|        commonBuiltins.append(
 1688|     13|            "highp uint packUnorm2x16(vec2);"
 1689|     13|                  "vec2 unpackUnorm2x16(highp uint);"
 1690|     13|            "\n");
 1691|     13|    }
 1692|       |
 1693|     99|    if ((profile == EEsProfile && version >= 300) ||
  ------------------
  |  Branch (1693:10): [True: 0, False: 99]
  |  Branch (1693:35): [True: 0, False: 0]
  ------------------
 1694|     99|        (profile != EEsProfile && version >= 150)) {
  ------------------
  |  Branch (1694:10): [True: 99, False: 0]
  |  Branch (1694:35): [True: 13, False: 86]
  ------------------
 1695|     13|        commonBuiltins.append(
 1696|     13|            "highp uint packSnorm2x16(vec2);"
 1697|     13|            "      vec2 unpackSnorm2x16(highp uint);"
 1698|     13|            "highp uint packHalf2x16(vec2);"
 1699|     13|            "\n");
 1700|     13|    }
 1701|       |
 1702|     99|    if (profile == EEsProfile && version >= 300) {
  ------------------
  |  Branch (1702:9): [True: 0, False: 99]
  |  Branch (1702:34): [True: 0, False: 0]
  ------------------
 1703|      0|        commonBuiltins.append(
 1704|      0|            "mediump vec2 unpackHalf2x16(highp uint);"
 1705|      0|            "\n");
 1706|     99|    } else if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (1706:16): [True: 99, False: 0]
  |  Branch (1706:41): [True: 13, False: 86]
  ------------------
 1707|     13|        commonBuiltins.append(
 1708|     13|            "        vec2 unpackHalf2x16(highp uint);"
 1709|     13|            "\n");
 1710|     13|    }
 1711|       |
 1712|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (1712:10): [True: 0, False: 99]
  |  Branch (1712:35): [True: 0, False: 0]
  ------------------
 1713|     99|        (profile != EEsProfile && version >= 150)) {
  ------------------
  |  Branch (1713:10): [True: 99, False: 0]
  |  Branch (1713:35): [True: 13, False: 86]
  ------------------
 1714|     13|        commonBuiltins.append(
 1715|     13|            "highp uint packSnorm4x8(vec4);"
 1716|     13|            "highp uint packUnorm4x8(vec4);"
 1717|     13|            "\n");
 1718|     13|    }
 1719|       |
 1720|     99|    if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (1720:9): [True: 0, False: 99]
  |  Branch (1720:34): [True: 0, False: 0]
  ------------------
 1721|      0|        commonBuiltins.append(
 1722|      0|            "mediump vec4 unpackSnorm4x8(highp uint);"
 1723|      0|            "mediump vec4 unpackUnorm4x8(highp uint);"
 1724|      0|            "\n");
 1725|     99|    } else if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (1725:16): [True: 99, False: 0]
  |  Branch (1725:41): [True: 13, False: 86]
  ------------------
 1726|     13|        commonBuiltins.append(
 1727|     13|                    "vec4 unpackSnorm4x8(highp uint);"
 1728|     13|                    "vec4 unpackUnorm4x8(highp uint);"
 1729|     13|            "\n");
 1730|     13|    }
 1731|       |
 1732|       |    //
 1733|       |    // Matrix Functions.
 1734|       |    //
 1735|     99|    commonBuiltins.append(
 1736|     99|        "mat2 matrixCompMult(mat2 x, mat2 y);"
 1737|     99|        "mat3 matrixCompMult(mat3 x, mat3 y);"
 1738|     99|        "mat4 matrixCompMult(mat4 x, mat4 y);"
 1739|       |
 1740|     99|        "\n");
 1741|       |
 1742|       |    // 120 is correct for both ES and desktop
 1743|     99|    if (version >= 120) {
  ------------------
  |  Branch (1743:9): [True: 99, False: 0]
  ------------------
 1744|     99|        commonBuiltins.append(
 1745|     99|            "mat2   outerProduct(vec2 c, vec2 r);"
 1746|     99|            "mat3   outerProduct(vec3 c, vec3 r);"
 1747|     99|            "mat4   outerProduct(vec4 c, vec4 r);"
 1748|     99|            "mat2x3 outerProduct(vec3 c, vec2 r);"
 1749|     99|            "mat3x2 outerProduct(vec2 c, vec3 r);"
 1750|     99|            "mat2x4 outerProduct(vec4 c, vec2 r);"
 1751|     99|            "mat4x2 outerProduct(vec2 c, vec4 r);"
 1752|     99|            "mat3x4 outerProduct(vec4 c, vec3 r);"
 1753|     99|            "mat4x3 outerProduct(vec3 c, vec4 r);"
 1754|       |
 1755|     99|            "mat2   transpose(mat2   m);"
 1756|     99|            "mat3   transpose(mat3   m);"
 1757|     99|            "mat4   transpose(mat4   m);"
 1758|     99|            "mat2x3 transpose(mat3x2 m);"
 1759|     99|            "mat3x2 transpose(mat2x3 m);"
 1760|     99|            "mat2x4 transpose(mat4x2 m);"
 1761|     99|            "mat4x2 transpose(mat2x4 m);"
 1762|     99|            "mat3x4 transpose(mat4x3 m);"
 1763|     99|            "mat4x3 transpose(mat3x4 m);"
 1764|       |
 1765|     99|            "mat2x3 matrixCompMult(mat2x3, mat2x3);"
 1766|     99|            "mat2x4 matrixCompMult(mat2x4, mat2x4);"
 1767|     99|            "mat3x2 matrixCompMult(mat3x2, mat3x2);"
 1768|     99|            "mat3x4 matrixCompMult(mat3x4, mat3x4);"
 1769|     99|            "mat4x2 matrixCompMult(mat4x2, mat4x2);"
 1770|     99|            "mat4x3 matrixCompMult(mat4x3, mat4x3);"
 1771|       |
 1772|     99|            "\n");
 1773|       |
 1774|       |        // 150 is correct for both ES and desktop
 1775|     99|        if (version >= 150) {
  ------------------
  |  Branch (1775:13): [True: 13, False: 86]
  ------------------
 1776|     13|            commonBuiltins.append(
 1777|     13|                "float determinant(mat2 m);"
 1778|     13|                "float determinant(mat3 m);"
 1779|     13|                "float determinant(mat4 m);"
 1780|       |
 1781|     13|                "mat2 inverse(mat2 m);"
 1782|     13|                "mat3 inverse(mat3 m);"
 1783|     13|                "mat4 inverse(mat4 m);"
 1784|       |
 1785|     13|                "\n");
 1786|     13|        }
 1787|     99|    }
 1788|       |
 1789|       |    //
 1790|       |    // Original-style texture functions existing in all stages.
 1791|       |    // (Per-stage functions below.)
 1792|       |    //
 1793|     99|    if ((profile == EEsProfile && version == 100) ||
  ------------------
  |  Branch (1793:10): [True: 0, False: 99]
  |  Branch (1793:35): [True: 0, False: 0]
  ------------------
 1794|     99|         profile == ECompatibilityProfile ||
  ------------------
  |  Branch (1794:10): [True: 0, False: 99]
  ------------------
 1795|     99|        (profile == ECoreProfile && version < 420) ||
  ------------------
  |  Branch (1795:10): [True: 8, False: 91]
  |  Branch (1795:37): [True: 3, False: 5]
  ------------------
 1796|     96|         profile == ENoProfile) {
  ------------------
  |  Branch (1796:10): [True: 91, False: 5]
  ------------------
 1797|     94|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (1797:13): [True: 0, False: 94]
  ------------------
 1798|      0|            commonBuiltins.append(
 1799|      0|                "vec4 texture2D(sampler2D, vec2);"
 1800|       |
 1801|      0|                "vec4 texture2DProj(sampler2D, vec3);"
 1802|      0|                "vec4 texture2DProj(sampler2D, vec4);"
 1803|       |
 1804|      0|                "vec4 texture3D(sampler3D, vec3);"     // OES_texture_3D, but caught by keyword check
 1805|      0|                "vec4 texture3DProj(sampler3D, vec4);" // OES_texture_3D, but caught by keyword check
 1806|       |
 1807|      0|                "vec4 textureCube(samplerCube, vec3);"
 1808|       |
 1809|      0|                "\n");
 1810|      0|        }
 1811|     94|    }
 1812|       |
 1813|     99|    if ( profile == ECompatibilityProfile ||
  ------------------
  |  Branch (1813:10): [True: 0, False: 99]
  ------------------
 1814|     99|        (profile == ECoreProfile && version < 420) ||
  ------------------
  |  Branch (1814:10): [True: 8, False: 91]
  |  Branch (1814:37): [True: 3, False: 5]
  ------------------
 1815|     96|         profile == ENoProfile) {
  ------------------
  |  Branch (1815:10): [True: 91, False: 5]
  ------------------
 1816|     94|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (1816:13): [True: 0, False: 94]
  ------------------
 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|     94|    }
 1847|       |
 1848|     99|    if (profile == EEsProfile) {
  ------------------
  |  Branch (1848:9): [True: 0, False: 99]
  ------------------
 1849|      0|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (1849:13): [True: 0, False: 0]
  ------------------
 1850|      0|            if (version < 300) {
  ------------------
  |  Branch (1850:17): [True: 0, False: 0]
  ------------------
 1851|      0|                commonBuiltins.append(
 1852|      0|                    "vec4 texture2D(samplerExternalOES, vec2 coord);" // GL_OES_EGL_image_external
 1853|      0|                    "vec4 texture2DProj(samplerExternalOES, vec3);"   // GL_OES_EGL_image_external
 1854|      0|                    "vec4 texture2DProj(samplerExternalOES, vec4);"   // GL_OES_EGL_image_external
 1855|      0|                "\n");
 1856|      0|            } 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|      0|            commonBuiltins.append(
 1869|      0|                "highp ivec2 textureSize(__samplerExternal2DY2YEXT, int lod);" // GL_EXT_YUV_target
 1870|      0|                "vec4 texture(__samplerExternal2DY2YEXT, vec2);"               // GL_EXT_YUV_target
 1871|      0|                "vec4 texture(__samplerExternal2DY2YEXT, vec2, float bias);"   // GL_EXT_YUV_target
 1872|      0|                "vec4 textureProj(__samplerExternal2DY2YEXT, vec3);"           // GL_EXT_YUV_target
 1873|      0|                "vec4 textureProj(__samplerExternal2DY2YEXT, vec3, float bias);" // GL_EXT_YUV_target
 1874|      0|                "vec4 textureProj(__samplerExternal2DY2YEXT, vec4);"           // GL_EXT_YUV_target
 1875|      0|                "vec4 textureProj(__samplerExternal2DY2YEXT, vec4, float bias);" // GL_EXT_YUV_target
 1876|      0|                "vec4 texelFetch(__samplerExternal2DY2YEXT sampler, ivec2, int lod);" // GL_EXT_YUV_target
 1877|      0|                "\n");
 1878|      0|            commonBuiltins.append(
 1879|      0|                "vec4 texture2DGradEXT(sampler2D, vec2, vec2, vec2);"      // GL_EXT_shader_texture_lod
 1880|      0|                "vec4 texture2DProjGradEXT(sampler2D, vec3, vec2, vec2);"  // GL_EXT_shader_texture_lod
 1881|      0|                "vec4 texture2DProjGradEXT(sampler2D, vec4, vec2, vec2);"  // GL_EXT_shader_texture_lod
 1882|      0|                "vec4 textureCubeGradEXT(samplerCube, vec3, vec3, vec3);"  // GL_EXT_shader_texture_lod
 1883|       |
 1884|      0|                "float shadow2DEXT(sampler2DShadow, vec3);"     // GL_EXT_shadow_samplers
 1885|      0|                "float shadow2DProjEXT(sampler2DShadow, vec4);" // GL_EXT_shadow_samplers
 1886|       |
 1887|      0|                "\n");
 1888|      0|        }
 1889|      0|    }
 1890|       |
 1891|       |    //
 1892|       |    // Noise functions.
 1893|       |    //
 1894|     99|    if (spvVersion.spv == 0 && profile != EEsProfile) {
  ------------------
  |  Branch (1894:9): [True: 0, False: 99]
  |  Branch (1894:32): [True: 0, False: 0]
  ------------------
 1895|      0|        commonBuiltins.append(
 1896|      0|            "float noise1(float x);"
 1897|      0|            "float noise1(vec2  x);"
 1898|      0|            "float noise1(vec3  x);"
 1899|      0|            "float noise1(vec4  x);"
 1900|       |
 1901|      0|            "vec2 noise2(float x);"
 1902|      0|            "vec2 noise2(vec2  x);"
 1903|      0|            "vec2 noise2(vec3  x);"
 1904|      0|            "vec2 noise2(vec4  x);"
 1905|       |
 1906|      0|            "vec3 noise3(float x);"
 1907|      0|            "vec3 noise3(vec2  x);"
 1908|      0|            "vec3 noise3(vec3  x);"
 1909|      0|            "vec3 noise3(vec4  x);"
 1910|       |
 1911|      0|            "vec4 noise4(float x);"
 1912|      0|            "vec4 noise4(vec2  x);"
 1913|      0|            "vec4 noise4(vec3  x);"
 1914|      0|            "vec4 noise4(vec4  x);"
 1915|       |
 1916|      0|            "\n");
 1917|      0|    }
 1918|       |
 1919|     99|    if (spvVersion.vulkan == 0) {
  ------------------
  |  Branch (1919:9): [True: 0, False: 99]
  ------------------
 1920|       |        //
 1921|       |        // Atomic counter functions.
 1922|       |        //
 1923|      0|        if ((profile != EEsProfile && version >= 300) ||
  ------------------
  |  Branch (1923:14): [True: 0, False: 0]
  |  Branch (1923:39): [True: 0, False: 0]
  ------------------
 1924|      0|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (1924:14): [True: 0, False: 0]
  |  Branch (1924:39): [True: 0, False: 0]
  ------------------
 1925|      0|            commonBuiltins.append(
 1926|      0|                "uint atomicCounterIncrement(atomic_uint);"
 1927|      0|                "uint atomicCounterDecrement(atomic_uint);"
 1928|      0|                "uint atomicCounter(atomic_uint);"
 1929|       |
 1930|      0|                "\n");
 1931|      0|        }
 1932|      0|        if (profile != EEsProfile && version == 450) {
  ------------------
  |  Branch (1932:13): [True: 0, False: 0]
  |  Branch (1932:38): [True: 0, False: 0]
  ------------------
 1933|      0|            commonBuiltins.append(
 1934|      0|                "uint atomicCounterAddARB(atomic_uint, uint);"
 1935|      0|                "uint atomicCounterSubtractARB(atomic_uint, uint);"
 1936|      0|                "uint atomicCounterMinARB(atomic_uint, uint);"
 1937|      0|                "uint atomicCounterMaxARB(atomic_uint, uint);"
 1938|      0|                "uint atomicCounterAndARB(atomic_uint, uint);"
 1939|      0|                "uint atomicCounterOrARB(atomic_uint, uint);"
 1940|      0|                "uint atomicCounterXorARB(atomic_uint, uint);"
 1941|      0|                "uint atomicCounterExchangeARB(atomic_uint, uint);"
 1942|      0|                "uint atomicCounterCompSwapARB(atomic_uint, uint, uint);"
 1943|       |
 1944|      0|                "\n");
 1945|      0|        }
 1946|       |
 1947|       |
 1948|      0|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (1948:13): [True: 0, False: 0]
  |  Branch (1948:38): [True: 0, False: 0]
  ------------------
 1949|      0|            commonBuiltins.append(
 1950|      0|                "uint atomicCounterAdd(atomic_uint, uint);"
 1951|      0|                "uint atomicCounterSubtract(atomic_uint, uint);"
 1952|      0|                "uint atomicCounterMin(atomic_uint, uint);"
 1953|      0|                "uint atomicCounterMax(atomic_uint, uint);"
 1954|      0|                "uint atomicCounterAnd(atomic_uint, uint);"
 1955|      0|                "uint atomicCounterOr(atomic_uint, uint);"
 1956|      0|                "uint atomicCounterXor(atomic_uint, uint);"
 1957|      0|                "uint atomicCounterExchange(atomic_uint, uint);"
 1958|      0|                "uint atomicCounterCompSwap(atomic_uint, uint, uint);"
 1959|       |
 1960|      0|                "\n");
 1961|      0|        }
 1962|      0|    }
 1963|     99|    else if (spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (1963:14): [True: 0, False: 99]
  ------------------
 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|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (1995:10): [True: 0, False: 99]
  |  Branch (1995:35): [True: 0, False: 0]
  ------------------
 1996|     99|        (profile != EEsProfile && version >= 150)) { // ARB_gpu_shader5/NV_gpu_shader5
  ------------------
  |  Branch (1996:10): [True: 99, False: 0]
  |  Branch (1996:35): [True: 13, False: 86]
  ------------------
 1997|     13|        commonBuiltins.append(
 1998|     13|            "  int bitfieldExtract(  int, int, int);"
 1999|     13|            "ivec2 bitfieldExtract(ivec2, int, int);"
 2000|     13|            "ivec3 bitfieldExtract(ivec3, int, int);"
 2001|     13|            "ivec4 bitfieldExtract(ivec4, int, int);"
 2002|       |
 2003|     13|            " uint bitfieldExtract( uint, int, int);"
 2004|     13|            "uvec2 bitfieldExtract(uvec2, int, int);"
 2005|     13|            "uvec3 bitfieldExtract(uvec3, int, int);"
 2006|     13|            "uvec4 bitfieldExtract(uvec4, int, int);"
 2007|       |
 2008|     13|            "  int bitfieldInsert(  int base,   int, int, int);"
 2009|     13|            "ivec2 bitfieldInsert(ivec2 base, ivec2, int, int);"
 2010|     13|            "ivec3 bitfieldInsert(ivec3 base, ivec3, int, int);"
 2011|     13|            "ivec4 bitfieldInsert(ivec4 base, ivec4, int, int);"
 2012|       |
 2013|     13|            " uint bitfieldInsert( uint base,  uint, int, int);"
 2014|     13|            "uvec2 bitfieldInsert(uvec2 base, uvec2, int, int);"
 2015|     13|            "uvec3 bitfieldInsert(uvec3 base, uvec3, int, int);"
 2016|     13|            "uvec4 bitfieldInsert(uvec4 base, uvec4, int, int);"
 2017|       |
 2018|     13|            "\n");
 2019|     13|    }
 2020|       |
 2021|     99|    if (profile != EEsProfile && version >= 150) { //GL_ARB_gpu_shader5/GL_NV_gpu_shader5
  ------------------
  |  Branch (2021:9): [True: 99, False: 0]
  |  Branch (2021:34): [True: 13, False: 86]
  ------------------
 2022|     13|        commonBuiltins.append(
 2023|     13|            "  int findLSB(  int);"
 2024|     13|            "ivec2 findLSB(ivec2);"
 2025|     13|            "ivec3 findLSB(ivec3);"
 2026|     13|            "ivec4 findLSB(ivec4);"
 2027|       |
 2028|     13|            "  int findLSB( uint);"
 2029|     13|            "ivec2 findLSB(uvec2);"
 2030|     13|            "ivec3 findLSB(uvec3);"
 2031|     13|            "ivec4 findLSB(uvec4);"
 2032|       |
 2033|     13|            "\n");
 2034|     86|    } else if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (2034:16): [True: 0, False: 86]
  |  Branch (2034:41): [True: 0, False: 0]
  ------------------
 2035|      0|        commonBuiltins.append(
 2036|      0|            "lowp   int findLSB(  int);"
 2037|      0|            "lowp ivec2 findLSB(ivec2);"
 2038|      0|            "lowp ivec3 findLSB(ivec3);"
 2039|      0|            "lowp ivec4 findLSB(ivec4);"
 2040|       |
 2041|      0|            "lowp   int findLSB( uint);"
 2042|      0|            "lowp ivec2 findLSB(uvec2);"
 2043|      0|            "lowp ivec3 findLSB(uvec3);"
 2044|      0|            "lowp ivec4 findLSB(uvec4);"
 2045|       |
 2046|      0|            "\n");
 2047|      0|    }
 2048|       |
 2049|     99|    if (profile != EEsProfile && version >= 150) { //GL_ARB_gpu_shader5/GL_NV_gpu_shader5
  ------------------
  |  Branch (2049:9): [True: 99, False: 0]
  |  Branch (2049:34): [True: 13, False: 86]
  ------------------
 2050|     13|        commonBuiltins.append(
 2051|     13|            "  int bitCount(  int);"
 2052|     13|            "ivec2 bitCount(ivec2);"
 2053|     13|            "ivec3 bitCount(ivec3);"
 2054|     13|            "ivec4 bitCount(ivec4);"
 2055|       |
 2056|     13|            "  int bitCount( uint);"
 2057|     13|            "ivec2 bitCount(uvec2);"
 2058|     13|            "ivec3 bitCount(uvec3);"
 2059|     13|            "ivec4 bitCount(uvec4);"
 2060|       |
 2061|     13|            "  int findMSB(highp   int);"
 2062|     13|            "ivec2 findMSB(highp ivec2);"
 2063|     13|            "ivec3 findMSB(highp ivec3);"
 2064|     13|            "ivec4 findMSB(highp ivec4);"
 2065|       |
 2066|     13|            "  int findMSB(highp  uint);"
 2067|     13|            "ivec2 findMSB(highp uvec2);"
 2068|     13|            "ivec3 findMSB(highp uvec3);"
 2069|     13|            "ivec4 findMSB(highp uvec4);"
 2070|     13|            "\n");
 2071|     13|    }
 2072|       |
 2073|     99|    if (profile != EEsProfile && version >= 150 && version < 450) { //GL_NV_gpu_shader5
  ------------------
  |  Branch (2073:9): [True: 99, False: 0]
  |  Branch (2073:34): [True: 13, False: 86]
  |  Branch (2073:52): [True: 3, False: 10]
  ------------------
 2074|      3|        commonBuiltins.append(
 2075|      3|            "int64_t  packInt2x32(ivec2);"
 2076|      3|            "uint64_t packUint2x32(uvec2);"
 2077|      3|            "ivec2    unpackInt2x32(int64_t);"
 2078|      3|            "uvec2    unpackUint2x32(uint64_t);"
 2079|       |
 2080|      3|            "uint     packFloat2x16(f16vec2);"
 2081|      3|            "f16vec2  unpackFloat2x16(uint);"
 2082|       |
 2083|      3|            "int64_t doubleBitsToInt64(double);"
 2084|      3|            "i64vec2 doubleBitsToInt64(dvec2);"
 2085|      3|            "i64vec3 doubleBitsToInt64(dvec3);"
 2086|      3|            "i64vec4 doubleBitsToInt64(dvec4);"
 2087|       |
 2088|      3|            "uint64_t doubleBitsToUint64(double);"
 2089|      3|            "u64vec2  doubleBitsToUint64(dvec2);"
 2090|      3|            "u64vec3  doubleBitsToUint64(dvec3);"
 2091|      3|            "u64vec4  doubleBitsToUint64(dvec4);"
 2092|       |
 2093|      3|            "double int64BitsToDouble(int64_t);"
 2094|      3|            "dvec2  int64BitsToDouble(i64vec2);"
 2095|      3|            "dvec3  int64BitsToDouble(i64vec3);"
 2096|      3|            "dvec4  int64BitsToDouble(i64vec4);"
 2097|       |
 2098|      3|            "double uint64BitsToDouble(uint64_t);"
 2099|      3|            "dvec2  uint64BitsToDouble(u64vec2);"
 2100|      3|            "dvec3  uint64BitsToDouble(u64vec3);"
 2101|      3|            "dvec4  uint64BitsToDouble(u64vec4);"
 2102|       |            // Modifications to Vector Relational Functions
 2103|       |            // Introduction of explicitly sized types
 2104|      3|            "bvec2 lessThan(i64vec2, i64vec2);"
 2105|      3|            "bvec3 lessThan(i64vec3, i64vec3);"
 2106|      3|            "bvec4 lessThan(i64vec4, i64vec4);"
 2107|      3|            "bvec2 lessThan(u64vec2, u64vec2);"
 2108|      3|            "bvec3 lessThan(u64vec3, u64vec3);"
 2109|      3|            "bvec4 lessThan(u64vec4, u64vec4);"
 2110|       |
 2111|      3|            "bvec2 lessThanEqual(i64vec2, i64vec2);"
 2112|      3|            "bvec3 lessThanEqual(i64vec3, i64vec3);"
 2113|      3|            "bvec4 lessThanEqual(i64vec4, i64vec4);"
 2114|      3|            "bvec2 lessThanEqual(u64vec2, u64vec2);"
 2115|      3|            "bvec3 lessThanEqual(u64vec3, u64vec3);"
 2116|      3|            "bvec4 lessThanEqual(u64vec4, u64vec4);"
 2117|       |
 2118|      3|            "bvec2 greaterThan(i64vec2, i64vec2);"
 2119|      3|            "bvec3 greaterThan(i64vec3, i64vec3);"
 2120|      3|            "bvec4 greaterThan(i64vec4, i64vec4);"
 2121|      3|            "bvec2 greaterThan(u64vec2, u64vec2);"
 2122|      3|            "bvec3 greaterThan(u64vec3, u64vec3);"
 2123|      3|            "bvec4 greaterThan(u64vec4, u64vec4);"
 2124|       |
 2125|      3|            "bvec2 greaterThanEqual(i64vec2, i64vec2);"
 2126|      3|            "bvec3 greaterThanEqual(i64vec3, i64vec3);"
 2127|      3|            "bvec4 greaterThanEqual(i64vec4, i64vec4);"
 2128|      3|            "bvec2 greaterThanEqual(u64vec2, u64vec2);"
 2129|      3|            "bvec3 greaterThanEqual(u64vec3, u64vec3);"
 2130|      3|            "bvec4 greaterThanEqual(u64vec4, u64vec4);"
 2131|       |
 2132|      3|            "bvec2 equal(i64vec2, i64vec2);"
 2133|      3|            "bvec3 equal(i64vec3, i64vec3);"
 2134|      3|            "bvec4 equal(i64vec4, i64vec4);"
 2135|      3|            "bvec2 equal(u64vec2, u64vec2);"
 2136|      3|            "bvec3 equal(u64vec3, u64vec3);"
 2137|      3|            "bvec4 equal(u64vec4, u64vec4);"
 2138|       |
 2139|      3|            "bvec2 notEqual(i64vec2, i64vec2);"
 2140|      3|            "bvec3 notEqual(i64vec3, i64vec3);"
 2141|      3|            "bvec4 notEqual(i64vec4, i64vec4);"
 2142|      3|            "bvec2 notEqual(u64vec2, u64vec2);"
 2143|      3|            "bvec3 notEqual(u64vec3, u64vec3);"
 2144|      3|            "bvec4 notEqual(u64vec4, u64vec4);"
 2145|       |
 2146|      3|            "bvec2 lessThan(f16vec2, f16vec2);"
 2147|      3|            "bvec3 lessThan(f16vec3, f16vec3);"
 2148|      3|            "bvec4 lessThan(f16vec4, f16vec4);"
 2149|       |
 2150|      3|            "bvec2 lessThanEqual(f16vec2, f16vec2);"
 2151|      3|            "bvec3 lessThanEqual(f16vec3, f16vec3);"
 2152|      3|            "bvec4 lessThanEqual(f16vec4, f16vec4);"
 2153|       |
 2154|      3|            "bvec2 greaterThan(f16vec2, f16vec2);"
 2155|      3|            "bvec3 greaterThan(f16vec3, f16vec3);"
 2156|      3|            "bvec4 greaterThan(f16vec4, f16vec4);"
 2157|       |
 2158|      3|            "bvec2 greaterThanEqual(f16vec2, f16vec2);"
 2159|      3|            "bvec3 greaterThanEqual(f16vec3, f16vec3);"
 2160|      3|            "bvec4 greaterThanEqual(f16vec4, f16vec4);"
 2161|       |
 2162|      3|            "bvec2 equal(f16vec2, f16vec2);"
 2163|      3|            "bvec3 equal(f16vec3, f16vec3);"
 2164|      3|            "bvec4 equal(f16vec4, f16vec4);"
 2165|       |
 2166|      3|            "bvec2 notEqual(f16vec2, f16vec2);"
 2167|      3|            "bvec3 notEqual(f16vec3, f16vec3);"
 2168|      3|            "bvec4 notEqual(f16vec4, f16vec4);"
 2169|       |
 2170|       |            // Dependency on GL_ARB_gpu_shader_fp64
 2171|      3|            "bvec2 lessThan(dvec2, dvec2);"
 2172|      3|            "bvec3 lessThan(dvec3, dvec3);"
 2173|      3|            "bvec4 lessThan(dvec4, dvec4);"
 2174|       |
 2175|      3|            "bvec2 lessThanEqual(dvec2, dvec2);"
 2176|      3|            "bvec3 lessThanEqual(dvec3, dvec3);"
 2177|      3|            "bvec4 lessThanEqual(dvec4, dvec4);"
 2178|       |
 2179|      3|            "bvec2 greaterThan(dvec2, dvec2);"
 2180|      3|            "bvec3 greaterThan(dvec3, dvec3);"
 2181|      3|            "bvec4 greaterThan(dvec4, dvec4);"
 2182|       |
 2183|      3|            "bvec2 greaterThanEqual(dvec2, dvec2);"
 2184|      3|            "bvec3 greaterThanEqual(dvec3, dvec3);"
 2185|      3|            "bvec4 greaterThanEqual(dvec4, dvec4);"
 2186|       |
 2187|      3|            "bvec2 equal(dvec2, dvec2);"
 2188|      3|            "bvec3 equal(dvec3, dvec3);"
 2189|      3|            "bvec4 equal(dvec4, dvec4);"
 2190|       |
 2191|      3|            "bvec2 notEqual(dvec2, dvec2);"
 2192|      3|            "bvec3 notEqual(dvec3, dvec3);"
 2193|      3|            "bvec4 notEqual(dvec4, dvec4);"
 2194|       |
 2195|      3|            "\n");
 2196|      3|    }
 2197|       |
 2198|       |
 2199|     99|    if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (2199:9): [True: 99, False: 0]
  |  Branch (2199:34): [True: 13, False: 86]
  ------------------
 2200|     13|        commonBuiltins.append(
 2201|     13|            "bool anyThreadNV(bool);"
 2202|     13|            "bool allThreadsNV(bool);"
 2203|     13|            "bool allThreadsEqualNV(bool);"
 2204|       |
 2205|     13|            "\n");
 2206|     13|    }
 2207|       |
 2208|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (2208:10): [True: 0, False: 99]
  |  Branch (2208:35): [True: 0, False: 0]
  ------------------
 2209|     99|        (profile != EEsProfile && version >= 150)) { // NV_gpu_shader5
  ------------------
  |  Branch (2209:10): [True: 99, False: 0]
  |  Branch (2209:35): [True: 13, False: 86]
  ------------------
 2210|     13|        commonBuiltins.append(
 2211|     13|            " uint uaddCarry(highp  uint, highp  uint, out lowp  uint carry);"
 2212|     13|            "uvec2 uaddCarry(highp uvec2, highp uvec2, out lowp uvec2 carry);"
 2213|     13|            "uvec3 uaddCarry(highp uvec3, highp uvec3, out lowp uvec3 carry);"
 2214|     13|            "uvec4 uaddCarry(highp uvec4, highp uvec4, out lowp uvec4 carry);"
 2215|       |
 2216|     13|            " uint usubBorrow(highp  uint, highp  uint, out lowp  uint borrow);"
 2217|     13|            "uvec2 usubBorrow(highp uvec2, highp uvec2, out lowp uvec2 borrow);"
 2218|     13|            "uvec3 usubBorrow(highp uvec3, highp uvec3, out lowp uvec3 borrow);"
 2219|     13|            "uvec4 usubBorrow(highp uvec4, highp uvec4, out lowp uvec4 borrow);"
 2220|       |
 2221|     13|            "void umulExtended(highp  uint, highp  uint, out highp  uint, out highp  uint lsb);"
 2222|     13|            "void umulExtended(highp uvec2, highp uvec2, out highp uvec2, out highp uvec2 lsb);"
 2223|     13|            "void umulExtended(highp uvec3, highp uvec3, out highp uvec3, out highp uvec3 lsb);"
 2224|     13|            "void umulExtended(highp uvec4, highp uvec4, out highp uvec4, out highp uvec4 lsb);"
 2225|       |
 2226|     13|            "void imulExtended(highp   int, highp   int, out highp   int, out highp   int lsb);"
 2227|     13|            "void imulExtended(highp ivec2, highp ivec2, out highp ivec2, out highp ivec2 lsb);"
 2228|     13|            "void imulExtended(highp ivec3, highp ivec3, out highp ivec3, out highp ivec3 lsb);"
 2229|     13|            "void imulExtended(highp ivec4, highp ivec4, out highp ivec4, out highp ivec4 lsb);"
 2230|       |
 2231|     13|            "  int bitfieldReverse(highp   int);"
 2232|     13|            "ivec2 bitfieldReverse(highp ivec2);"
 2233|     13|            "ivec3 bitfieldReverse(highp ivec3);"
 2234|     13|            "ivec4 bitfieldReverse(highp ivec4);"
 2235|       |
 2236|     13|            " uint bitfieldReverse(highp  uint);"
 2237|     13|            "uvec2 bitfieldReverse(highp uvec2);"
 2238|     13|            "uvec3 bitfieldReverse(highp uvec3);"
 2239|     13|            "uvec4 bitfieldReverse(highp uvec4);"
 2240|       |
 2241|     13|            "\n");
 2242|     13|    }
 2243|       |
 2244|     99|    if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (2244:9): [True: 0, False: 99]
  |  Branch (2244:34): [True: 0, False: 0]
  ------------------
 2245|      0|        commonBuiltins.append(
 2246|      0|            "lowp   int bitCount(  int);"
 2247|      0|            "lowp ivec2 bitCount(ivec2);"
 2248|      0|            "lowp ivec3 bitCount(ivec3);"
 2249|      0|            "lowp ivec4 bitCount(ivec4);"
 2250|       |
 2251|      0|            "lowp   int bitCount( uint);"
 2252|      0|            "lowp ivec2 bitCount(uvec2);"
 2253|      0|            "lowp ivec3 bitCount(uvec3);"
 2254|      0|            "lowp ivec4 bitCount(uvec4);"
 2255|       |
 2256|      0|            "lowp   int findMSB(highp   int);"
 2257|      0|            "lowp ivec2 findMSB(highp ivec2);"
 2258|      0|            "lowp ivec3 findMSB(highp ivec3);"
 2259|      0|            "lowp ivec4 findMSB(highp ivec4);"
 2260|       |
 2261|      0|            "lowp   int findMSB(highp  uint);"
 2262|      0|            "lowp ivec2 findMSB(highp uvec2);"
 2263|      0|            "lowp ivec3 findMSB(highp uvec3);"
 2264|      0|            "lowp ivec4 findMSB(highp uvec4);"
 2265|       |
 2266|      0|            "\n");
 2267|      0|    }
 2268|       |
 2269|       |    // GL_ARB_shader_ballot
 2270|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (2270:9): [True: 99, False: 0]
  |  Branch (2270:34): [True: 10, False: 89]
  ------------------
 2271|     10|        commonBuiltins.append(
 2272|     10|            "uint64_t ballotARB(bool);"
 2273|       |
 2274|     10|            "float readInvocationARB(float, uint);"
 2275|     10|            "vec2  readInvocationARB(vec2,  uint);"
 2276|     10|            "vec3  readInvocationARB(vec3,  uint);"
 2277|     10|            "vec4  readInvocationARB(vec4,  uint);"
 2278|       |
 2279|     10|            "int   readInvocationARB(int,   uint);"
 2280|     10|            "ivec2 readInvocationARB(ivec2, uint);"
 2281|     10|            "ivec3 readInvocationARB(ivec3, uint);"
 2282|     10|            "ivec4 readInvocationARB(ivec4, uint);"
 2283|       |
 2284|     10|            "uint  readInvocationARB(uint,  uint);"
 2285|     10|            "uvec2 readInvocationARB(uvec2, uint);"
 2286|     10|            "uvec3 readInvocationARB(uvec3, uint);"
 2287|     10|            "uvec4 readInvocationARB(uvec4, uint);"
 2288|       |
 2289|     10|            "float readFirstInvocationARB(float);"
 2290|     10|            "vec2  readFirstInvocationARB(vec2);"
 2291|     10|            "vec3  readFirstInvocationARB(vec3);"
 2292|     10|            "vec4  readFirstInvocationARB(vec4);"
 2293|       |
 2294|     10|            "int   readFirstInvocationARB(int);"
 2295|     10|            "ivec2 readFirstInvocationARB(ivec2);"
 2296|     10|            "ivec3 readFirstInvocationARB(ivec3);"
 2297|     10|            "ivec4 readFirstInvocationARB(ivec4);"
 2298|       |
 2299|     10|            "uint  readFirstInvocationARB(uint);"
 2300|     10|            "uvec2 readFirstInvocationARB(uvec2);"
 2301|     10|            "uvec3 readFirstInvocationARB(uvec3);"
 2302|     10|            "uvec4 readFirstInvocationARB(uvec4);"
 2303|       |
 2304|     10|            "\n");
 2305|     10|    }
 2306|       |
 2307|       |    // GL_ARB_shader_group_vote
 2308|     99|    if (profile != EEsProfile && version >= 430) {
  ------------------
  |  Branch (2308:9): [True: 99, False: 0]
  |  Branch (2308:34): [True: 10, False: 89]
  ------------------
 2309|     10|        commonBuiltins.append(
 2310|     10|            "bool anyInvocationARB(bool);"
 2311|     10|            "bool allInvocationsARB(bool);"
 2312|     10|            "bool allInvocationsEqualARB(bool);"
 2313|       |
 2314|     10|            "\n");
 2315|     10|    }
 2316|       |
 2317|       |    // GL_EXT_integer_dot_product
 2318|     99|    if ((profile == EEsProfile && version >= 300) ||
  ------------------
  |  Branch (2318:10): [True: 0, False: 99]
  |  Branch (2318:35): [True: 0, False: 0]
  ------------------
 2319|     99|        (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (2319:10): [True: 99, False: 0]
  |  Branch (2319:35): [True: 10, False: 89]
  ------------------
 2320|     10|        commonBuiltins.append(
 2321|       |
 2322|     10|            "uint dotEXT(uvec2 a, uvec2 b);"
 2323|     10|            "int dotEXT(ivec2 a, ivec2 b);"
 2324|     10|            "int dotEXT(ivec2 a, uvec2 b);"
 2325|     10|            "int dotEXT(uvec2 a, ivec2 b);"
 2326|       |
 2327|     10|            "uint dotEXT(uvec3 a, uvec3 b);"
 2328|     10|            "int dotEXT(ivec3 a, ivec3 b);"
 2329|     10|            "int dotEXT(ivec3 a, uvec3 b);"
 2330|     10|            "int dotEXT(uvec3 a, ivec3 b);"
 2331|       |
 2332|     10|            "uint dotEXT(uvec4 a, uvec4 b);"
 2333|     10|            "int dotEXT(ivec4 a, ivec4 b);"
 2334|     10|            "int dotEXT(ivec4 a, uvec4 b);"
 2335|     10|            "int dotEXT(uvec4 a, ivec4 b);"
 2336|       |
 2337|     10|            "uint dotPacked4x8EXT(uint a, uint b);"
 2338|     10|            "int dotPacked4x8EXT(int a, uint b);"
 2339|     10|            "int dotPacked4x8EXT(uint a, int b);"
 2340|     10|            "int dotPacked4x8EXT(int a, int b);"
 2341|       |
 2342|     10|            "uint dotEXT(u8vec2 a, u8vec2 b);"
 2343|     10|            "int dotEXT(i8vec2 a, u8vec2 b);"
 2344|     10|            "int dotEXT(u8vec2 a, i8vec2 b);"
 2345|     10|            "int dotEXT(i8vec2 a, i8vec2 b);"
 2346|       |
 2347|     10|            "uint dotEXT(u8vec3 a, u8vec3 b);"
 2348|     10|            "int dotEXT(i8vec3 a, u8vec3 b);"
 2349|     10|            "int dotEXT(u8vec3 a, i8vec3 b);"
 2350|     10|            "int dotEXT(i8vec3 a, i8vec3 b);"
 2351|       |
 2352|     10|            "uint dotEXT(u8vec4 a, u8vec4 b);"
 2353|     10|            "int dotEXT(i8vec4 a, u8vec4 b);"
 2354|     10|            "int dotEXT(u8vec4 a, i8vec4 b);"
 2355|     10|            "int dotEXT(i8vec4 a, i8vec4 b);"
 2356|       |
 2357|     10|            "uint dotEXT(u16vec2 a, u16vec2 b);"
 2358|     10|            "int dotEXT(i16vec2 a, u16vec2 b);"
 2359|     10|            "int dotEXT(u16vec2 a, i16vec2 b);"
 2360|     10|            "int dotEXT(i16vec2 a, i16vec2 b);"
 2361|       |
 2362|     10|            "uint dotEXT(u16vec3 a, u16vec3 b);"
 2363|     10|            "int dotEXT(i16vec3 a, u16vec3 b);"
 2364|     10|            "int dotEXT(u16vec3 a, i16vec3 b);"
 2365|     10|            "int dotEXT(i16vec3 a, i16vec3 b);"
 2366|       |
 2367|     10|            "uint dotEXT(u16vec4 a, u16vec4 b);"
 2368|     10|            "int dotEXT(i16vec4 a, u16vec4 b);"
 2369|     10|            "int dotEXT(u16vec4 a, i16vec4 b);"
 2370|     10|            "int dotEXT(i16vec4 a, i16vec4 b);"
 2371|       |
 2372|     10|            "uint64_t dotEXT(u64vec2 a, u64vec2 b);"
 2373|     10|            "int64_t dotEXT(i64vec2 a, u64vec2 b);"
 2374|     10|            "int64_t dotEXT(u64vec2 a, i64vec2 b);"
 2375|     10|            "int64_t dotEXT(i64vec2 a, i64vec2 b);"
 2376|       |
 2377|     10|            "uint64_t dotEXT(u64vec3 a, u64vec3 b);"
 2378|     10|            "int64_t dotEXT(i64vec3 a, u64vec3 b);"
 2379|     10|            "int64_t dotEXT(u64vec3 a, i64vec3 b);"
 2380|     10|            "int64_t dotEXT(i64vec3 a, i64vec3 b);"
 2381|       |
 2382|     10|            "uint64_t dotEXT(u64vec4 a, u64vec4 b);"
 2383|     10|            "int64_t dotEXT(i64vec4 a, u64vec4 b);"
 2384|     10|            "int64_t dotEXT(u64vec4 a, i64vec4 b);"
 2385|     10|            "int64_t dotEXT(i64vec4 a, i64vec4 b);"
 2386|       |
 2387|     10|            "uint dotAccSatEXT(uvec2 a, uvec2 b, uint c);"
 2388|     10|            "int dotAccSatEXT(ivec2 a, uvec2 b, int c);"
 2389|     10|            "int dotAccSatEXT(uvec2 a, ivec2 b, int c);"
 2390|     10|            "int dotAccSatEXT(ivec2 a, ivec2 b, int c);"
 2391|       |
 2392|     10|            "uint dotAccSatEXT(uvec3 a, uvec3 b, uint c);"
 2393|     10|            "int dotAccSatEXT(ivec3 a, uvec3 b, int c);"
 2394|     10|            "int dotAccSatEXT(uvec3 a, ivec3 b, int c);"
 2395|     10|            "int dotAccSatEXT(ivec3 a, ivec3 b, int c);"
 2396|       |
 2397|     10|            "uint dotAccSatEXT(uvec4 a, uvec4 b, uint c);"
 2398|     10|            "int dotAccSatEXT(ivec4 a, uvec4 b, int c);"
 2399|     10|            "int dotAccSatEXT(uvec4 a, ivec4 b, int c);"
 2400|     10|            "int dotAccSatEXT(ivec4 a, ivec4 b, int c);"
 2401|       |
 2402|     10|            "uint dotPacked4x8AccSatEXT(uint a, uint b, uint c);"
 2403|     10|            "int dotPacked4x8AccSatEXT(int a, uint b, int c);"
 2404|     10|            "int dotPacked4x8AccSatEXT(uint a, int b, int c);"
 2405|     10|            "int dotPacked4x8AccSatEXT(int a, int b, int c);"
 2406|       |
 2407|     10|            "uint dotAccSatEXT(u8vec2 a, u8vec2 b, uint c);"
 2408|     10|            "int dotAccSatEXT(i8vec2 a, u8vec2 b, int c);"
 2409|     10|            "int dotAccSatEXT(u8vec2 a, i8vec2 b, int c);"
 2410|     10|            "int dotAccSatEXT(i8vec2 a, i8vec2 b, int c);"
 2411|       |
 2412|     10|            "uint dotAccSatEXT(u8vec3 a, u8vec3 b, uint c);"
 2413|     10|            "int dotAccSatEXT(i8vec3 a, u8vec3 b, int c);"
 2414|     10|            "int dotAccSatEXT(u8vec3 a, i8vec3 b, int c);"
 2415|     10|            "int dotAccSatEXT(i8vec3 a, i8vec3 b, int c);"
 2416|       |
 2417|     10|            "uint dotAccSatEXT(u8vec4 a, u8vec4 b, uint c);"
 2418|     10|            "int dotAccSatEXT(i8vec4 a, u8vec4 b, int c);"
 2419|     10|            "int dotAccSatEXT(u8vec4 a, i8vec4 b, int c);"
 2420|     10|            "int dotAccSatEXT(i8vec4 a, i8vec4 b, int c);"
 2421|       |
 2422|     10|            "uint dotAccSatEXT(u16vec2 a, u16vec2 b, uint c);"
 2423|     10|            "int dotAccSatEXT(i16vec2 a, u16vec2 b, int c);"
 2424|     10|            "int dotAccSatEXT(u16vec2 a, i16vec2 b, int c);"
 2425|     10|            "int dotAccSatEXT(i16vec2 a, i16vec2 b, int c);"
 2426|       |
 2427|     10|            "uint dotAccSatEXT(u16vec3 a, u16vec3 b, uint c);"
 2428|     10|            "int dotAccSatEXT(i16vec3 a, u16vec3 b, int c);"
 2429|     10|            "int dotAccSatEXT(u16vec3 a, i16vec3 b, int c);"
 2430|     10|            "int dotAccSatEXT(i16vec3 a, i16vec3 b, int c);"
 2431|       |
 2432|     10|            "uint dotAccSatEXT(u16vec4 a, u16vec4 b, uint c);"
 2433|     10|            "int dotAccSatEXT(i16vec4 a, u16vec4 b, int c);"
 2434|     10|            "int dotAccSatEXT(u16vec4 a, i16vec4 b, int c);"
 2435|     10|            "int dotAccSatEXT(i16vec4 a, i16vec4 b, int c);"
 2436|       |
 2437|     10|            "uint64_t dotAccSatEXT(u64vec2 a, u64vec2 b, uint64_t c);"
 2438|     10|            "int64_t dotAccSatEXT(i64vec2 a, u64vec2 b, int64_t c);"
 2439|     10|            "int64_t dotAccSatEXT(u64vec2 a, i64vec2 b, int64_t c);"
 2440|     10|            "int64_t dotAccSatEXT(i64vec2 a, i64vec2 b, int64_t c);"
 2441|       |
 2442|     10|            "uint64_t dotAccSatEXT(u64vec3 a, u64vec3 b, uint64_t c);"
 2443|     10|            "int64_t dotAccSatEXT(i64vec3 a, u64vec3 b, int64_t c);"
 2444|     10|            "int64_t dotAccSatEXT(u64vec3 a, i64vec3 b, int64_t c);"
 2445|     10|            "int64_t dotAccSatEXT(i64vec3 a, i64vec3 b, int64_t c);"
 2446|       |
 2447|     10|            "uint64_t dotAccSatEXT(u64vec4 a, u64vec4 b, uint64_t c);"
 2448|     10|            "int64_t dotAccSatEXT(i64vec4 a, u64vec4 b, int64_t c);"
 2449|     10|            "int64_t dotAccSatEXT(u64vec4 a, i64vec4 b, int64_t c);"
 2450|     10|            "int64_t dotAccSatEXT(i64vec4 a, i64vec4 b, int64_t c);"
 2451|     10|            "\n");
 2452|     10|    }
 2453|       |
 2454|       |    // GL_KHR_shader_subgroup
 2455|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (2455:10): [True: 0, False: 99]
  |  Branch (2455:35): [True: 0, False: 0]
  ------------------
 2456|     99|        (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (2456:10): [True: 99, False: 0]
  |  Branch (2456:35): [True: 99, False: 0]
  ------------------
 2457|     99|        commonBuiltins.append(
 2458|     99|            "void subgroupBarrier();"
 2459|     99|            "void subgroupMemoryBarrier();"
 2460|     99|            "void subgroupMemoryBarrierBuffer();"
 2461|     99|            "void subgroupMemoryBarrierImage();"
 2462|     99|            "bool subgroupElect();"
 2463|       |
 2464|     99|            "bool   subgroupAll(bool);\n"
 2465|     99|            "bool   subgroupAny(bool);\n"
 2466|     99|            "uvec4  subgroupBallot(bool);\n"
 2467|     99|            "bool   subgroupInverseBallot(uvec4);\n"
 2468|     99|            "bool   subgroupBallotBitExtract(uvec4, uint);\n"
 2469|     99|            "uint   subgroupBallotBitCount(uvec4);\n"
 2470|     99|            "uint   subgroupBallotInclusiveBitCount(uvec4);\n"
 2471|     99|            "uint   subgroupBallotExclusiveBitCount(uvec4);\n"
 2472|     99|            "uint   subgroupBallotFindLSB(uvec4);\n"
 2473|     99|            "uint   subgroupBallotFindMSB(uvec4);\n"
 2474|     99|            );
 2475|       |
 2476|       |        // Generate all flavors of subgroup ops.
 2477|     99|        static const char *subgroupOps[] = 
 2478|     99|        {
 2479|     99|            "bool   subgroupAllEqual(%s);\n",
 2480|     99|            "%s     subgroupBroadcast(%s, uint);\n",
 2481|     99|            "%s     subgroupBroadcastFirst(%s);\n",
 2482|     99|            "%s     subgroupShuffle(%s, uint);\n",
 2483|     99|            "%s     subgroupShuffleXor(%s, uint);\n",
 2484|     99|            "%s     subgroupShuffleUp(%s, uint delta);\n",
 2485|     99|            "%s     subgroupShuffleDown(%s, uint delta);\n",
 2486|     99|            "%s     subgroupRotate(%s, uint);\n",
 2487|     99|            "%s     subgroupClusteredRotate(%s, uint, uint);\n",
 2488|     99|            "%s     subgroupAdd(%s);\n",
 2489|     99|            "%s     subgroupMul(%s);\n",
 2490|     99|            "%s     subgroupMin(%s);\n",
 2491|     99|            "%s     subgroupMax(%s);\n",
 2492|     99|            "%s     subgroupAnd(%s);\n",
 2493|     99|            "%s     subgroupOr(%s);\n",
 2494|     99|            "%s     subgroupXor(%s);\n",
 2495|     99|            "%s     subgroupInclusiveAdd(%s);\n",
 2496|     99|            "%s     subgroupInclusiveMul(%s);\n",
 2497|     99|            "%s     subgroupInclusiveMin(%s);\n",
 2498|     99|            "%s     subgroupInclusiveMax(%s);\n",
 2499|     99|            "%s     subgroupInclusiveAnd(%s);\n",
 2500|     99|            "%s     subgroupInclusiveOr(%s);\n",
 2501|     99|            "%s     subgroupInclusiveXor(%s);\n",
 2502|     99|            "%s     subgroupExclusiveAdd(%s);\n",
 2503|     99|            "%s     subgroupExclusiveMul(%s);\n",
 2504|     99|            "%s     subgroupExclusiveMin(%s);\n",
 2505|     99|            "%s     subgroupExclusiveMax(%s);\n",
 2506|     99|            "%s     subgroupExclusiveAnd(%s);\n",
 2507|     99|            "%s     subgroupExclusiveOr(%s);\n",
 2508|     99|            "%s     subgroupExclusiveXor(%s);\n",
 2509|     99|            "%s     subgroupClusteredAdd(%s, uint);\n",
 2510|     99|            "%s     subgroupClusteredMul(%s, uint);\n",
 2511|     99|            "%s     subgroupClusteredMin(%s, uint);\n",
 2512|     99|            "%s     subgroupClusteredMax(%s, uint);\n",
 2513|     99|            "%s     subgroupClusteredAnd(%s, uint);\n",
 2514|     99|            "%s     subgroupClusteredOr(%s, uint);\n",
 2515|     99|            "%s     subgroupClusteredXor(%s, uint);\n",
 2516|     99|            "%s     subgroupQuadBroadcast(%s, uint);\n",
 2517|     99|            "%s     subgroupQuadSwapHorizontal(%s);\n",
 2518|     99|            "%s     subgroupQuadSwapVertical(%s);\n",
 2519|     99|            "%s     subgroupQuadSwapDiagonal(%s);\n",
 2520|     99|            "uvec4  subgroupPartitionNV(%s);\n",
 2521|     99|            "%s     subgroupPartitionedAddNV(%s, uvec4 ballot);\n",
 2522|     99|            "%s     subgroupPartitionedMulNV(%s, uvec4 ballot);\n",
 2523|     99|            "%s     subgroupPartitionedMinNV(%s, uvec4 ballot);\n",
 2524|     99|            "%s     subgroupPartitionedMaxNV(%s, uvec4 ballot);\n",
 2525|     99|            "%s     subgroupPartitionedAndNV(%s, uvec4 ballot);\n",
 2526|     99|            "%s     subgroupPartitionedOrNV(%s, uvec4 ballot);\n",
 2527|     99|            "%s     subgroupPartitionedXorNV(%s, uvec4 ballot);\n",
 2528|     99|            "%s     subgroupPartitionedInclusiveAddNV(%s, uvec4 ballot);\n",
 2529|     99|            "%s     subgroupPartitionedInclusiveMulNV(%s, uvec4 ballot);\n",
 2530|     99|            "%s     subgroupPartitionedInclusiveMinNV(%s, uvec4 ballot);\n",
 2531|     99|            "%s     subgroupPartitionedInclusiveMaxNV(%s, uvec4 ballot);\n",
 2532|     99|            "%s     subgroupPartitionedInclusiveAndNV(%s, uvec4 ballot);\n",
 2533|     99|            "%s     subgroupPartitionedInclusiveOrNV(%s, uvec4 ballot);\n",
 2534|     99|            "%s     subgroupPartitionedInclusiveXorNV(%s, uvec4 ballot);\n",
 2535|     99|            "%s     subgroupPartitionedExclusiveAddNV(%s, uvec4 ballot);\n",
 2536|     99|            "%s     subgroupPartitionedExclusiveMulNV(%s, uvec4 ballot);\n",
 2537|     99|            "%s     subgroupPartitionedExclusiveMinNV(%s, uvec4 ballot);\n",
 2538|     99|            "%s     subgroupPartitionedExclusiveMaxNV(%s, uvec4 ballot);\n",
 2539|     99|            "%s     subgroupPartitionedExclusiveAndNV(%s, uvec4 ballot);\n",
 2540|     99|            "%s     subgroupPartitionedExclusiveOrNV(%s, uvec4 ballot);\n",
 2541|     99|            "%s     subgroupPartitionedExclusiveXorNV(%s, uvec4 ballot);\n",
 2542|     99|        };
 2543|       |
 2544|     99|        static const char *floatTypes[] = { 
 2545|     99|            "float", "vec2", "vec3", "vec4", 
 2546|     99|            "float16_t", "f16vec2", "f16vec3", "f16vec4", 
 2547|     99|        };
 2548|     99|        static const char *doubleTypes[] = { 
 2549|     99|            "double", "dvec2", "dvec3", "dvec4", 
 2550|     99|        };
 2551|     99|        static const char *intTypes[] = { 
 2552|     99|            "int8_t", "i8vec2", "i8vec3", "i8vec4", 
 2553|     99|            "int16_t", "i16vec2", "i16vec3", "i16vec4", 
 2554|     99|            "int", "ivec2", "ivec3", "ivec4", 
 2555|     99|            "int64_t", "i64vec2", "i64vec3", "i64vec4", 
 2556|     99|            "uint8_t", "u8vec2", "u8vec3", "u8vec4", 
 2557|     99|            "uint16_t", "u16vec2", "u16vec3", "u16vec4", 
 2558|     99|            "uint", "uvec2", "uvec3", "uvec4", 
 2559|     99|            "uint64_t", "u64vec2", "u64vec3", "u64vec4", 
 2560|     99|        };
 2561|     99|        static const char *boolTypes[] = { 
 2562|     99|            "bool", "bvec2", "bvec3", "bvec4", 
 2563|     99|        };
 2564|       |
 2565|  6.33k|        for (size_t i = 0; i < sizeof(subgroupOps)/sizeof(subgroupOps[0]); ++i) {
  ------------------
  |  Branch (2565:28): [True: 6.23k, False: 99]
  ------------------
 2566|  6.23k|            const char *op = subgroupOps[i];
 2567|       |
 2568|       |            // Logical operations don't support float
 2569|  6.23k|            bool logicalOp = strstr(op, "Or") || strstr(op, "And") ||
  ------------------
  |  Branch (2569:30): [True: 693, False: 5.54k]
  |  Branch (2569:50): [True: 693, False: 4.85k]
  ------------------
 2570|  4.85k|                             (strstr(op, "Xor") && !strstr(op, "ShuffleXor"));
  ------------------
  |  Branch (2570:31): [True: 792, False: 4.05k]
  |  Branch (2570:52): [True: 693, False: 99]
  ------------------
 2571|       |            // Math operations don't support bool
 2572|  6.23k|            bool mathOp = strstr(op, "Add") || strstr(op, "Mul") || strstr(op, "Min") || strstr(op, "Max");
  ------------------
  |  Branch (2572:27): [True: 693, False: 5.54k]
  |  Branch (2572:48): [True: 693, False: 4.85k]
  |  Branch (2572:69): [True: 693, False: 4.15k]
  |  Branch (2572:90): [True: 693, False: 3.46k]
  ------------------
 2573|       |
 2574|  6.23k|            const int bufSize = 256;
 2575|  6.23k|            char buf[bufSize];
 2576|       |
 2577|  6.23k|            if (!logicalOp) {
  ------------------
  |  Branch (2577:17): [True: 4.15k, False: 2.07k]
  ------------------
 2578|  37.4k|                for (size_t j = 0; j < sizeof(floatTypes)/sizeof(floatTypes[0]); ++j) {
  ------------------
  |  Branch (2578:36): [True: 33.2k, False: 4.15k]
  ------------------
 2579|  33.2k|                    snprintf(buf, bufSize, op, floatTypes[j], floatTypes[j]);
 2580|  33.2k|                    commonBuiltins.append(buf);
 2581|  33.2k|                }
 2582|  4.15k|                if (profile != EEsProfile && version >= 400) {
  ------------------
  |  Branch (2582:21): [True: 4.15k, False: 0]
  |  Branch (2582:46): [True: 504, False: 3.65k]
  ------------------
 2583|  2.52k|                    for (size_t j = 0; j < sizeof(doubleTypes)/sizeof(doubleTypes[0]); ++j) {
  ------------------
  |  Branch (2583:40): [True: 2.01k, False: 504]
  ------------------
 2584|  2.01k|                        snprintf(buf, bufSize, op, doubleTypes[j], doubleTypes[j]);
 2585|  2.01k|                        commonBuiltins.append(buf);
 2586|  2.01k|                    }
 2587|    504|                }
 2588|  4.15k|            }
 2589|  6.23k|            if (!mathOp) {
  ------------------
  |  Branch (2589:17): [True: 3.46k, False: 2.77k]
  ------------------
 2590|  17.3k|                for (size_t j = 0; j < sizeof(boolTypes)/sizeof(boolTypes[0]); ++j) {
  ------------------
  |  Branch (2590:36): [True: 13.8k, False: 3.46k]
  ------------------
 2591|  13.8k|                    snprintf(buf, bufSize, op, boolTypes[j], boolTypes[j]);
 2592|  13.8k|                    commonBuiltins.append(buf);
 2593|  13.8k|                }
 2594|  3.46k|            }
 2595|   205k|            for (size_t j = 0; j < sizeof(intTypes)/sizeof(intTypes[0]); ++j) {
  ------------------
  |  Branch (2595:32): [True: 199k, False: 6.23k]
  ------------------
 2596|   199k|                snprintf(buf, bufSize, op, intTypes[j], intTypes[j]);
 2597|   199k|                commonBuiltins.append(buf);
 2598|   199k|            }
 2599|  6.23k|            snprintf(buf, bufSize, op, "vector", "vector");
 2600|  6.23k|            commonBuiltins.append(buf);
 2601|  6.23k|        }
 2602|       |
 2603|     99|        stageBuiltins[EShLangCompute].append(
 2604|     99|            "void subgroupMemoryBarrierShared();"
 2605|       |
 2606|     99|            "\n"
 2607|     99|            );
 2608|     99|        stageBuiltins[EShLangMesh].append(
 2609|     99|            "void subgroupMemoryBarrierShared();"
 2610|     99|            "\n"
 2611|     99|            );
 2612|     99|        stageBuiltins[EShLangTask].append(
 2613|     99|            "void subgroupMemoryBarrierShared();"
 2614|     99|            "\n"
 2615|     99|            );
 2616|     99|    }
 2617|       |
 2618|       |    // GL_EXT_shader_quad_control
 2619|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (2619:10): [True: 0, False: 99]
  |  Branch (2619:35): [True: 0, False: 0]
  ------------------
 2620|     99|        (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (2620:10): [True: 99, False: 0]
  |  Branch (2620:35): [True: 99, False: 0]
  ------------------
 2621|     99|        commonBuiltins.append(
 2622|     99|            "bool subgroupQuadAll(bool);\n"
 2623|     99|            "bool subgroupQuadAny(bool);\n"
 2624|     99|            );
 2625|     99|    }
 2626|       |
 2627|     99|    if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (2627:9): [True: 99, False: 0]
  |  Branch (2627:34): [True: 0, False: 99]
  ------------------
 2628|      0|        commonBuiltins.append(
 2629|      0|            "bool anyInvocation(bool);"
 2630|      0|            "bool allInvocations(bool);"
 2631|      0|            "bool allInvocationsEqual(bool);"
 2632|       |
 2633|      0|            "\n");
 2634|      0|    }
 2635|       |
 2636|       |    // GL_AMD_shader_ballot
 2637|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (2637:9): [True: 99, False: 0]
  |  Branch (2637:34): [True: 10, False: 89]
  ------------------
 2638|     10|        commonBuiltins.append(
 2639|     10|            "float minInvocationsAMD(float);"
 2640|     10|            "vec2  minInvocationsAMD(vec2);"
 2641|     10|            "vec3  minInvocationsAMD(vec3);"
 2642|     10|            "vec4  minInvocationsAMD(vec4);"
 2643|       |
 2644|     10|            "int   minInvocationsAMD(int);"
 2645|     10|            "ivec2 minInvocationsAMD(ivec2);"
 2646|     10|            "ivec3 minInvocationsAMD(ivec3);"
 2647|     10|            "ivec4 minInvocationsAMD(ivec4);"
 2648|       |
 2649|     10|            "uint  minInvocationsAMD(uint);"
 2650|     10|            "uvec2 minInvocationsAMD(uvec2);"
 2651|     10|            "uvec3 minInvocationsAMD(uvec3);"
 2652|     10|            "uvec4 minInvocationsAMD(uvec4);"
 2653|       |
 2654|     10|            "double minInvocationsAMD(double);"
 2655|     10|            "dvec2  minInvocationsAMD(dvec2);"
 2656|     10|            "dvec3  minInvocationsAMD(dvec3);"
 2657|     10|            "dvec4  minInvocationsAMD(dvec4);"
 2658|       |
 2659|     10|            "int64_t minInvocationsAMD(int64_t);"
 2660|     10|            "i64vec2 minInvocationsAMD(i64vec2);"
 2661|     10|            "i64vec3 minInvocationsAMD(i64vec3);"
 2662|     10|            "i64vec4 minInvocationsAMD(i64vec4);"
 2663|       |
 2664|     10|            "uint64_t minInvocationsAMD(uint64_t);"
 2665|     10|            "u64vec2  minInvocationsAMD(u64vec2);"
 2666|     10|            "u64vec3  minInvocationsAMD(u64vec3);"
 2667|     10|            "u64vec4  minInvocationsAMD(u64vec4);"
 2668|       |
 2669|     10|            "float16_t minInvocationsAMD(float16_t);"
 2670|     10|            "f16vec2   minInvocationsAMD(f16vec2);"
 2671|     10|            "f16vec3   minInvocationsAMD(f16vec3);"
 2672|     10|            "f16vec4   minInvocationsAMD(f16vec4);"
 2673|       |
 2674|     10|            "int16_t minInvocationsAMD(int16_t);"
 2675|     10|            "i16vec2 minInvocationsAMD(i16vec2);"
 2676|     10|            "i16vec3 minInvocationsAMD(i16vec3);"
 2677|     10|            "i16vec4 minInvocationsAMD(i16vec4);"
 2678|       |
 2679|     10|            "uint16_t minInvocationsAMD(uint16_t);"
 2680|     10|            "u16vec2  minInvocationsAMD(u16vec2);"
 2681|     10|            "u16vec3  minInvocationsAMD(u16vec3);"
 2682|     10|            "u16vec4  minInvocationsAMD(u16vec4);"
 2683|       |
 2684|     10|            "float minInvocationsInclusiveScanAMD(float);"
 2685|     10|            "vec2  minInvocationsInclusiveScanAMD(vec2);"
 2686|     10|            "vec3  minInvocationsInclusiveScanAMD(vec3);"
 2687|     10|            "vec4  minInvocationsInclusiveScanAMD(vec4);"
 2688|       |
 2689|     10|            "int   minInvocationsInclusiveScanAMD(int);"
 2690|     10|            "ivec2 minInvocationsInclusiveScanAMD(ivec2);"
 2691|     10|            "ivec3 minInvocationsInclusiveScanAMD(ivec3);"
 2692|     10|            "ivec4 minInvocationsInclusiveScanAMD(ivec4);"
 2693|       |
 2694|     10|            "uint  minInvocationsInclusiveScanAMD(uint);"
 2695|     10|            "uvec2 minInvocationsInclusiveScanAMD(uvec2);"
 2696|     10|            "uvec3 minInvocationsInclusiveScanAMD(uvec3);"
 2697|     10|            "uvec4 minInvocationsInclusiveScanAMD(uvec4);"
 2698|       |
 2699|     10|            "double minInvocationsInclusiveScanAMD(double);"
 2700|     10|            "dvec2  minInvocationsInclusiveScanAMD(dvec2);"
 2701|     10|            "dvec3  minInvocationsInclusiveScanAMD(dvec3);"
 2702|     10|            "dvec4  minInvocationsInclusiveScanAMD(dvec4);"
 2703|       |
 2704|     10|            "int64_t minInvocationsInclusiveScanAMD(int64_t);"
 2705|     10|            "i64vec2 minInvocationsInclusiveScanAMD(i64vec2);"
 2706|     10|            "i64vec3 minInvocationsInclusiveScanAMD(i64vec3);"
 2707|     10|            "i64vec4 minInvocationsInclusiveScanAMD(i64vec4);"
 2708|       |
 2709|     10|            "uint64_t minInvocationsInclusiveScanAMD(uint64_t);"
 2710|     10|            "u64vec2  minInvocationsInclusiveScanAMD(u64vec2);"
 2711|     10|            "u64vec3  minInvocationsInclusiveScanAMD(u64vec3);"
 2712|     10|            "u64vec4  minInvocationsInclusiveScanAMD(u64vec4);"
 2713|       |
 2714|     10|            "float16_t minInvocationsInclusiveScanAMD(float16_t);"
 2715|     10|            "f16vec2   minInvocationsInclusiveScanAMD(f16vec2);"
 2716|     10|            "f16vec3   minInvocationsInclusiveScanAMD(f16vec3);"
 2717|     10|            "f16vec4   minInvocationsInclusiveScanAMD(f16vec4);"
 2718|       |
 2719|     10|            "int16_t minInvocationsInclusiveScanAMD(int16_t);"
 2720|     10|            "i16vec2 minInvocationsInclusiveScanAMD(i16vec2);"
 2721|     10|            "i16vec3 minInvocationsInclusiveScanAMD(i16vec3);"
 2722|     10|            "i16vec4 minInvocationsInclusiveScanAMD(i16vec4);"
 2723|       |
 2724|     10|            "uint16_t minInvocationsInclusiveScanAMD(uint16_t);"
 2725|     10|            "u16vec2  minInvocationsInclusiveScanAMD(u16vec2);"
 2726|     10|            "u16vec3  minInvocationsInclusiveScanAMD(u16vec3);"
 2727|     10|            "u16vec4  minInvocationsInclusiveScanAMD(u16vec4);"
 2728|       |
 2729|     10|            "float minInvocationsExclusiveScanAMD(float);"
 2730|     10|            "vec2  minInvocationsExclusiveScanAMD(vec2);"
 2731|     10|            "vec3  minInvocationsExclusiveScanAMD(vec3);"
 2732|     10|            "vec4  minInvocationsExclusiveScanAMD(vec4);"
 2733|       |
 2734|     10|            "int   minInvocationsExclusiveScanAMD(int);"
 2735|     10|            "ivec2 minInvocationsExclusiveScanAMD(ivec2);"
 2736|     10|            "ivec3 minInvocationsExclusiveScanAMD(ivec3);"
 2737|     10|            "ivec4 minInvocationsExclusiveScanAMD(ivec4);"
 2738|       |
 2739|     10|            "uint  minInvocationsExclusiveScanAMD(uint);"
 2740|     10|            "uvec2 minInvocationsExclusiveScanAMD(uvec2);"
 2741|     10|            "uvec3 minInvocationsExclusiveScanAMD(uvec3);"
 2742|     10|            "uvec4 minInvocationsExclusiveScanAMD(uvec4);"
 2743|       |
 2744|     10|            "double minInvocationsExclusiveScanAMD(double);"
 2745|     10|            "dvec2  minInvocationsExclusiveScanAMD(dvec2);"
 2746|     10|            "dvec3  minInvocationsExclusiveScanAMD(dvec3);"
 2747|     10|            "dvec4  minInvocationsExclusiveScanAMD(dvec4);"
 2748|       |
 2749|     10|            "int64_t minInvocationsExclusiveScanAMD(int64_t);"
 2750|     10|            "i64vec2 minInvocationsExclusiveScanAMD(i64vec2);"
 2751|     10|            "i64vec3 minInvocationsExclusiveScanAMD(i64vec3);"
 2752|     10|            "i64vec4 minInvocationsExclusiveScanAMD(i64vec4);"
 2753|       |
 2754|     10|            "uint64_t minInvocationsExclusiveScanAMD(uint64_t);"
 2755|     10|            "u64vec2  minInvocationsExclusiveScanAMD(u64vec2);"
 2756|     10|            "u64vec3  minInvocationsExclusiveScanAMD(u64vec3);"
 2757|     10|            "u64vec4  minInvocationsExclusiveScanAMD(u64vec4);"
 2758|       |
 2759|     10|            "float16_t minInvocationsExclusiveScanAMD(float16_t);"
 2760|     10|            "f16vec2   minInvocationsExclusiveScanAMD(f16vec2);"
 2761|     10|            "f16vec3   minInvocationsExclusiveScanAMD(f16vec3);"
 2762|     10|            "f16vec4   minInvocationsExclusiveScanAMD(f16vec4);"
 2763|       |
 2764|     10|            "int16_t minInvocationsExclusiveScanAMD(int16_t);"
 2765|     10|            "i16vec2 minInvocationsExclusiveScanAMD(i16vec2);"
 2766|     10|            "i16vec3 minInvocationsExclusiveScanAMD(i16vec3);"
 2767|     10|            "i16vec4 minInvocationsExclusiveScanAMD(i16vec4);"
 2768|       |
 2769|     10|            "uint16_t minInvocationsExclusiveScanAMD(uint16_t);"
 2770|     10|            "u16vec2  minInvocationsExclusiveScanAMD(u16vec2);"
 2771|     10|            "u16vec3  minInvocationsExclusiveScanAMD(u16vec3);"
 2772|     10|            "u16vec4  minInvocationsExclusiveScanAMD(u16vec4);"
 2773|       |
 2774|     10|            "float maxInvocationsAMD(float);"
 2775|     10|            "vec2  maxInvocationsAMD(vec2);"
 2776|     10|            "vec3  maxInvocationsAMD(vec3);"
 2777|     10|            "vec4  maxInvocationsAMD(vec4);"
 2778|       |
 2779|     10|            "int   maxInvocationsAMD(int);"
 2780|     10|            "ivec2 maxInvocationsAMD(ivec2);"
 2781|     10|            "ivec3 maxInvocationsAMD(ivec3);"
 2782|     10|            "ivec4 maxInvocationsAMD(ivec4);"
 2783|       |
 2784|     10|            "uint  maxInvocationsAMD(uint);"
 2785|     10|            "uvec2 maxInvocationsAMD(uvec2);"
 2786|     10|            "uvec3 maxInvocationsAMD(uvec3);"
 2787|     10|            "uvec4 maxInvocationsAMD(uvec4);"
 2788|       |
 2789|     10|            "double maxInvocationsAMD(double);"
 2790|     10|            "dvec2  maxInvocationsAMD(dvec2);"
 2791|     10|            "dvec3  maxInvocationsAMD(dvec3);"
 2792|     10|            "dvec4  maxInvocationsAMD(dvec4);"
 2793|       |
 2794|     10|            "int64_t maxInvocationsAMD(int64_t);"
 2795|     10|            "i64vec2 maxInvocationsAMD(i64vec2);"
 2796|     10|            "i64vec3 maxInvocationsAMD(i64vec3);"
 2797|     10|            "i64vec4 maxInvocationsAMD(i64vec4);"
 2798|       |
 2799|     10|            "uint64_t maxInvocationsAMD(uint64_t);"
 2800|     10|            "u64vec2  maxInvocationsAMD(u64vec2);"
 2801|     10|            "u64vec3  maxInvocationsAMD(u64vec3);"
 2802|     10|            "u64vec4  maxInvocationsAMD(u64vec4);"
 2803|       |
 2804|     10|            "float16_t maxInvocationsAMD(float16_t);"
 2805|     10|            "f16vec2   maxInvocationsAMD(f16vec2);"
 2806|     10|            "f16vec3   maxInvocationsAMD(f16vec3);"
 2807|     10|            "f16vec4   maxInvocationsAMD(f16vec4);"
 2808|       |
 2809|     10|            "int16_t maxInvocationsAMD(int16_t);"
 2810|     10|            "i16vec2 maxInvocationsAMD(i16vec2);"
 2811|     10|            "i16vec3 maxInvocationsAMD(i16vec3);"
 2812|     10|            "i16vec4 maxInvocationsAMD(i16vec4);"
 2813|       |
 2814|     10|            "uint16_t maxInvocationsAMD(uint16_t);"
 2815|     10|            "u16vec2  maxInvocationsAMD(u16vec2);"
 2816|     10|            "u16vec3  maxInvocationsAMD(u16vec3);"
 2817|     10|            "u16vec4  maxInvocationsAMD(u16vec4);"
 2818|       |
 2819|     10|            "float maxInvocationsInclusiveScanAMD(float);"
 2820|     10|            "vec2  maxInvocationsInclusiveScanAMD(vec2);"
 2821|     10|            "vec3  maxInvocationsInclusiveScanAMD(vec3);"
 2822|     10|            "vec4  maxInvocationsInclusiveScanAMD(vec4);"
 2823|       |
 2824|     10|            "int   maxInvocationsInclusiveScanAMD(int);"
 2825|     10|            "ivec2 maxInvocationsInclusiveScanAMD(ivec2);"
 2826|     10|            "ivec3 maxInvocationsInclusiveScanAMD(ivec3);"
 2827|     10|            "ivec4 maxInvocationsInclusiveScanAMD(ivec4);"
 2828|       |
 2829|     10|            "uint  maxInvocationsInclusiveScanAMD(uint);"
 2830|     10|            "uvec2 maxInvocationsInclusiveScanAMD(uvec2);"
 2831|     10|            "uvec3 maxInvocationsInclusiveScanAMD(uvec3);"
 2832|     10|            "uvec4 maxInvocationsInclusiveScanAMD(uvec4);"
 2833|       |
 2834|     10|            "double maxInvocationsInclusiveScanAMD(double);"
 2835|     10|            "dvec2  maxInvocationsInclusiveScanAMD(dvec2);"
 2836|     10|            "dvec3  maxInvocationsInclusiveScanAMD(dvec3);"
 2837|     10|            "dvec4  maxInvocationsInclusiveScanAMD(dvec4);"
 2838|       |
 2839|     10|            "int64_t maxInvocationsInclusiveScanAMD(int64_t);"
 2840|     10|            "i64vec2 maxInvocationsInclusiveScanAMD(i64vec2);"
 2841|     10|            "i64vec3 maxInvocationsInclusiveScanAMD(i64vec3);"
 2842|     10|            "i64vec4 maxInvocationsInclusiveScanAMD(i64vec4);"
 2843|       |
 2844|     10|            "uint64_t maxInvocationsInclusiveScanAMD(uint64_t);"
 2845|     10|            "u64vec2  maxInvocationsInclusiveScanAMD(u64vec2);"
 2846|     10|            "u64vec3  maxInvocationsInclusiveScanAMD(u64vec3);"
 2847|     10|            "u64vec4  maxInvocationsInclusiveScanAMD(u64vec4);"
 2848|       |
 2849|     10|            "float16_t maxInvocationsInclusiveScanAMD(float16_t);"
 2850|     10|            "f16vec2   maxInvocationsInclusiveScanAMD(f16vec2);"
 2851|     10|            "f16vec3   maxInvocationsInclusiveScanAMD(f16vec3);"
 2852|     10|            "f16vec4   maxInvocationsInclusiveScanAMD(f16vec4);"
 2853|       |
 2854|     10|            "int16_t maxInvocationsInclusiveScanAMD(int16_t);"
 2855|     10|            "i16vec2 maxInvocationsInclusiveScanAMD(i16vec2);"
 2856|     10|            "i16vec3 maxInvocationsInclusiveScanAMD(i16vec3);"
 2857|     10|            "i16vec4 maxInvocationsInclusiveScanAMD(i16vec4);"
 2858|       |
 2859|     10|            "uint16_t maxInvocationsInclusiveScanAMD(uint16_t);"
 2860|     10|            "u16vec2  maxInvocationsInclusiveScanAMD(u16vec2);"
 2861|     10|            "u16vec3  maxInvocationsInclusiveScanAMD(u16vec3);"
 2862|     10|            "u16vec4  maxInvocationsInclusiveScanAMD(u16vec4);"
 2863|       |
 2864|     10|            "float maxInvocationsExclusiveScanAMD(float);"
 2865|     10|            "vec2  maxInvocationsExclusiveScanAMD(vec2);"
 2866|     10|            "vec3  maxInvocationsExclusiveScanAMD(vec3);"
 2867|     10|            "vec4  maxInvocationsExclusiveScanAMD(vec4);"
 2868|       |
 2869|     10|            "int   maxInvocationsExclusiveScanAMD(int);"
 2870|     10|            "ivec2 maxInvocationsExclusiveScanAMD(ivec2);"
 2871|     10|            "ivec3 maxInvocationsExclusiveScanAMD(ivec3);"
 2872|     10|            "ivec4 maxInvocationsExclusiveScanAMD(ivec4);"
 2873|       |
 2874|     10|            "uint  maxInvocationsExclusiveScanAMD(uint);"
 2875|     10|            "uvec2 maxInvocationsExclusiveScanAMD(uvec2);"
 2876|     10|            "uvec3 maxInvocationsExclusiveScanAMD(uvec3);"
 2877|     10|            "uvec4 maxInvocationsExclusiveScanAMD(uvec4);"
 2878|       |
 2879|     10|            "double maxInvocationsExclusiveScanAMD(double);"
 2880|     10|            "dvec2  maxInvocationsExclusiveScanAMD(dvec2);"
 2881|     10|            "dvec3  maxInvocationsExclusiveScanAMD(dvec3);"
 2882|     10|            "dvec4  maxInvocationsExclusiveScanAMD(dvec4);"
 2883|       |
 2884|     10|            "int64_t maxInvocationsExclusiveScanAMD(int64_t);"
 2885|     10|            "i64vec2 maxInvocationsExclusiveScanAMD(i64vec2);"
 2886|     10|            "i64vec3 maxInvocationsExclusiveScanAMD(i64vec3);"
 2887|     10|            "i64vec4 maxInvocationsExclusiveScanAMD(i64vec4);"
 2888|       |
 2889|     10|            "uint64_t maxInvocationsExclusiveScanAMD(uint64_t);"
 2890|     10|            "u64vec2  maxInvocationsExclusiveScanAMD(u64vec2);"
 2891|     10|            "u64vec3  maxInvocationsExclusiveScanAMD(u64vec3);"
 2892|     10|            "u64vec4  maxInvocationsExclusiveScanAMD(u64vec4);"
 2893|       |
 2894|     10|            "float16_t maxInvocationsExclusiveScanAMD(float16_t);"
 2895|     10|            "f16vec2   maxInvocationsExclusiveScanAMD(f16vec2);"
 2896|     10|            "f16vec3   maxInvocationsExclusiveScanAMD(f16vec3);"
 2897|     10|            "f16vec4   maxInvocationsExclusiveScanAMD(f16vec4);"
 2898|       |
 2899|     10|            "int16_t maxInvocationsExclusiveScanAMD(int16_t);"
 2900|     10|            "i16vec2 maxInvocationsExclusiveScanAMD(i16vec2);"
 2901|     10|            "i16vec3 maxInvocationsExclusiveScanAMD(i16vec3);"
 2902|     10|            "i16vec4 maxInvocationsExclusiveScanAMD(i16vec4);"
 2903|       |
 2904|     10|            "uint16_t maxInvocationsExclusiveScanAMD(uint16_t);"
 2905|     10|            "u16vec2  maxInvocationsExclusiveScanAMD(u16vec2);"
 2906|     10|            "u16vec3  maxInvocationsExclusiveScanAMD(u16vec3);"
 2907|     10|            "u16vec4  maxInvocationsExclusiveScanAMD(u16vec4);"
 2908|       |
 2909|     10|            "float addInvocationsAMD(float);"
 2910|     10|            "vec2  addInvocationsAMD(vec2);"
 2911|     10|            "vec3  addInvocationsAMD(vec3);"
 2912|     10|            "vec4  addInvocationsAMD(vec4);"
 2913|       |
 2914|     10|            "int   addInvocationsAMD(int);"
 2915|     10|            "ivec2 addInvocationsAMD(ivec2);"
 2916|     10|            "ivec3 addInvocationsAMD(ivec3);"
 2917|     10|            "ivec4 addInvocationsAMD(ivec4);"
 2918|       |
 2919|     10|            "uint  addInvocationsAMD(uint);"
 2920|     10|            "uvec2 addInvocationsAMD(uvec2);"
 2921|     10|            "uvec3 addInvocationsAMD(uvec3);"
 2922|     10|            "uvec4 addInvocationsAMD(uvec4);"
 2923|       |
 2924|     10|            "double  addInvocationsAMD(double);"
 2925|     10|            "dvec2   addInvocationsAMD(dvec2);"
 2926|     10|            "dvec3   addInvocationsAMD(dvec3);"
 2927|     10|            "dvec4   addInvocationsAMD(dvec4);"
 2928|       |
 2929|     10|            "int64_t addInvocationsAMD(int64_t);"
 2930|     10|            "i64vec2 addInvocationsAMD(i64vec2);"
 2931|     10|            "i64vec3 addInvocationsAMD(i64vec3);"
 2932|     10|            "i64vec4 addInvocationsAMD(i64vec4);"
 2933|       |
 2934|     10|            "uint64_t addInvocationsAMD(uint64_t);"
 2935|     10|            "u64vec2  addInvocationsAMD(u64vec2);"
 2936|     10|            "u64vec3  addInvocationsAMD(u64vec3);"
 2937|     10|            "u64vec4  addInvocationsAMD(u64vec4);"
 2938|       |
 2939|     10|            "float16_t addInvocationsAMD(float16_t);"
 2940|     10|            "f16vec2   addInvocationsAMD(f16vec2);"
 2941|     10|            "f16vec3   addInvocationsAMD(f16vec3);"
 2942|     10|            "f16vec4   addInvocationsAMD(f16vec4);"
 2943|       |
 2944|     10|            "int16_t addInvocationsAMD(int16_t);"
 2945|     10|            "i16vec2 addInvocationsAMD(i16vec2);"
 2946|     10|            "i16vec3 addInvocationsAMD(i16vec3);"
 2947|     10|            "i16vec4 addInvocationsAMD(i16vec4);"
 2948|       |
 2949|     10|            "uint16_t addInvocationsAMD(uint16_t);"
 2950|     10|            "u16vec2  addInvocationsAMD(u16vec2);"
 2951|     10|            "u16vec3  addInvocationsAMD(u16vec3);"
 2952|     10|            "u16vec4  addInvocationsAMD(u16vec4);"
 2953|       |
 2954|     10|            "float addInvocationsInclusiveScanAMD(float);"
 2955|     10|            "vec2  addInvocationsInclusiveScanAMD(vec2);"
 2956|     10|            "vec3  addInvocationsInclusiveScanAMD(vec3);"
 2957|     10|            "vec4  addInvocationsInclusiveScanAMD(vec4);"
 2958|       |
 2959|     10|            "int   addInvocationsInclusiveScanAMD(int);"
 2960|     10|            "ivec2 addInvocationsInclusiveScanAMD(ivec2);"
 2961|     10|            "ivec3 addInvocationsInclusiveScanAMD(ivec3);"
 2962|     10|            "ivec4 addInvocationsInclusiveScanAMD(ivec4);"
 2963|       |
 2964|     10|            "uint  addInvocationsInclusiveScanAMD(uint);"
 2965|     10|            "uvec2 addInvocationsInclusiveScanAMD(uvec2);"
 2966|     10|            "uvec3 addInvocationsInclusiveScanAMD(uvec3);"
 2967|     10|            "uvec4 addInvocationsInclusiveScanAMD(uvec4);"
 2968|       |
 2969|     10|            "double  addInvocationsInclusiveScanAMD(double);"
 2970|     10|            "dvec2   addInvocationsInclusiveScanAMD(dvec2);"
 2971|     10|            "dvec3   addInvocationsInclusiveScanAMD(dvec3);"
 2972|     10|            "dvec4   addInvocationsInclusiveScanAMD(dvec4);"
 2973|       |
 2974|     10|            "int64_t addInvocationsInclusiveScanAMD(int64_t);"
 2975|     10|            "i64vec2 addInvocationsInclusiveScanAMD(i64vec2);"
 2976|     10|            "i64vec3 addInvocationsInclusiveScanAMD(i64vec3);"
 2977|     10|            "i64vec4 addInvocationsInclusiveScanAMD(i64vec4);"
 2978|       |
 2979|     10|            "uint64_t addInvocationsInclusiveScanAMD(uint64_t);"
 2980|     10|            "u64vec2  addInvocationsInclusiveScanAMD(u64vec2);"
 2981|     10|            "u64vec3  addInvocationsInclusiveScanAMD(u64vec3);"
 2982|     10|            "u64vec4  addInvocationsInclusiveScanAMD(u64vec4);"
 2983|       |
 2984|     10|            "float16_t addInvocationsInclusiveScanAMD(float16_t);"
 2985|     10|            "f16vec2   addInvocationsInclusiveScanAMD(f16vec2);"
 2986|     10|            "f16vec3   addInvocationsInclusiveScanAMD(f16vec3);"
 2987|     10|            "f16vec4   addInvocationsInclusiveScanAMD(f16vec4);"
 2988|       |
 2989|     10|            "int16_t addInvocationsInclusiveScanAMD(int16_t);"
 2990|     10|            "i16vec2 addInvocationsInclusiveScanAMD(i16vec2);"
 2991|     10|            "i16vec3 addInvocationsInclusiveScanAMD(i16vec3);"
 2992|     10|            "i16vec4 addInvocationsInclusiveScanAMD(i16vec4);"
 2993|       |
 2994|     10|            "uint16_t addInvocationsInclusiveScanAMD(uint16_t);"
 2995|     10|            "u16vec2  addInvocationsInclusiveScanAMD(u16vec2);"
 2996|     10|            "u16vec3  addInvocationsInclusiveScanAMD(u16vec3);"
 2997|     10|            "u16vec4  addInvocationsInclusiveScanAMD(u16vec4);"
 2998|       |
 2999|     10|            "float addInvocationsExclusiveScanAMD(float);"
 3000|     10|            "vec2  addInvocationsExclusiveScanAMD(vec2);"
 3001|     10|            "vec3  addInvocationsExclusiveScanAMD(vec3);"
 3002|     10|            "vec4  addInvocationsExclusiveScanAMD(vec4);"
 3003|       |
 3004|     10|            "int   addInvocationsExclusiveScanAMD(int);"
 3005|     10|            "ivec2 addInvocationsExclusiveScanAMD(ivec2);"
 3006|     10|            "ivec3 addInvocationsExclusiveScanAMD(ivec3);"
 3007|     10|            "ivec4 addInvocationsExclusiveScanAMD(ivec4);"
 3008|       |
 3009|     10|            "uint  addInvocationsExclusiveScanAMD(uint);"
 3010|     10|            "uvec2 addInvocationsExclusiveScanAMD(uvec2);"
 3011|     10|            "uvec3 addInvocationsExclusiveScanAMD(uvec3);"
 3012|     10|            "uvec4 addInvocationsExclusiveScanAMD(uvec4);"
 3013|       |
 3014|     10|            "double  addInvocationsExclusiveScanAMD(double);"
 3015|     10|            "dvec2   addInvocationsExclusiveScanAMD(dvec2);"
 3016|     10|            "dvec3   addInvocationsExclusiveScanAMD(dvec3);"
 3017|     10|            "dvec4   addInvocationsExclusiveScanAMD(dvec4);"
 3018|       |
 3019|     10|            "int64_t addInvocationsExclusiveScanAMD(int64_t);"
 3020|     10|            "i64vec2 addInvocationsExclusiveScanAMD(i64vec2);"
 3021|     10|            "i64vec3 addInvocationsExclusiveScanAMD(i64vec3);"
 3022|     10|            "i64vec4 addInvocationsExclusiveScanAMD(i64vec4);"
 3023|       |
 3024|     10|            "uint64_t addInvocationsExclusiveScanAMD(uint64_t);"
 3025|     10|            "u64vec2  addInvocationsExclusiveScanAMD(u64vec2);"
 3026|     10|            "u64vec3  addInvocationsExclusiveScanAMD(u64vec3);"
 3027|     10|            "u64vec4  addInvocationsExclusiveScanAMD(u64vec4);"
 3028|       |
 3029|     10|            "float16_t addInvocationsExclusiveScanAMD(float16_t);"
 3030|     10|            "f16vec2   addInvocationsExclusiveScanAMD(f16vec2);"
 3031|     10|            "f16vec3   addInvocationsExclusiveScanAMD(f16vec3);"
 3032|     10|            "f16vec4   addInvocationsExclusiveScanAMD(f16vec4);"
 3033|       |
 3034|     10|            "int16_t addInvocationsExclusiveScanAMD(int16_t);"
 3035|     10|            "i16vec2 addInvocationsExclusiveScanAMD(i16vec2);"
 3036|     10|            "i16vec3 addInvocationsExclusiveScanAMD(i16vec3);"
 3037|     10|            "i16vec4 addInvocationsExclusiveScanAMD(i16vec4);"
 3038|       |
 3039|     10|            "uint16_t addInvocationsExclusiveScanAMD(uint16_t);"
 3040|     10|            "u16vec2  addInvocationsExclusiveScanAMD(u16vec2);"
 3041|     10|            "u16vec3  addInvocationsExclusiveScanAMD(u16vec3);"
 3042|     10|            "u16vec4  addInvocationsExclusiveScanAMD(u16vec4);"
 3043|       |
 3044|     10|            "float minInvocationsNonUniformAMD(float);"
 3045|     10|            "vec2  minInvocationsNonUniformAMD(vec2);"
 3046|     10|            "vec3  minInvocationsNonUniformAMD(vec3);"
 3047|     10|            "vec4  minInvocationsNonUniformAMD(vec4);"
 3048|       |
 3049|     10|            "int   minInvocationsNonUniformAMD(int);"
 3050|     10|            "ivec2 minInvocationsNonUniformAMD(ivec2);"
 3051|     10|            "ivec3 minInvocationsNonUniformAMD(ivec3);"
 3052|     10|            "ivec4 minInvocationsNonUniformAMD(ivec4);"
 3053|       |
 3054|     10|            "uint  minInvocationsNonUniformAMD(uint);"
 3055|     10|            "uvec2 minInvocationsNonUniformAMD(uvec2);"
 3056|     10|            "uvec3 minInvocationsNonUniformAMD(uvec3);"
 3057|     10|            "uvec4 minInvocationsNonUniformAMD(uvec4);"
 3058|       |
 3059|     10|            "double minInvocationsNonUniformAMD(double);"
 3060|     10|            "dvec2  minInvocationsNonUniformAMD(dvec2);"
 3061|     10|            "dvec3  minInvocationsNonUniformAMD(dvec3);"
 3062|     10|            "dvec4  minInvocationsNonUniformAMD(dvec4);"
 3063|       |
 3064|     10|            "int64_t minInvocationsNonUniformAMD(int64_t);"
 3065|     10|            "i64vec2 minInvocationsNonUniformAMD(i64vec2);"
 3066|     10|            "i64vec3 minInvocationsNonUniformAMD(i64vec3);"
 3067|     10|            "i64vec4 minInvocationsNonUniformAMD(i64vec4);"
 3068|       |
 3069|     10|            "uint64_t minInvocationsNonUniformAMD(uint64_t);"
 3070|     10|            "u64vec2  minInvocationsNonUniformAMD(u64vec2);"
 3071|     10|            "u64vec3  minInvocationsNonUniformAMD(u64vec3);"
 3072|     10|            "u64vec4  minInvocationsNonUniformAMD(u64vec4);"
 3073|       |
 3074|     10|            "float16_t minInvocationsNonUniformAMD(float16_t);"
 3075|     10|            "f16vec2   minInvocationsNonUniformAMD(f16vec2);"
 3076|     10|            "f16vec3   minInvocationsNonUniformAMD(f16vec3);"
 3077|     10|            "f16vec4   minInvocationsNonUniformAMD(f16vec4);"
 3078|       |
 3079|     10|            "int16_t minInvocationsNonUniformAMD(int16_t);"
 3080|     10|            "i16vec2 minInvocationsNonUniformAMD(i16vec2);"
 3081|     10|            "i16vec3 minInvocationsNonUniformAMD(i16vec3);"
 3082|     10|            "i16vec4 minInvocationsNonUniformAMD(i16vec4);"
 3083|       |
 3084|     10|            "uint16_t minInvocationsNonUniformAMD(uint16_t);"
 3085|     10|            "u16vec2  minInvocationsNonUniformAMD(u16vec2);"
 3086|     10|            "u16vec3  minInvocationsNonUniformAMD(u16vec3);"
 3087|     10|            "u16vec4  minInvocationsNonUniformAMD(u16vec4);"
 3088|       |
 3089|     10|            "float minInvocationsInclusiveScanNonUniformAMD(float);"
 3090|     10|            "vec2  minInvocationsInclusiveScanNonUniformAMD(vec2);"
 3091|     10|            "vec3  minInvocationsInclusiveScanNonUniformAMD(vec3);"
 3092|     10|            "vec4  minInvocationsInclusiveScanNonUniformAMD(vec4);"
 3093|       |
 3094|     10|            "int   minInvocationsInclusiveScanNonUniformAMD(int);"
 3095|     10|            "ivec2 minInvocationsInclusiveScanNonUniformAMD(ivec2);"
 3096|     10|            "ivec3 minInvocationsInclusiveScanNonUniformAMD(ivec3);"
 3097|     10|            "ivec4 minInvocationsInclusiveScanNonUniformAMD(ivec4);"
 3098|       |
 3099|     10|            "uint  minInvocationsInclusiveScanNonUniformAMD(uint);"
 3100|     10|            "uvec2 minInvocationsInclusiveScanNonUniformAMD(uvec2);"
 3101|     10|            "uvec3 minInvocationsInclusiveScanNonUniformAMD(uvec3);"
 3102|     10|            "uvec4 minInvocationsInclusiveScanNonUniformAMD(uvec4);"
 3103|       |
 3104|     10|            "double minInvocationsInclusiveScanNonUniformAMD(double);"
 3105|     10|            "dvec2  minInvocationsInclusiveScanNonUniformAMD(dvec2);"
 3106|     10|            "dvec3  minInvocationsInclusiveScanNonUniformAMD(dvec3);"
 3107|     10|            "dvec4  minInvocationsInclusiveScanNonUniformAMD(dvec4);"
 3108|       |
 3109|     10|            "int64_t minInvocationsInclusiveScanNonUniformAMD(int64_t);"
 3110|     10|            "i64vec2 minInvocationsInclusiveScanNonUniformAMD(i64vec2);"
 3111|     10|            "i64vec3 minInvocationsInclusiveScanNonUniformAMD(i64vec3);"
 3112|     10|            "i64vec4 minInvocationsInclusiveScanNonUniformAMD(i64vec4);"
 3113|       |
 3114|     10|            "uint64_t minInvocationsInclusiveScanNonUniformAMD(uint64_t);"
 3115|     10|            "u64vec2  minInvocationsInclusiveScanNonUniformAMD(u64vec2);"
 3116|     10|            "u64vec3  minInvocationsInclusiveScanNonUniformAMD(u64vec3);"
 3117|     10|            "u64vec4  minInvocationsInclusiveScanNonUniformAMD(u64vec4);"
 3118|       |
 3119|     10|            "float16_t minInvocationsInclusiveScanNonUniformAMD(float16_t);"
 3120|     10|            "f16vec2   minInvocationsInclusiveScanNonUniformAMD(f16vec2);"
 3121|     10|            "f16vec3   minInvocationsInclusiveScanNonUniformAMD(f16vec3);"
 3122|     10|            "f16vec4   minInvocationsInclusiveScanNonUniformAMD(f16vec4);"
 3123|       |
 3124|     10|            "int16_t minInvocationsInclusiveScanNonUniformAMD(int16_t);"
 3125|     10|            "i16vec2 minInvocationsInclusiveScanNonUniformAMD(i16vec2);"
 3126|     10|            "i16vec3 minInvocationsInclusiveScanNonUniformAMD(i16vec3);"
 3127|     10|            "i16vec4 minInvocationsInclusiveScanNonUniformAMD(i16vec4);"
 3128|       |
 3129|     10|            "uint16_t minInvocationsInclusiveScanNonUniformAMD(uint16_t);"
 3130|     10|            "u16vec2  minInvocationsInclusiveScanNonUniformAMD(u16vec2);"
 3131|     10|            "u16vec3  minInvocationsInclusiveScanNonUniformAMD(u16vec3);"
 3132|     10|            "u16vec4  minInvocationsInclusiveScanNonUniformAMD(u16vec4);"
 3133|       |
 3134|     10|            "float minInvocationsExclusiveScanNonUniformAMD(float);"
 3135|     10|            "vec2  minInvocationsExclusiveScanNonUniformAMD(vec2);"
 3136|     10|            "vec3  minInvocationsExclusiveScanNonUniformAMD(vec3);"
 3137|     10|            "vec4  minInvocationsExclusiveScanNonUniformAMD(vec4);"
 3138|       |
 3139|     10|            "int   minInvocationsExclusiveScanNonUniformAMD(int);"
 3140|     10|            "ivec2 minInvocationsExclusiveScanNonUniformAMD(ivec2);"
 3141|     10|            "ivec3 minInvocationsExclusiveScanNonUniformAMD(ivec3);"
 3142|     10|            "ivec4 minInvocationsExclusiveScanNonUniformAMD(ivec4);"
 3143|       |
 3144|     10|            "uint  minInvocationsExclusiveScanNonUniformAMD(uint);"
 3145|     10|            "uvec2 minInvocationsExclusiveScanNonUniformAMD(uvec2);"
 3146|     10|            "uvec3 minInvocationsExclusiveScanNonUniformAMD(uvec3);"
 3147|     10|            "uvec4 minInvocationsExclusiveScanNonUniformAMD(uvec4);"
 3148|       |
 3149|     10|            "double minInvocationsExclusiveScanNonUniformAMD(double);"
 3150|     10|            "dvec2  minInvocationsExclusiveScanNonUniformAMD(dvec2);"
 3151|     10|            "dvec3  minInvocationsExclusiveScanNonUniformAMD(dvec3);"
 3152|     10|            "dvec4  minInvocationsExclusiveScanNonUniformAMD(dvec4);"
 3153|       |
 3154|     10|            "int64_t minInvocationsExclusiveScanNonUniformAMD(int64_t);"
 3155|     10|            "i64vec2 minInvocationsExclusiveScanNonUniformAMD(i64vec2);"
 3156|     10|            "i64vec3 minInvocationsExclusiveScanNonUniformAMD(i64vec3);"
 3157|     10|            "i64vec4 minInvocationsExclusiveScanNonUniformAMD(i64vec4);"
 3158|       |
 3159|     10|            "uint64_t minInvocationsExclusiveScanNonUniformAMD(uint64_t);"
 3160|     10|            "u64vec2  minInvocationsExclusiveScanNonUniformAMD(u64vec2);"
 3161|     10|            "u64vec3  minInvocationsExclusiveScanNonUniformAMD(u64vec3);"
 3162|     10|            "u64vec4  minInvocationsExclusiveScanNonUniformAMD(u64vec4);"
 3163|       |
 3164|     10|            "float16_t minInvocationsExclusiveScanNonUniformAMD(float16_t);"
 3165|     10|            "f16vec2   minInvocationsExclusiveScanNonUniformAMD(f16vec2);"
 3166|     10|            "f16vec3   minInvocationsExclusiveScanNonUniformAMD(f16vec3);"
 3167|     10|            "f16vec4   minInvocationsExclusiveScanNonUniformAMD(f16vec4);"
 3168|       |
 3169|     10|            "int16_t minInvocationsExclusiveScanNonUniformAMD(int16_t);"
 3170|     10|            "i16vec2 minInvocationsExclusiveScanNonUniformAMD(i16vec2);"
 3171|     10|            "i16vec3 minInvocationsExclusiveScanNonUniformAMD(i16vec3);"
 3172|     10|            "i16vec4 minInvocationsExclusiveScanNonUniformAMD(i16vec4);"
 3173|       |
 3174|     10|            "uint16_t minInvocationsExclusiveScanNonUniformAMD(uint16_t);"
 3175|     10|            "u16vec2  minInvocationsExclusiveScanNonUniformAMD(u16vec2);"
 3176|     10|            "u16vec3  minInvocationsExclusiveScanNonUniformAMD(u16vec3);"
 3177|     10|            "u16vec4  minInvocationsExclusiveScanNonUniformAMD(u16vec4);"
 3178|       |
 3179|     10|            "float maxInvocationsNonUniformAMD(float);"
 3180|     10|            "vec2  maxInvocationsNonUniformAMD(vec2);"
 3181|     10|            "vec3  maxInvocationsNonUniformAMD(vec3);"
 3182|     10|            "vec4  maxInvocationsNonUniformAMD(vec4);"
 3183|       |
 3184|     10|            "int   maxInvocationsNonUniformAMD(int);"
 3185|     10|            "ivec2 maxInvocationsNonUniformAMD(ivec2);"
 3186|     10|            "ivec3 maxInvocationsNonUniformAMD(ivec3);"
 3187|     10|            "ivec4 maxInvocationsNonUniformAMD(ivec4);"
 3188|       |
 3189|     10|            "uint  maxInvocationsNonUniformAMD(uint);"
 3190|     10|            "uvec2 maxInvocationsNonUniformAMD(uvec2);"
 3191|     10|            "uvec3 maxInvocationsNonUniformAMD(uvec3);"
 3192|     10|            "uvec4 maxInvocationsNonUniformAMD(uvec4);"
 3193|       |
 3194|     10|            "double maxInvocationsNonUniformAMD(double);"
 3195|     10|            "dvec2  maxInvocationsNonUniformAMD(dvec2);"
 3196|     10|            "dvec3  maxInvocationsNonUniformAMD(dvec3);"
 3197|     10|            "dvec4  maxInvocationsNonUniformAMD(dvec4);"
 3198|       |
 3199|     10|            "int64_t maxInvocationsNonUniformAMD(int64_t);"
 3200|     10|            "i64vec2 maxInvocationsNonUniformAMD(i64vec2);"
 3201|     10|            "i64vec3 maxInvocationsNonUniformAMD(i64vec3);"
 3202|     10|            "i64vec4 maxInvocationsNonUniformAMD(i64vec4);"
 3203|       |
 3204|     10|            "uint64_t maxInvocationsNonUniformAMD(uint64_t);"
 3205|     10|            "u64vec2  maxInvocationsNonUniformAMD(u64vec2);"
 3206|     10|            "u64vec3  maxInvocationsNonUniformAMD(u64vec3);"
 3207|     10|            "u64vec4  maxInvocationsNonUniformAMD(u64vec4);"
 3208|       |
 3209|     10|            "float16_t maxInvocationsNonUniformAMD(float16_t);"
 3210|     10|            "f16vec2   maxInvocationsNonUniformAMD(f16vec2);"
 3211|     10|            "f16vec3   maxInvocationsNonUniformAMD(f16vec3);"
 3212|     10|            "f16vec4   maxInvocationsNonUniformAMD(f16vec4);"
 3213|       |
 3214|     10|            "int16_t maxInvocationsNonUniformAMD(int16_t);"
 3215|     10|            "i16vec2 maxInvocationsNonUniformAMD(i16vec2);"
 3216|     10|            "i16vec3 maxInvocationsNonUniformAMD(i16vec3);"
 3217|     10|            "i16vec4 maxInvocationsNonUniformAMD(i16vec4);"
 3218|       |
 3219|     10|            "uint16_t maxInvocationsNonUniformAMD(uint16_t);"
 3220|     10|            "u16vec2  maxInvocationsNonUniformAMD(u16vec2);"
 3221|     10|            "u16vec3  maxInvocationsNonUniformAMD(u16vec3);"
 3222|     10|            "u16vec4  maxInvocationsNonUniformAMD(u16vec4);"
 3223|       |
 3224|     10|            "float maxInvocationsInclusiveScanNonUniformAMD(float);"
 3225|     10|            "vec2  maxInvocationsInclusiveScanNonUniformAMD(vec2);"
 3226|     10|            "vec3  maxInvocationsInclusiveScanNonUniformAMD(vec3);"
 3227|     10|            "vec4  maxInvocationsInclusiveScanNonUniformAMD(vec4);"
 3228|       |
 3229|     10|            "int   maxInvocationsInclusiveScanNonUniformAMD(int);"
 3230|     10|            "ivec2 maxInvocationsInclusiveScanNonUniformAMD(ivec2);"
 3231|     10|            "ivec3 maxInvocationsInclusiveScanNonUniformAMD(ivec3);"
 3232|     10|            "ivec4 maxInvocationsInclusiveScanNonUniformAMD(ivec4);"
 3233|       |
 3234|     10|            "uint  maxInvocationsInclusiveScanNonUniformAMD(uint);"
 3235|     10|            "uvec2 maxInvocationsInclusiveScanNonUniformAMD(uvec2);"
 3236|     10|            "uvec3 maxInvocationsInclusiveScanNonUniformAMD(uvec3);"
 3237|     10|            "uvec4 maxInvocationsInclusiveScanNonUniformAMD(uvec4);"
 3238|       |
 3239|     10|            "double maxInvocationsInclusiveScanNonUniformAMD(double);"
 3240|     10|            "dvec2  maxInvocationsInclusiveScanNonUniformAMD(dvec2);"
 3241|     10|            "dvec3  maxInvocationsInclusiveScanNonUniformAMD(dvec3);"
 3242|     10|            "dvec4  maxInvocationsInclusiveScanNonUniformAMD(dvec4);"
 3243|       |
 3244|     10|            "int64_t maxInvocationsInclusiveScanNonUniformAMD(int64_t);"
 3245|     10|            "i64vec2 maxInvocationsInclusiveScanNonUniformAMD(i64vec2);"
 3246|     10|            "i64vec3 maxInvocationsInclusiveScanNonUniformAMD(i64vec3);"
 3247|     10|            "i64vec4 maxInvocationsInclusiveScanNonUniformAMD(i64vec4);"
 3248|       |
 3249|     10|            "uint64_t maxInvocationsInclusiveScanNonUniformAMD(uint64_t);"
 3250|     10|            "u64vec2  maxInvocationsInclusiveScanNonUniformAMD(u64vec2);"
 3251|     10|            "u64vec3  maxInvocationsInclusiveScanNonUniformAMD(u64vec3);"
 3252|     10|            "u64vec4  maxInvocationsInclusiveScanNonUniformAMD(u64vec4);"
 3253|       |
 3254|     10|            "float16_t maxInvocationsInclusiveScanNonUniformAMD(float16_t);"
 3255|     10|            "f16vec2   maxInvocationsInclusiveScanNonUniformAMD(f16vec2);"
 3256|     10|            "f16vec3   maxInvocationsInclusiveScanNonUniformAMD(f16vec3);"
 3257|     10|            "f16vec4   maxInvocationsInclusiveScanNonUniformAMD(f16vec4);"
 3258|       |
 3259|     10|            "int16_t maxInvocationsInclusiveScanNonUniformAMD(int16_t);"
 3260|     10|            "i16vec2 maxInvocationsInclusiveScanNonUniformAMD(i16vec2);"
 3261|     10|            "i16vec3 maxInvocationsInclusiveScanNonUniformAMD(i16vec3);"
 3262|     10|            "i16vec4 maxInvocationsInclusiveScanNonUniformAMD(i16vec4);"
 3263|       |
 3264|     10|            "uint16_t maxInvocationsInclusiveScanNonUniformAMD(uint16_t);"
 3265|     10|            "u16vec2  maxInvocationsInclusiveScanNonUniformAMD(u16vec2);"
 3266|     10|            "u16vec3  maxInvocationsInclusiveScanNonUniformAMD(u16vec3);"
 3267|     10|            "u16vec4  maxInvocationsInclusiveScanNonUniformAMD(u16vec4);"
 3268|       |
 3269|     10|            "float maxInvocationsExclusiveScanNonUniformAMD(float);"
 3270|     10|            "vec2  maxInvocationsExclusiveScanNonUniformAMD(vec2);"
 3271|     10|            "vec3  maxInvocationsExclusiveScanNonUniformAMD(vec3);"
 3272|     10|            "vec4  maxInvocationsExclusiveScanNonUniformAMD(vec4);"
 3273|       |
 3274|     10|            "int   maxInvocationsExclusiveScanNonUniformAMD(int);"
 3275|     10|            "ivec2 maxInvocationsExclusiveScanNonUniformAMD(ivec2);"
 3276|     10|            "ivec3 maxInvocationsExclusiveScanNonUniformAMD(ivec3);"
 3277|     10|            "ivec4 maxInvocationsExclusiveScanNonUniformAMD(ivec4);"
 3278|       |
 3279|     10|            "uint  maxInvocationsExclusiveScanNonUniformAMD(uint);"
 3280|     10|            "uvec2 maxInvocationsExclusiveScanNonUniformAMD(uvec2);"
 3281|     10|            "uvec3 maxInvocationsExclusiveScanNonUniformAMD(uvec3);"
 3282|     10|            "uvec4 maxInvocationsExclusiveScanNonUniformAMD(uvec4);"
 3283|       |
 3284|     10|            "double maxInvocationsExclusiveScanNonUniformAMD(double);"
 3285|     10|            "dvec2  maxInvocationsExclusiveScanNonUniformAMD(dvec2);"
 3286|     10|            "dvec3  maxInvocationsExclusiveScanNonUniformAMD(dvec3);"
 3287|     10|            "dvec4  maxInvocationsExclusiveScanNonUniformAMD(dvec4);"
 3288|       |
 3289|     10|            "int64_t maxInvocationsExclusiveScanNonUniformAMD(int64_t);"
 3290|     10|            "i64vec2 maxInvocationsExclusiveScanNonUniformAMD(i64vec2);"
 3291|     10|            "i64vec3 maxInvocationsExclusiveScanNonUniformAMD(i64vec3);"
 3292|     10|            "i64vec4 maxInvocationsExclusiveScanNonUniformAMD(i64vec4);"
 3293|       |
 3294|     10|            "uint64_t maxInvocationsExclusiveScanNonUniformAMD(uint64_t);"
 3295|     10|            "u64vec2  maxInvocationsExclusiveScanNonUniformAMD(u64vec2);"
 3296|     10|            "u64vec3  maxInvocationsExclusiveScanNonUniformAMD(u64vec3);"
 3297|     10|            "u64vec4  maxInvocationsExclusiveScanNonUniformAMD(u64vec4);"
 3298|       |
 3299|     10|            "float16_t maxInvocationsExclusiveScanNonUniformAMD(float16_t);"
 3300|     10|            "f16vec2   maxInvocationsExclusiveScanNonUniformAMD(f16vec2);"
 3301|     10|            "f16vec3   maxInvocationsExclusiveScanNonUniformAMD(f16vec3);"
 3302|     10|            "f16vec4   maxInvocationsExclusiveScanNonUniformAMD(f16vec4);"
 3303|       |
 3304|     10|            "int16_t maxInvocationsExclusiveScanNonUniformAMD(int16_t);"
 3305|     10|            "i16vec2 maxInvocationsExclusiveScanNonUniformAMD(i16vec2);"
 3306|     10|            "i16vec3 maxInvocationsExclusiveScanNonUniformAMD(i16vec3);"
 3307|     10|            "i16vec4 maxInvocationsExclusiveScanNonUniformAMD(i16vec4);"
 3308|       |
 3309|     10|            "uint16_t maxInvocationsExclusiveScanNonUniformAMD(uint16_t);"
 3310|     10|            "u16vec2  maxInvocationsExclusiveScanNonUniformAMD(u16vec2);"
 3311|     10|            "u16vec3  maxInvocationsExclusiveScanNonUniformAMD(u16vec3);"
 3312|     10|            "u16vec4  maxInvocationsExclusiveScanNonUniformAMD(u16vec4);"
 3313|       |
 3314|     10|            "float addInvocationsNonUniformAMD(float);"
 3315|     10|            "vec2  addInvocationsNonUniformAMD(vec2);"
 3316|     10|            "vec3  addInvocationsNonUniformAMD(vec3);"
 3317|     10|            "vec4  addInvocationsNonUniformAMD(vec4);"
 3318|       |
 3319|     10|            "int   addInvocationsNonUniformAMD(int);"
 3320|     10|            "ivec2 addInvocationsNonUniformAMD(ivec2);"
 3321|     10|            "ivec3 addInvocationsNonUniformAMD(ivec3);"
 3322|     10|            "ivec4 addInvocationsNonUniformAMD(ivec4);"
 3323|       |
 3324|     10|            "uint  addInvocationsNonUniformAMD(uint);"
 3325|     10|            "uvec2 addInvocationsNonUniformAMD(uvec2);"
 3326|     10|            "uvec3 addInvocationsNonUniformAMD(uvec3);"
 3327|     10|            "uvec4 addInvocationsNonUniformAMD(uvec4);"
 3328|       |
 3329|     10|            "double addInvocationsNonUniformAMD(double);"
 3330|     10|            "dvec2  addInvocationsNonUniformAMD(dvec2);"
 3331|     10|            "dvec3  addInvocationsNonUniformAMD(dvec3);"
 3332|     10|            "dvec4  addInvocationsNonUniformAMD(dvec4);"
 3333|       |
 3334|     10|            "int64_t addInvocationsNonUniformAMD(int64_t);"
 3335|     10|            "i64vec2 addInvocationsNonUniformAMD(i64vec2);"
 3336|     10|            "i64vec3 addInvocationsNonUniformAMD(i64vec3);"
 3337|     10|            "i64vec4 addInvocationsNonUniformAMD(i64vec4);"
 3338|       |
 3339|     10|            "uint64_t addInvocationsNonUniformAMD(uint64_t);"
 3340|     10|            "u64vec2  addInvocationsNonUniformAMD(u64vec2);"
 3341|     10|            "u64vec3  addInvocationsNonUniformAMD(u64vec3);"
 3342|     10|            "u64vec4  addInvocationsNonUniformAMD(u64vec4);"
 3343|       |
 3344|     10|            "float16_t addInvocationsNonUniformAMD(float16_t);"
 3345|     10|            "f16vec2   addInvocationsNonUniformAMD(f16vec2);"
 3346|     10|            "f16vec3   addInvocationsNonUniformAMD(f16vec3);"
 3347|     10|            "f16vec4   addInvocationsNonUniformAMD(f16vec4);"
 3348|       |
 3349|     10|            "int16_t addInvocationsNonUniformAMD(int16_t);"
 3350|     10|            "i16vec2 addInvocationsNonUniformAMD(i16vec2);"
 3351|     10|            "i16vec3 addInvocationsNonUniformAMD(i16vec3);"
 3352|     10|            "i16vec4 addInvocationsNonUniformAMD(i16vec4);"
 3353|       |
 3354|     10|            "uint16_t addInvocationsNonUniformAMD(uint16_t);"
 3355|     10|            "u16vec2  addInvocationsNonUniformAMD(u16vec2);"
 3356|     10|            "u16vec3  addInvocationsNonUniformAMD(u16vec3);"
 3357|     10|            "u16vec4  addInvocationsNonUniformAMD(u16vec4);"
 3358|       |
 3359|     10|            "float addInvocationsInclusiveScanNonUniformAMD(float);"
 3360|     10|            "vec2  addInvocationsInclusiveScanNonUniformAMD(vec2);"
 3361|     10|            "vec3  addInvocationsInclusiveScanNonUniformAMD(vec3);"
 3362|     10|            "vec4  addInvocationsInclusiveScanNonUniformAMD(vec4);"
 3363|       |
 3364|     10|            "int   addInvocationsInclusiveScanNonUniformAMD(int);"
 3365|     10|            "ivec2 addInvocationsInclusiveScanNonUniformAMD(ivec2);"
 3366|     10|            "ivec3 addInvocationsInclusiveScanNonUniformAMD(ivec3);"
 3367|     10|            "ivec4 addInvocationsInclusiveScanNonUniformAMD(ivec4);"
 3368|       |
 3369|     10|            "uint  addInvocationsInclusiveScanNonUniformAMD(uint);"
 3370|     10|            "uvec2 addInvocationsInclusiveScanNonUniformAMD(uvec2);"
 3371|     10|            "uvec3 addInvocationsInclusiveScanNonUniformAMD(uvec3);"
 3372|     10|            "uvec4 addInvocationsInclusiveScanNonUniformAMD(uvec4);"
 3373|       |
 3374|     10|            "double addInvocationsInclusiveScanNonUniformAMD(double);"
 3375|     10|            "dvec2  addInvocationsInclusiveScanNonUniformAMD(dvec2);"
 3376|     10|            "dvec3  addInvocationsInclusiveScanNonUniformAMD(dvec3);"
 3377|     10|            "dvec4  addInvocationsInclusiveScanNonUniformAMD(dvec4);"
 3378|       |
 3379|     10|            "int64_t addInvocationsInclusiveScanNonUniformAMD(int64_t);"
 3380|     10|            "i64vec2 addInvocationsInclusiveScanNonUniformAMD(i64vec2);"
 3381|     10|            "i64vec3 addInvocationsInclusiveScanNonUniformAMD(i64vec3);"
 3382|     10|            "i64vec4 addInvocationsInclusiveScanNonUniformAMD(i64vec4);"
 3383|       |
 3384|     10|            "uint64_t addInvocationsInclusiveScanNonUniformAMD(uint64_t);"
 3385|     10|            "u64vec2  addInvocationsInclusiveScanNonUniformAMD(u64vec2);"
 3386|     10|            "u64vec3  addInvocationsInclusiveScanNonUniformAMD(u64vec3);"
 3387|     10|            "u64vec4  addInvocationsInclusiveScanNonUniformAMD(u64vec4);"
 3388|       |
 3389|     10|            "float16_t addInvocationsInclusiveScanNonUniformAMD(float16_t);"
 3390|     10|            "f16vec2   addInvocationsInclusiveScanNonUniformAMD(f16vec2);"
 3391|     10|            "f16vec3   addInvocationsInclusiveScanNonUniformAMD(f16vec3);"
 3392|     10|            "f16vec4   addInvocationsInclusiveScanNonUniformAMD(f16vec4);"
 3393|       |
 3394|     10|            "int16_t addInvocationsInclusiveScanNonUniformAMD(int16_t);"
 3395|     10|            "i16vec2 addInvocationsInclusiveScanNonUniformAMD(i16vec2);"
 3396|     10|            "i16vec3 addInvocationsInclusiveScanNonUniformAMD(i16vec3);"
 3397|     10|            "i16vec4 addInvocationsInclusiveScanNonUniformAMD(i16vec4);"
 3398|       |
 3399|     10|            "uint16_t addInvocationsInclusiveScanNonUniformAMD(uint16_t);"
 3400|     10|            "u16vec2  addInvocationsInclusiveScanNonUniformAMD(u16vec2);"
 3401|     10|            "u16vec3  addInvocationsInclusiveScanNonUniformAMD(u16vec3);"
 3402|     10|            "u16vec4  addInvocationsInclusiveScanNonUniformAMD(u16vec4);"
 3403|       |
 3404|     10|            "float addInvocationsExclusiveScanNonUniformAMD(float);"
 3405|     10|            "vec2  addInvocationsExclusiveScanNonUniformAMD(vec2);"
 3406|     10|            "vec3  addInvocationsExclusiveScanNonUniformAMD(vec3);"
 3407|     10|            "vec4  addInvocationsExclusiveScanNonUniformAMD(vec4);"
 3408|       |
 3409|     10|            "int   addInvocationsExclusiveScanNonUniformAMD(int);"
 3410|     10|            "ivec2 addInvocationsExclusiveScanNonUniformAMD(ivec2);"
 3411|     10|            "ivec3 addInvocationsExclusiveScanNonUniformAMD(ivec3);"
 3412|     10|            "ivec4 addInvocationsExclusiveScanNonUniformAMD(ivec4);"
 3413|       |
 3414|     10|            "uint  addInvocationsExclusiveScanNonUniformAMD(uint);"
 3415|     10|            "uvec2 addInvocationsExclusiveScanNonUniformAMD(uvec2);"
 3416|     10|            "uvec3 addInvocationsExclusiveScanNonUniformAMD(uvec3);"
 3417|     10|            "uvec4 addInvocationsExclusiveScanNonUniformAMD(uvec4);"
 3418|       |
 3419|     10|            "double addInvocationsExclusiveScanNonUniformAMD(double);"
 3420|     10|            "dvec2  addInvocationsExclusiveScanNonUniformAMD(dvec2);"
 3421|     10|            "dvec3  addInvocationsExclusiveScanNonUniformAMD(dvec3);"
 3422|     10|            "dvec4  addInvocationsExclusiveScanNonUniformAMD(dvec4);"
 3423|       |
 3424|     10|            "int64_t addInvocationsExclusiveScanNonUniformAMD(int64_t);"
 3425|     10|            "i64vec2 addInvocationsExclusiveScanNonUniformAMD(i64vec2);"
 3426|     10|            "i64vec3 addInvocationsExclusiveScanNonUniformAMD(i64vec3);"
 3427|     10|            "i64vec4 addInvocationsExclusiveScanNonUniformAMD(i64vec4);"
 3428|       |
 3429|     10|            "uint64_t addInvocationsExclusiveScanNonUniformAMD(uint64_t);"
 3430|     10|            "u64vec2  addInvocationsExclusiveScanNonUniformAMD(u64vec2);"
 3431|     10|            "u64vec3  addInvocationsExclusiveScanNonUniformAMD(u64vec3);"
 3432|     10|            "u64vec4  addInvocationsExclusiveScanNonUniformAMD(u64vec4);"
 3433|       |
 3434|     10|            "float16_t addInvocationsExclusiveScanNonUniformAMD(float16_t);"
 3435|     10|            "f16vec2   addInvocationsExclusiveScanNonUniformAMD(f16vec2);"
 3436|     10|            "f16vec3   addInvocationsExclusiveScanNonUniformAMD(f16vec3);"
 3437|     10|            "f16vec4   addInvocationsExclusiveScanNonUniformAMD(f16vec4);"
 3438|       |
 3439|     10|            "int16_t addInvocationsExclusiveScanNonUniformAMD(int16_t);"
 3440|     10|            "i16vec2 addInvocationsExclusiveScanNonUniformAMD(i16vec2);"
 3441|     10|            "i16vec3 addInvocationsExclusiveScanNonUniformAMD(i16vec3);"
 3442|     10|            "i16vec4 addInvocationsExclusiveScanNonUniformAMD(i16vec4);"
 3443|       |
 3444|     10|            "uint16_t addInvocationsExclusiveScanNonUniformAMD(uint16_t);"
 3445|     10|            "u16vec2  addInvocationsExclusiveScanNonUniformAMD(u16vec2);"
 3446|     10|            "u16vec3  addInvocationsExclusiveScanNonUniformAMD(u16vec3);"
 3447|     10|            "u16vec4  addInvocationsExclusiveScanNonUniformAMD(u16vec4);"
 3448|       |
 3449|     10|            "float swizzleInvocationsAMD(float, uvec4);"
 3450|     10|            "vec2  swizzleInvocationsAMD(vec2,  uvec4);"
 3451|     10|            "vec3  swizzleInvocationsAMD(vec3,  uvec4);"
 3452|     10|            "vec4  swizzleInvocationsAMD(vec4,  uvec4);"
 3453|       |
 3454|     10|            "int   swizzleInvocationsAMD(int,   uvec4);"
 3455|     10|            "ivec2 swizzleInvocationsAMD(ivec2, uvec4);"
 3456|     10|            "ivec3 swizzleInvocationsAMD(ivec3, uvec4);"
 3457|     10|            "ivec4 swizzleInvocationsAMD(ivec4, uvec4);"
 3458|       |
 3459|     10|            "uint  swizzleInvocationsAMD(uint,  uvec4);"
 3460|     10|            "uvec2 swizzleInvocationsAMD(uvec2, uvec4);"
 3461|     10|            "uvec3 swizzleInvocationsAMD(uvec3, uvec4);"
 3462|     10|            "uvec4 swizzleInvocationsAMD(uvec4, uvec4);"
 3463|       |
 3464|     10|            "float swizzleInvocationsMaskedAMD(float, uvec3);"
 3465|     10|            "vec2  swizzleInvocationsMaskedAMD(vec2,  uvec3);"
 3466|     10|            "vec3  swizzleInvocationsMaskedAMD(vec3,  uvec3);"
 3467|     10|            "vec4  swizzleInvocationsMaskedAMD(vec4,  uvec3);"
 3468|       |
 3469|     10|            "int   swizzleInvocationsMaskedAMD(int,   uvec3);"
 3470|     10|            "ivec2 swizzleInvocationsMaskedAMD(ivec2, uvec3);"
 3471|     10|            "ivec3 swizzleInvocationsMaskedAMD(ivec3, uvec3);"
 3472|     10|            "ivec4 swizzleInvocationsMaskedAMD(ivec4, uvec3);"
 3473|       |
 3474|     10|            "uint  swizzleInvocationsMaskedAMD(uint,  uvec3);"
 3475|     10|            "uvec2 swizzleInvocationsMaskedAMD(uvec2, uvec3);"
 3476|     10|            "uvec3 swizzleInvocationsMaskedAMD(uvec3, uvec3);"
 3477|     10|            "uvec4 swizzleInvocationsMaskedAMD(uvec4, uvec3);"
 3478|       |
 3479|     10|            "float writeInvocationAMD(float, float, uint);"
 3480|     10|            "vec2  writeInvocationAMD(vec2,  vec2,  uint);"
 3481|     10|            "vec3  writeInvocationAMD(vec3,  vec3,  uint);"
 3482|     10|            "vec4  writeInvocationAMD(vec4,  vec4,  uint);"
 3483|       |
 3484|     10|            "int   writeInvocationAMD(int,   int,   uint);"
 3485|     10|            "ivec2 writeInvocationAMD(ivec2, ivec2, uint);"
 3486|     10|            "ivec3 writeInvocationAMD(ivec3, ivec3, uint);"
 3487|     10|            "ivec4 writeInvocationAMD(ivec4, ivec4, uint);"
 3488|       |
 3489|     10|            "uint  writeInvocationAMD(uint,  uint,  uint);"
 3490|     10|            "uvec2 writeInvocationAMD(uvec2, uvec2, uint);"
 3491|     10|            "uvec3 writeInvocationAMD(uvec3, uvec3, uint);"
 3492|     10|            "uvec4 writeInvocationAMD(uvec4, uvec4, uint);"
 3493|       |
 3494|     10|            "uint mbcntAMD(uint64_t);"
 3495|       |
 3496|     10|            "\n");
 3497|     10|    }
 3498|       |
 3499|       |    // GL_AMD_gcn_shader
 3500|     99|    if (profile != EEsProfile && version >= 440) {
  ------------------
  |  Branch (3500:9): [True: 99, False: 0]
  |  Branch (3500:34): [True: 10, False: 89]
  ------------------
 3501|     10|        commonBuiltins.append(
 3502|     10|            "float cubeFaceIndexAMD(vec3);"
 3503|     10|            "vec2  cubeFaceCoordAMD(vec3);"
 3504|     10|            "uint64_t timeAMD();"
 3505|       |
 3506|     10|            "in int gl_SIMDGroupSizeAMD;"
 3507|     10|            "\n");
 3508|     10|    }
 3509|       |
 3510|       |    // GL_AMD_shader_fragment_mask
 3511|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (3511:9): [True: 99, False: 0]
  |  Branch (3511:34): [True: 10, False: 89]
  ------------------
 3512|     10|        commonBuiltins.append(
 3513|     10|            "uint fragmentMaskFetchAMD(sampler2DMS,       ivec2);"
 3514|     10|            "uint fragmentMaskFetchAMD(isampler2DMS,      ivec2);"
 3515|     10|            "uint fragmentMaskFetchAMD(usampler2DMS,      ivec2);"
 3516|       |
 3517|     10|            "uint fragmentMaskFetchAMD(sampler2DMSArray,  ivec3);"
 3518|     10|            "uint fragmentMaskFetchAMD(isampler2DMSArray, ivec3);"
 3519|     10|            "uint fragmentMaskFetchAMD(usampler2DMSArray, ivec3);"
 3520|       |
 3521|     10|            "vec4  fragmentFetchAMD(sampler2DMS,       ivec2, uint);"
 3522|     10|            "ivec4 fragmentFetchAMD(isampler2DMS,      ivec2, uint);"
 3523|     10|            "uvec4 fragmentFetchAMD(usampler2DMS,      ivec2, uint);"
 3524|       |
 3525|     10|            "vec4  fragmentFetchAMD(sampler2DMSArray,  ivec3, uint);"
 3526|     10|            "ivec4 fragmentFetchAMD(isampler2DMSArray, ivec3, uint);"
 3527|     10|            "uvec4 fragmentFetchAMD(usampler2DMSArray, ivec3, uint);"
 3528|       |
 3529|     10|            "\n");
 3530|     10|    }
 3531|       |
 3532|     99|    if ((profile != EEsProfile && version >= 130) ||
  ------------------
  |  Branch (3532:10): [True: 99, False: 0]
  |  Branch (3532:35): [True: 99, False: 0]
  ------------------
 3533|     99|        (profile == EEsProfile && version >= 300)) {
  ------------------
  |  Branch (3533:10): [True: 0, False: 0]
  |  Branch (3533:35): [True: 0, False: 0]
  ------------------
 3534|     99|        commonBuiltins.append(
 3535|     99|            "uint countLeadingZeros(uint);"
 3536|     99|            "uvec2 countLeadingZeros(uvec2);"
 3537|     99|            "uvec3 countLeadingZeros(uvec3);"
 3538|     99|            "uvec4 countLeadingZeros(uvec4);"
 3539|       |
 3540|     99|            "uint countTrailingZeros(uint);"
 3541|     99|            "uvec2 countTrailingZeros(uvec2);"
 3542|     99|            "uvec3 countTrailingZeros(uvec3);"
 3543|     99|            "uvec4 countTrailingZeros(uvec4);"
 3544|       |
 3545|     99|            "uint absoluteDifference(int, int);"
 3546|     99|            "uvec2 absoluteDifference(ivec2, ivec2);"
 3547|     99|            "uvec3 absoluteDifference(ivec3, ivec3);"
 3548|     99|            "uvec4 absoluteDifference(ivec4, ivec4);"
 3549|       |
 3550|     99|            "uint16_t absoluteDifference(int16_t, int16_t);"
 3551|     99|            "u16vec2 absoluteDifference(i16vec2, i16vec2);"
 3552|     99|            "u16vec3 absoluteDifference(i16vec3, i16vec3);"
 3553|     99|            "u16vec4 absoluteDifference(i16vec4, i16vec4);"
 3554|       |
 3555|     99|            "uint64_t absoluteDifference(int64_t, int64_t);"
 3556|     99|            "u64vec2 absoluteDifference(i64vec2, i64vec2);"
 3557|     99|            "u64vec3 absoluteDifference(i64vec3, i64vec3);"
 3558|     99|            "u64vec4 absoluteDifference(i64vec4, i64vec4);"
 3559|       |
 3560|     99|            "uint absoluteDifference(uint, uint);"
 3561|     99|            "uvec2 absoluteDifference(uvec2, uvec2);"
 3562|     99|            "uvec3 absoluteDifference(uvec3, uvec3);"
 3563|     99|            "uvec4 absoluteDifference(uvec4, uvec4);"
 3564|       |
 3565|     99|            "uint16_t absoluteDifference(uint16_t, uint16_t);"
 3566|     99|            "u16vec2 absoluteDifference(u16vec2, u16vec2);"
 3567|     99|            "u16vec3 absoluteDifference(u16vec3, u16vec3);"
 3568|     99|            "u16vec4 absoluteDifference(u16vec4, u16vec4);"
 3569|       |
 3570|     99|            "uint64_t absoluteDifference(uint64_t, uint64_t);"
 3571|     99|            "u64vec2 absoluteDifference(u64vec2, u64vec2);"
 3572|     99|            "u64vec3 absoluteDifference(u64vec3, u64vec3);"
 3573|     99|            "u64vec4 absoluteDifference(u64vec4, u64vec4);"
 3574|       |
 3575|     99|            "int addSaturate(int, int);"
 3576|     99|            "ivec2 addSaturate(ivec2, ivec2);"
 3577|     99|            "ivec3 addSaturate(ivec3, ivec3);"
 3578|     99|            "ivec4 addSaturate(ivec4, ivec4);"
 3579|       |
 3580|     99|            "int16_t addSaturate(int16_t, int16_t);"
 3581|     99|            "i16vec2 addSaturate(i16vec2, i16vec2);"
 3582|     99|            "i16vec3 addSaturate(i16vec3, i16vec3);"
 3583|     99|            "i16vec4 addSaturate(i16vec4, i16vec4);"
 3584|       |
 3585|     99|            "int64_t addSaturate(int64_t, int64_t);"
 3586|     99|            "i64vec2 addSaturate(i64vec2, i64vec2);"
 3587|     99|            "i64vec3 addSaturate(i64vec3, i64vec3);"
 3588|     99|            "i64vec4 addSaturate(i64vec4, i64vec4);"
 3589|       |
 3590|     99|            "uint addSaturate(uint, uint);"
 3591|     99|            "uvec2 addSaturate(uvec2, uvec2);"
 3592|     99|            "uvec3 addSaturate(uvec3, uvec3);"
 3593|     99|            "uvec4 addSaturate(uvec4, uvec4);"
 3594|       |
 3595|     99|            "uint16_t addSaturate(uint16_t, uint16_t);"
 3596|     99|            "u16vec2 addSaturate(u16vec2, u16vec2);"
 3597|     99|            "u16vec3 addSaturate(u16vec3, u16vec3);"
 3598|     99|            "u16vec4 addSaturate(u16vec4, u16vec4);"
 3599|       |
 3600|     99|            "uint64_t addSaturate(uint64_t, uint64_t);"
 3601|     99|            "u64vec2 addSaturate(u64vec2, u64vec2);"
 3602|     99|            "u64vec3 addSaturate(u64vec3, u64vec3);"
 3603|     99|            "u64vec4 addSaturate(u64vec4, u64vec4);"
 3604|       |
 3605|     99|            "int subtractSaturate(int, int);"
 3606|     99|            "ivec2 subtractSaturate(ivec2, ivec2);"
 3607|     99|            "ivec3 subtractSaturate(ivec3, ivec3);"
 3608|     99|            "ivec4 subtractSaturate(ivec4, ivec4);"
 3609|       |
 3610|     99|            "int16_t subtractSaturate(int16_t, int16_t);"
 3611|     99|            "i16vec2 subtractSaturate(i16vec2, i16vec2);"
 3612|     99|            "i16vec3 subtractSaturate(i16vec3, i16vec3);"
 3613|     99|            "i16vec4 subtractSaturate(i16vec4, i16vec4);"
 3614|       |
 3615|     99|            "int64_t subtractSaturate(int64_t, int64_t);"
 3616|     99|            "i64vec2 subtractSaturate(i64vec2, i64vec2);"
 3617|     99|            "i64vec3 subtractSaturate(i64vec3, i64vec3);"
 3618|     99|            "i64vec4 subtractSaturate(i64vec4, i64vec4);"
 3619|       |
 3620|     99|            "uint subtractSaturate(uint, uint);"
 3621|     99|            "uvec2 subtractSaturate(uvec2, uvec2);"
 3622|     99|            "uvec3 subtractSaturate(uvec3, uvec3);"
 3623|     99|            "uvec4 subtractSaturate(uvec4, uvec4);"
 3624|       |
 3625|     99|            "uint16_t subtractSaturate(uint16_t, uint16_t);"
 3626|     99|            "u16vec2 subtractSaturate(u16vec2, u16vec2);"
 3627|     99|            "u16vec3 subtractSaturate(u16vec3, u16vec3);"
 3628|     99|            "u16vec4 subtractSaturate(u16vec4, u16vec4);"
 3629|       |
 3630|     99|            "uint64_t subtractSaturate(uint64_t, uint64_t);"
 3631|     99|            "u64vec2 subtractSaturate(u64vec2, u64vec2);"
 3632|     99|            "u64vec3 subtractSaturate(u64vec3, u64vec3);"
 3633|     99|            "u64vec4 subtractSaturate(u64vec4, u64vec4);"
 3634|       |
 3635|     99|            "int average(int, int);"
 3636|     99|            "ivec2 average(ivec2, ivec2);"
 3637|     99|            "ivec3 average(ivec3, ivec3);"
 3638|     99|            "ivec4 average(ivec4, ivec4);"
 3639|       |
 3640|     99|            "int16_t average(int16_t, int16_t);"
 3641|     99|            "i16vec2 average(i16vec2, i16vec2);"
 3642|     99|            "i16vec3 average(i16vec3, i16vec3);"
 3643|     99|            "i16vec4 average(i16vec4, i16vec4);"
 3644|       |
 3645|     99|            "int64_t average(int64_t, int64_t);"
 3646|     99|            "i64vec2 average(i64vec2, i64vec2);"
 3647|     99|            "i64vec3 average(i64vec3, i64vec3);"
 3648|     99|            "i64vec4 average(i64vec4, i64vec4);"
 3649|       |
 3650|     99|            "uint average(uint, uint);"
 3651|     99|            "uvec2 average(uvec2, uvec2);"
 3652|     99|            "uvec3 average(uvec3, uvec3);"
 3653|     99|            "uvec4 average(uvec4, uvec4);"
 3654|       |
 3655|     99|            "uint16_t average(uint16_t, uint16_t);"
 3656|     99|            "u16vec2 average(u16vec2, u16vec2);"
 3657|     99|            "u16vec3 average(u16vec3, u16vec3);"
 3658|     99|            "u16vec4 average(u16vec4, u16vec4);"
 3659|       |
 3660|     99|            "uint64_t average(uint64_t, uint64_t);"
 3661|     99|            "u64vec2 average(u64vec2, u64vec2);"
 3662|     99|            "u64vec3 average(u64vec3, u64vec3);"
 3663|     99|            "u64vec4 average(u64vec4, u64vec4);"
 3664|       |
 3665|     99|            "int averageRounded(int, int);"
 3666|     99|            "ivec2 averageRounded(ivec2, ivec2);"
 3667|     99|            "ivec3 averageRounded(ivec3, ivec3);"
 3668|     99|            "ivec4 averageRounded(ivec4, ivec4);"
 3669|       |
 3670|     99|            "int16_t averageRounded(int16_t, int16_t);"
 3671|     99|            "i16vec2 averageRounded(i16vec2, i16vec2);"
 3672|     99|            "i16vec3 averageRounded(i16vec3, i16vec3);"
 3673|     99|            "i16vec4 averageRounded(i16vec4, i16vec4);"
 3674|       |
 3675|     99|            "int64_t averageRounded(int64_t, int64_t);"
 3676|     99|            "i64vec2 averageRounded(i64vec2, i64vec2);"
 3677|     99|            "i64vec3 averageRounded(i64vec3, i64vec3);"
 3678|     99|            "i64vec4 averageRounded(i64vec4, i64vec4);"
 3679|       |
 3680|     99|            "uint averageRounded(uint, uint);"
 3681|     99|            "uvec2 averageRounded(uvec2, uvec2);"
 3682|     99|            "uvec3 averageRounded(uvec3, uvec3);"
 3683|     99|            "uvec4 averageRounded(uvec4, uvec4);"
 3684|       |
 3685|     99|            "uint16_t averageRounded(uint16_t, uint16_t);"
 3686|     99|            "u16vec2 averageRounded(u16vec2, u16vec2);"
 3687|     99|            "u16vec3 averageRounded(u16vec3, u16vec3);"
 3688|     99|            "u16vec4 averageRounded(u16vec4, u16vec4);"
 3689|       |
 3690|     99|            "uint64_t averageRounded(uint64_t, uint64_t);"
 3691|     99|            "u64vec2 averageRounded(u64vec2, u64vec2);"
 3692|     99|            "u64vec3 averageRounded(u64vec3, u64vec3);"
 3693|     99|            "u64vec4 averageRounded(u64vec4, u64vec4);"
 3694|       |
 3695|     99|            "int multiply32x16(int, int);"
 3696|     99|            "ivec2 multiply32x16(ivec2, ivec2);"
 3697|     99|            "ivec3 multiply32x16(ivec3, ivec3);"
 3698|     99|            "ivec4 multiply32x16(ivec4, ivec4);"
 3699|       |
 3700|     99|            "uint multiply32x16(uint, uint);"
 3701|     99|            "uvec2 multiply32x16(uvec2, uvec2);"
 3702|     99|            "uvec3 multiply32x16(uvec3, uvec3);"
 3703|     99|            "uvec4 multiply32x16(uvec4, uvec4);"
 3704|     99|            "\n");
 3705|     99|    }
 3706|       |
 3707|     99|    if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (3707:10): [True: 99, False: 0]
  |  Branch (3707:35): [True: 10, False: 89]
  ------------------
 3708|     89|        (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (3708:10): [True: 0, False: 89]
  |  Branch (3708:35): [True: 0, False: 0]
  ------------------
 3709|     10|        commonBuiltins.append(
 3710|     10|            "struct gl_TextureFootprint2DNV {"
 3711|     10|                "uvec2 anchor;"
 3712|     10|                "uvec2 offset;"
 3713|     10|                "uvec2 mask;"
 3714|     10|                "uint lod;"
 3715|     10|                "uint granularity;"
 3716|     10|            "};"
 3717|       |
 3718|     10|            "struct gl_TextureFootprint3DNV {"
 3719|     10|                "uvec3 anchor;"
 3720|     10|                "uvec3 offset;"
 3721|     10|                "uvec2 mask;"
 3722|     10|                "uint lod;"
 3723|     10|                "uint granularity;"
 3724|     10|            "};"
 3725|     10|            "bool textureFootprintNV(sampler2D, vec2, int, bool, out gl_TextureFootprint2DNV);"
 3726|     10|            "bool textureFootprintNV(sampler3D, vec3, int, bool, out gl_TextureFootprint3DNV);"
 3727|     10|            "bool textureFootprintNV(sampler2D, vec2, int, bool, out gl_TextureFootprint2DNV, float);"
 3728|     10|            "bool textureFootprintNV(sampler3D, vec3, int, bool, out gl_TextureFootprint3DNV, float);"
 3729|     10|            "bool textureFootprintClampNV(sampler2D, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
 3730|     10|            "bool textureFootprintClampNV(sampler3D, vec3, float, int, bool, out gl_TextureFootprint3DNV);"
 3731|     10|            "bool textureFootprintClampNV(sampler2D, vec2, float, int, bool, out gl_TextureFootprint2DNV, float);"
 3732|     10|            "bool textureFootprintClampNV(sampler3D, vec3, float, int, bool, out gl_TextureFootprint3DNV, float);"
 3733|     10|            "bool textureFootprintLodNV(sampler2D, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
 3734|     10|            "bool textureFootprintLodNV(sampler3D, vec3, float, int, bool, out gl_TextureFootprint3DNV);"
 3735|     10|            "bool textureFootprintGradNV(sampler2D, vec2, vec2, vec2, int, bool, out gl_TextureFootprint2DNV);"
 3736|     10|            "bool textureFootprintGradClampNV(sampler2D, vec2, vec2, vec2, float, int, bool, out gl_TextureFootprint2DNV);"
 3737|     10|            "\n");
 3738|     10|    }
 3739|       |
 3740|     99|    if ((profile == EEsProfile && version >= 300 && version < 310) ||
  ------------------
  |  Branch (3740:10): [True: 0, False: 99]
  |  Branch (3740:35): [True: 0, False: 0]
  |  Branch (3740:53): [True: 0, False: 0]
  ------------------
 3741|     99|        (profile != EEsProfile && version >= 150 && version < 450)) { // GL_EXT_shader_integer_mix
  ------------------
  |  Branch (3741:10): [True: 99, False: 0]
  |  Branch (3741:35): [True: 13, False: 86]
  |  Branch (3741:53): [True: 3, False: 10]
  ------------------
 3742|      3|        commonBuiltins.append("int mix(int, int, bool);"
 3743|      3|                              "ivec2 mix(ivec2, ivec2, bvec2);"
 3744|      3|                              "ivec3 mix(ivec3, ivec3, bvec3);"
 3745|      3|                              "ivec4 mix(ivec4, ivec4, bvec4);"
 3746|      3|                              "uint  mix(uint,  uint,  bool );"
 3747|      3|                              "uvec2 mix(uvec2, uvec2, bvec2);"
 3748|      3|                              "uvec3 mix(uvec3, uvec3, bvec3);"
 3749|      3|                              "uvec4 mix(uvec4, uvec4, bvec4);"
 3750|      3|                              "bool  mix(bool,  bool,  bool );"
 3751|      3|                              "bvec2 mix(bvec2, bvec2, bvec2);"
 3752|      3|                              "bvec3 mix(bvec3, bvec3, bvec3);"
 3753|      3|                              "bvec4 mix(bvec4, bvec4, bvec4);"
 3754|       |
 3755|      3|                              "\n");
 3756|      3|    }
 3757|       |
 3758|       |    // GL_AMD_gpu_shader_half_float/Explicit types
 3759|     99|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (3759:10): [True: 99, False: 0]
  |  Branch (3759:35): [True: 10, False: 89]
  |  Branch (3759:55): [True: 0, False: 89]
  |  Branch (3759:80): [True: 0, False: 0]
  ------------------
 3760|     10|        commonBuiltins.append(
 3761|     10|            "float16_t radians(float16_t);"
 3762|     10|            "f16vec2   radians(f16vec2);"
 3763|     10|            "f16vec3   radians(f16vec3);"
 3764|     10|            "f16vec4   radians(f16vec4);"
 3765|       |
 3766|     10|            "float16_t degrees(float16_t);"
 3767|     10|            "f16vec2   degrees(f16vec2);"
 3768|     10|            "f16vec3   degrees(f16vec3);"
 3769|     10|            "f16vec4   degrees(f16vec4);"
 3770|       |
 3771|     10|            "float16_t sin(float16_t);"
 3772|     10|            "f16vec2   sin(f16vec2);"
 3773|     10|            "f16vec3   sin(f16vec3);"
 3774|     10|            "f16vec4   sin(f16vec4);"
 3775|       |
 3776|     10|            "float16_t cos(float16_t);"
 3777|     10|            "f16vec2   cos(f16vec2);"
 3778|     10|            "f16vec3   cos(f16vec3);"
 3779|     10|            "f16vec4   cos(f16vec4);"
 3780|       |
 3781|     10|            "float16_t tan(float16_t);"
 3782|     10|            "f16vec2   tan(f16vec2);"
 3783|     10|            "f16vec3   tan(f16vec3);"
 3784|     10|            "f16vec4   tan(f16vec4);"
 3785|       |
 3786|     10|            "float16_t asin(float16_t);"
 3787|     10|            "f16vec2   asin(f16vec2);"
 3788|     10|            "f16vec3   asin(f16vec3);"
 3789|     10|            "f16vec4   asin(f16vec4);"
 3790|       |
 3791|     10|            "float16_t acos(float16_t);"
 3792|     10|            "f16vec2   acos(f16vec2);"
 3793|     10|            "f16vec3   acos(f16vec3);"
 3794|     10|            "f16vec4   acos(f16vec4);"
 3795|       |
 3796|     10|            "float16_t atan(float16_t, float16_t);"
 3797|     10|            "f16vec2   atan(f16vec2,   f16vec2);"
 3798|     10|            "f16vec3   atan(f16vec3,   f16vec3);"
 3799|     10|            "f16vec4   atan(f16vec4,   f16vec4);"
 3800|       |
 3801|     10|            "float16_t atan(float16_t);"
 3802|     10|            "f16vec2   atan(f16vec2);"
 3803|     10|            "f16vec3   atan(f16vec3);"
 3804|     10|            "f16vec4   atan(f16vec4);"
 3805|       |
 3806|     10|            "float16_t sinh(float16_t);"
 3807|     10|            "f16vec2   sinh(f16vec2);"
 3808|     10|            "f16vec3   sinh(f16vec3);"
 3809|     10|            "f16vec4   sinh(f16vec4);"
 3810|       |
 3811|     10|            "float16_t cosh(float16_t);"
 3812|     10|            "f16vec2   cosh(f16vec2);"
 3813|     10|            "f16vec3   cosh(f16vec3);"
 3814|     10|            "f16vec4   cosh(f16vec4);"
 3815|       |
 3816|     10|            "float16_t tanh(float16_t);"
 3817|     10|            "f16vec2   tanh(f16vec2);"
 3818|     10|            "f16vec3   tanh(f16vec3);"
 3819|     10|            "f16vec4   tanh(f16vec4);"
 3820|       |
 3821|     10|            "float16_t asinh(float16_t);"
 3822|     10|            "f16vec2   asinh(f16vec2);"
 3823|     10|            "f16vec3   asinh(f16vec3);"
 3824|     10|            "f16vec4   asinh(f16vec4);"
 3825|       |
 3826|     10|            "float16_t acosh(float16_t);"
 3827|     10|            "f16vec2   acosh(f16vec2);"
 3828|     10|            "f16vec3   acosh(f16vec3);"
 3829|     10|            "f16vec4   acosh(f16vec4);"
 3830|       |
 3831|     10|            "float16_t atanh(float16_t);"
 3832|     10|            "f16vec2   atanh(f16vec2);"
 3833|     10|            "f16vec3   atanh(f16vec3);"
 3834|     10|            "f16vec4   atanh(f16vec4);"
 3835|       |
 3836|     10|            "float16_t pow(float16_t, float16_t);"
 3837|     10|            "f16vec2   pow(f16vec2,   f16vec2);"
 3838|     10|            "f16vec3   pow(f16vec3,   f16vec3);"
 3839|     10|            "f16vec4   pow(f16vec4,   f16vec4);"
 3840|       |
 3841|     10|            "float16_t exp(float16_t);"
 3842|     10|            "f16vec2   exp(f16vec2);"
 3843|     10|            "f16vec3   exp(f16vec3);"
 3844|     10|            "f16vec4   exp(f16vec4);"
 3845|       |
 3846|     10|            "float16_t log(float16_t);"
 3847|     10|            "f16vec2   log(f16vec2);"
 3848|     10|            "f16vec3   log(f16vec3);"
 3849|     10|            "f16vec4   log(f16vec4);"
 3850|       |
 3851|     10|            "float16_t exp2(float16_t);"
 3852|     10|            "f16vec2   exp2(f16vec2);"
 3853|     10|            "f16vec3   exp2(f16vec3);"
 3854|     10|            "f16vec4   exp2(f16vec4);"
 3855|       |
 3856|     10|            "float16_t log2(float16_t);"
 3857|     10|            "f16vec2   log2(f16vec2);"
 3858|     10|            "f16vec3   log2(f16vec3);"
 3859|     10|            "f16vec4   log2(f16vec4);"
 3860|       |
 3861|     10|            "float16_t sqrt(float16_t);"
 3862|     10|            "f16vec2   sqrt(f16vec2);"
 3863|     10|            "f16vec3   sqrt(f16vec3);"
 3864|     10|            "f16vec4   sqrt(f16vec4);"
 3865|       |
 3866|     10|            "float16_t inversesqrt(float16_t);"
 3867|     10|            "f16vec2   inversesqrt(f16vec2);"
 3868|     10|            "f16vec3   inversesqrt(f16vec3);"
 3869|     10|            "f16vec4   inversesqrt(f16vec4);"
 3870|       |
 3871|     10|            "float16_t abs(float16_t);"
 3872|     10|            "f16vec2   abs(f16vec2);"
 3873|     10|            "f16vec3   abs(f16vec3);"
 3874|     10|            "f16vec4   abs(f16vec4);"
 3875|       |
 3876|     10|            "float16_t sign(float16_t);"
 3877|     10|            "f16vec2   sign(f16vec2);"
 3878|     10|            "f16vec3   sign(f16vec3);"
 3879|     10|            "f16vec4   sign(f16vec4);"
 3880|       |
 3881|     10|            "float16_t floor(float16_t);"
 3882|     10|            "f16vec2   floor(f16vec2);"
 3883|     10|            "f16vec3   floor(f16vec3);"
 3884|     10|            "f16vec4   floor(f16vec4);"
 3885|       |
 3886|     10|            "float16_t trunc(float16_t);"
 3887|     10|            "f16vec2   trunc(f16vec2);"
 3888|     10|            "f16vec3   trunc(f16vec3);"
 3889|     10|            "f16vec4   trunc(f16vec4);"
 3890|       |
 3891|     10|            "float16_t round(float16_t);"
 3892|     10|            "f16vec2   round(f16vec2);"
 3893|     10|            "f16vec3   round(f16vec3);"
 3894|     10|            "f16vec4   round(f16vec4);"
 3895|       |
 3896|     10|            "float16_t roundEven(float16_t);"
 3897|     10|            "f16vec2   roundEven(f16vec2);"
 3898|     10|            "f16vec3   roundEven(f16vec3);"
 3899|     10|            "f16vec4   roundEven(f16vec4);"
 3900|       |
 3901|     10|            "float16_t ceil(float16_t);"
 3902|     10|            "f16vec2   ceil(f16vec2);"
 3903|     10|            "f16vec3   ceil(f16vec3);"
 3904|     10|            "f16vec4   ceil(f16vec4);"
 3905|       |
 3906|     10|            "float16_t fract(float16_t);"
 3907|     10|            "f16vec2   fract(f16vec2);"
 3908|     10|            "f16vec3   fract(f16vec3);"
 3909|     10|            "f16vec4   fract(f16vec4);"
 3910|       |
 3911|     10|            "float16_t mod(float16_t, float16_t);"
 3912|     10|            "f16vec2   mod(f16vec2,   float16_t);"
 3913|     10|            "f16vec3   mod(f16vec3,   float16_t);"
 3914|     10|            "f16vec4   mod(f16vec4,   float16_t);"
 3915|     10|            "f16vec2   mod(f16vec2,   f16vec2);"
 3916|     10|            "f16vec3   mod(f16vec3,   f16vec3);"
 3917|     10|            "f16vec4   mod(f16vec4,   f16vec4);"
 3918|       |
 3919|     10|            "float16_t modf(float16_t, out float16_t);"
 3920|     10|            "f16vec2   modf(f16vec2,   out f16vec2);"
 3921|     10|            "f16vec3   modf(f16vec3,   out f16vec3);"
 3922|     10|            "f16vec4   modf(f16vec4,   out f16vec4);"
 3923|       |
 3924|     10|            "float16_t min(float16_t, float16_t);"
 3925|     10|            "f16vec2   min(f16vec2,   float16_t);"
 3926|     10|            "f16vec3   min(f16vec3,   float16_t);"
 3927|     10|            "f16vec4   min(f16vec4,   float16_t);"
 3928|     10|            "f16vec2   min(f16vec2,   f16vec2);"
 3929|     10|            "f16vec3   min(f16vec3,   f16vec3);"
 3930|     10|            "f16vec4   min(f16vec4,   f16vec4);"
 3931|       |
 3932|     10|            "float16_t max(float16_t, float16_t);"
 3933|     10|            "f16vec2   max(f16vec2,   float16_t);"
 3934|     10|            "f16vec3   max(f16vec3,   float16_t);"
 3935|     10|            "f16vec4   max(f16vec4,   float16_t);"
 3936|     10|            "f16vec2   max(f16vec2,   f16vec2);"
 3937|     10|            "f16vec3   max(f16vec3,   f16vec3);"
 3938|     10|            "f16vec4   max(f16vec4,   f16vec4);"
 3939|       |
 3940|     10|            "float16_t clamp(float16_t, float16_t, float16_t);"
 3941|     10|            "f16vec2   clamp(f16vec2,   float16_t, float16_t);"
 3942|     10|            "f16vec3   clamp(f16vec3,   float16_t, float16_t);"
 3943|     10|            "f16vec4   clamp(f16vec4,   float16_t, float16_t);"
 3944|     10|            "f16vec2   clamp(f16vec2,   f16vec2,   f16vec2);"
 3945|     10|            "f16vec3   clamp(f16vec3,   f16vec3,   f16vec3);"
 3946|     10|            "f16vec4   clamp(f16vec4,   f16vec4,   f16vec4);"
 3947|       |
 3948|     10|            "float16_t mix(float16_t, float16_t, float16_t);"
 3949|     10|            "f16vec2   mix(f16vec2,   f16vec2,   float16_t);"
 3950|     10|            "f16vec3   mix(f16vec3,   f16vec3,   float16_t);"
 3951|     10|            "f16vec4   mix(f16vec4,   f16vec4,   float16_t);"
 3952|     10|            "f16vec2   mix(f16vec2,   f16vec2,   f16vec2);"
 3953|     10|            "f16vec3   mix(f16vec3,   f16vec3,   f16vec3);"
 3954|     10|            "f16vec4   mix(f16vec4,   f16vec4,   f16vec4);"
 3955|     10|            "float16_t mix(float16_t, float16_t, bool);"
 3956|     10|            "f16vec2   mix(f16vec2,   f16vec2,   bvec2);"
 3957|     10|            "f16vec3   mix(f16vec3,   f16vec3,   bvec3);"
 3958|     10|            "f16vec4   mix(f16vec4,   f16vec4,   bvec4);"
 3959|       |
 3960|     10|            "float16_t step(float16_t, float16_t);"
 3961|     10|            "f16vec2   step(f16vec2,   f16vec2);"
 3962|     10|            "f16vec3   step(f16vec3,   f16vec3);"
 3963|     10|            "f16vec4   step(f16vec4,   f16vec4);"
 3964|     10|            "f16vec2   step(float16_t, f16vec2);"
 3965|     10|            "f16vec3   step(float16_t, f16vec3);"
 3966|     10|            "f16vec4   step(float16_t, f16vec4);"
 3967|       |
 3968|     10|            "float16_t smoothstep(float16_t, float16_t, float16_t);"
 3969|     10|            "f16vec2   smoothstep(f16vec2,   f16vec2,   f16vec2);"
 3970|     10|            "f16vec3   smoothstep(f16vec3,   f16vec3,   f16vec3);"
 3971|     10|            "f16vec4   smoothstep(f16vec4,   f16vec4,   f16vec4);"
 3972|     10|            "f16vec2   smoothstep(float16_t, float16_t, f16vec2);"
 3973|     10|            "f16vec3   smoothstep(float16_t, float16_t, f16vec3);"
 3974|     10|            "f16vec4   smoothstep(float16_t, float16_t, f16vec4);"
 3975|       |
 3976|     10|            "bool  isnan(float16_t);"
 3977|     10|            "bvec2 isnan(f16vec2);"
 3978|     10|            "bvec3 isnan(f16vec3);"
 3979|     10|            "bvec4 isnan(f16vec4);"
 3980|       |
 3981|     10|            "bool  isinf(float16_t);"
 3982|     10|            "bvec2 isinf(f16vec2);"
 3983|     10|            "bvec3 isinf(f16vec3);"
 3984|     10|            "bvec4 isinf(f16vec4);"
 3985|       |
 3986|     10|            "float16_t fma(float16_t, float16_t, float16_t);"
 3987|     10|            "f16vec2   fma(f16vec2,   f16vec2,   f16vec2);"
 3988|     10|            "f16vec3   fma(f16vec3,   f16vec3,   f16vec3);"
 3989|     10|            "f16vec4   fma(f16vec4,   f16vec4,   f16vec4);"
 3990|       |
 3991|     10|            "float16_t frexp(float16_t, out int);"
 3992|     10|            "f16vec2   frexp(f16vec2,   out ivec2);"
 3993|     10|            "f16vec3   frexp(f16vec3,   out ivec3);"
 3994|     10|            "f16vec4   frexp(f16vec4,   out ivec4);"
 3995|       |
 3996|     10|            "float16_t ldexp(float16_t, in int);"
 3997|     10|            "f16vec2   ldexp(f16vec2,   in ivec2);"
 3998|     10|            "f16vec3   ldexp(f16vec3,   in ivec3);"
 3999|     10|            "f16vec4   ldexp(f16vec4,   in ivec4);"
 4000|       |
 4001|     10|            "uint    packFloat2x16(f16vec2);"
 4002|     10|            "f16vec2 unpackFloat2x16(uint);"
 4003|       |
 4004|     10|            "float16_t length(float16_t);"
 4005|     10|            "float16_t length(f16vec2);"
 4006|     10|            "float16_t length(f16vec3);"
 4007|     10|            "float16_t length(f16vec4);"
 4008|       |
 4009|     10|            "float16_t distance(float16_t, float16_t);"
 4010|     10|            "float16_t distance(f16vec2,   f16vec2);"
 4011|     10|            "float16_t distance(f16vec3,   f16vec3);"
 4012|     10|            "float16_t distance(f16vec4,   f16vec4);"
 4013|       |
 4014|     10|            "float16_t dot(float16_t, float16_t);"
 4015|     10|            "float16_t dot(f16vec2,   f16vec2);"
 4016|     10|            "float16_t dot(f16vec3,   f16vec3);"
 4017|     10|            "float16_t dot(f16vec4,   f16vec4);"
 4018|       |
 4019|     10|            "f16vec3 cross(f16vec3, f16vec3);"
 4020|       |
 4021|     10|            "float16_t normalize(float16_t);"
 4022|     10|            "f16vec2   normalize(f16vec2);"
 4023|     10|            "f16vec3   normalize(f16vec3);"
 4024|     10|            "f16vec4   normalize(f16vec4);"
 4025|       |
 4026|     10|            "float16_t faceforward(float16_t, float16_t, float16_t);"
 4027|     10|            "f16vec2   faceforward(f16vec2,   f16vec2,   f16vec2);"
 4028|     10|            "f16vec3   faceforward(f16vec3,   f16vec3,   f16vec3);"
 4029|     10|            "f16vec4   faceforward(f16vec4,   f16vec4,   f16vec4);"
 4030|       |
 4031|     10|            "float16_t reflect(float16_t, float16_t);"
 4032|     10|            "f16vec2   reflect(f16vec2,   f16vec2);"
 4033|     10|            "f16vec3   reflect(f16vec3,   f16vec3);"
 4034|     10|            "f16vec4   reflect(f16vec4,   f16vec4);"
 4035|       |
 4036|     10|            "float16_t refract(float16_t, float16_t, float16_t);"
 4037|     10|            "f16vec2   refract(f16vec2,   f16vec2,   float16_t);"
 4038|     10|            "f16vec3   refract(f16vec3,   f16vec3,   float16_t);"
 4039|     10|            "f16vec4   refract(f16vec4,   f16vec4,   float16_t);"
 4040|       |
 4041|     10|            "f16mat2   matrixCompMult(f16mat2,   f16mat2);"
 4042|     10|            "f16mat3   matrixCompMult(f16mat3,   f16mat3);"
 4043|     10|            "f16mat4   matrixCompMult(f16mat4,   f16mat4);"
 4044|     10|            "f16mat2x3 matrixCompMult(f16mat2x3, f16mat2x3);"
 4045|     10|            "f16mat2x4 matrixCompMult(f16mat2x4, f16mat2x4);"
 4046|     10|            "f16mat3x2 matrixCompMult(f16mat3x2, f16mat3x2);"
 4047|     10|            "f16mat3x4 matrixCompMult(f16mat3x4, f16mat3x4);"
 4048|     10|            "f16mat4x2 matrixCompMult(f16mat4x2, f16mat4x2);"
 4049|     10|            "f16mat4x3 matrixCompMult(f16mat4x3, f16mat4x3);"
 4050|       |
 4051|     10|            "f16mat2   outerProduct(f16vec2, f16vec2);"
 4052|     10|            "f16mat3   outerProduct(f16vec3, f16vec3);"
 4053|     10|            "f16mat4   outerProduct(f16vec4, f16vec4);"
 4054|     10|            "f16mat2x3 outerProduct(f16vec3, f16vec2);"
 4055|     10|            "f16mat3x2 outerProduct(f16vec2, f16vec3);"
 4056|     10|            "f16mat2x4 outerProduct(f16vec4, f16vec2);"
 4057|     10|            "f16mat4x2 outerProduct(f16vec2, f16vec4);"
 4058|     10|            "f16mat3x4 outerProduct(f16vec4, f16vec3);"
 4059|     10|            "f16mat4x3 outerProduct(f16vec3, f16vec4);"
 4060|       |
 4061|     10|            "f16mat2   transpose(f16mat2);"
 4062|     10|            "f16mat3   transpose(f16mat3);"
 4063|     10|            "f16mat4   transpose(f16mat4);"
 4064|     10|            "f16mat2x3 transpose(f16mat3x2);"
 4065|     10|            "f16mat3x2 transpose(f16mat2x3);"
 4066|     10|            "f16mat2x4 transpose(f16mat4x2);"
 4067|     10|            "f16mat4x2 transpose(f16mat2x4);"
 4068|     10|            "f16mat3x4 transpose(f16mat4x3);"
 4069|     10|            "f16mat4x3 transpose(f16mat3x4);"
 4070|       |
 4071|     10|            "float16_t determinant(f16mat2);"
 4072|     10|            "float16_t determinant(f16mat3);"
 4073|     10|            "float16_t determinant(f16mat4);"
 4074|       |
 4075|     10|            "f16mat2 inverse(f16mat2);"
 4076|     10|            "f16mat3 inverse(f16mat3);"
 4077|     10|            "f16mat4 inverse(f16mat4);"
 4078|       |
 4079|     10|            "bvec2 lessThan(f16vec2, f16vec2);"
 4080|     10|            "bvec3 lessThan(f16vec3, f16vec3);"
 4081|     10|            "bvec4 lessThan(f16vec4, f16vec4);"
 4082|       |
 4083|     10|            "bvec2 lessThanEqual(f16vec2, f16vec2);"
 4084|     10|            "bvec3 lessThanEqual(f16vec3, f16vec3);"
 4085|     10|            "bvec4 lessThanEqual(f16vec4, f16vec4);"
 4086|       |
 4087|     10|            "bvec2 greaterThan(f16vec2, f16vec2);"
 4088|     10|            "bvec3 greaterThan(f16vec3, f16vec3);"
 4089|     10|            "bvec4 greaterThan(f16vec4, f16vec4);"
 4090|       |
 4091|     10|            "bvec2 greaterThanEqual(f16vec2, f16vec2);"
 4092|     10|            "bvec3 greaterThanEqual(f16vec3, f16vec3);"
 4093|     10|            "bvec4 greaterThanEqual(f16vec4, f16vec4);"
 4094|       |
 4095|     10|            "bvec2 equal(f16vec2, f16vec2);"
 4096|     10|            "bvec3 equal(f16vec3, f16vec3);"
 4097|     10|            "bvec4 equal(f16vec4, f16vec4);"
 4098|       |
 4099|     10|            "bvec2 notEqual(f16vec2, f16vec2);"
 4100|     10|            "bvec3 notEqual(f16vec3, f16vec3);"
 4101|     10|            "bvec4 notEqual(f16vec4, f16vec4);"
 4102|       |
 4103|     10|            "bfloat16_t dot(bfloat16_t, bfloat16_t);"
 4104|     10|            "bfloat16_t dot(bf16vec2,   bf16vec2);"
 4105|     10|            "bfloat16_t dot(bf16vec3,   bf16vec3);"
 4106|     10|            "bfloat16_t dot(bf16vec4,   bf16vec4);"
 4107|       |
 4108|     10|            "int16_t  bfloat16BitsToIntEXT(bfloat16_t value);"
 4109|     10|            "i16vec2  bfloat16BitsToIntEXT(bf16vec2 value);"
 4110|     10|            "i16vec3  bfloat16BitsToIntEXT(bf16vec3 value);"
 4111|     10|            "i16vec4  bfloat16BitsToIntEXT(bf16vec4 value);"
 4112|       |
 4113|     10|            "uint16_t bfloat16BitsToUintEXT(bfloat16_t value);"
 4114|     10|            "u16vec2  bfloat16BitsToUintEXT(bf16vec2 value);"
 4115|     10|            "u16vec3  bfloat16BitsToUintEXT(bf16vec3 value);"
 4116|     10|            "u16vec4  bfloat16BitsToUintEXT(bf16vec4 value);"
 4117|       |
 4118|     10|            "bfloat16_t intBitsToBFloat16EXT(int16_t value);"
 4119|     10|            "bf16vec2   intBitsToBFloat16EXT(i16vec2 value);"
 4120|     10|            "bf16vec3   intBitsToBFloat16EXT(i16vec3 value);"
 4121|     10|            "bf16vec4   intBitsToBFloat16EXT(i16vec4 value);"
 4122|       |
 4123|     10|            "bfloat16_t uintBitsToBFloat16EXT(uint16_t value);"
 4124|     10|            "bf16vec2   uintBitsToBFloat16EXT(u16vec2 value);"
 4125|     10|            "bf16vec3   uintBitsToBFloat16EXT(u16vec3 value);"
 4126|     10|            "bf16vec4   uintBitsToBFloat16EXT(u16vec4 value);"
 4127|       |
 4128|     10|            "int8_t  floate5m2BitsToIntEXT(floate5m2_t value);"
 4129|     10|            "i8vec2  floate5m2BitsToIntEXT(fe5m2vec2 value);"
 4130|     10|            "i8vec3  floate5m2BitsToIntEXT(fe5m2vec3 value);"
 4131|     10|            "i8vec4  floate5m2BitsToIntEXT(fe5m2vec4 value);"
 4132|       |
 4133|     10|            "uint8_t floate5m2BitsToUintEXT(floate5m2_t value);"
 4134|     10|            "u8vec2  floate5m2BitsToUintEXT(fe5m2vec2 value);"
 4135|     10|            "u8vec3  floate5m2BitsToUintEXT(fe5m2vec3 value);"
 4136|     10|            "u8vec4  floate5m2BitsToUintEXT(fe5m2vec4 value);"
 4137|       |
 4138|     10|            "floate5m2_t intBitsToFloate5m2EXT(int8_t value);"
 4139|     10|            "fe5m2vec2   intBitsToFloate5m2EXT(i8vec2 value);"
 4140|     10|            "fe5m2vec3   intBitsToFloate5m2EXT(i8vec3 value);"
 4141|     10|            "fe5m2vec4   intBitsToFloate5m2EXT(i8vec4 value);"
 4142|       |
 4143|     10|            "floate5m2_t uintBitsToFloate5m2EXT(uint8_t value);"
 4144|     10|            "fe5m2vec2   uintBitsToFloate5m2EXT(u8vec2 value);"
 4145|     10|            "fe5m2vec3   uintBitsToFloate5m2EXT(u8vec3 value);"
 4146|     10|            "fe5m2vec4   uintBitsToFloate5m2EXT(u8vec4 value);"
 4147|       |
 4148|     10|            "int8_t  floate4m3BitsToIntEXT(floate4m3_t value);"
 4149|     10|            "i8vec2  floate4m3BitsToIntEXT(fe4m3vec2 value);"
 4150|     10|            "i8vec3  floate4m3BitsToIntEXT(fe4m3vec3 value);"
 4151|     10|            "i8vec4  floate4m3BitsToIntEXT(fe4m3vec4 value);"
 4152|       |
 4153|     10|            "uint8_t floate4m3BitsToUintEXT(floate4m3_t value);"
 4154|     10|            "u8vec2  floate4m3BitsToUintEXT(fe4m3vec2 value);"
 4155|     10|            "u8vec3  floate4m3BitsToUintEXT(fe4m3vec3 value);"
 4156|     10|            "u8vec4  floate4m3BitsToUintEXT(fe4m3vec4 value);"
 4157|       |
 4158|     10|            "floate4m3_t intBitsToFloate4m3EXT(int8_t value);"
 4159|     10|            "fe4m3vec2   intBitsToFloate4m3EXT(i8vec2 value);"
 4160|     10|            "fe4m3vec3   intBitsToFloate4m3EXT(i8vec3 value);"
 4161|     10|            "fe4m3vec4   intBitsToFloate4m3EXT(i8vec4 value);"
 4162|       |
 4163|     10|            "floate4m3_t uintBitsToFloate4m3EXT(uint8_t value);"
 4164|     10|            "fe4m3vec2   uintBitsToFloate4m3EXT(u8vec2 value);"
 4165|     10|            "fe4m3vec3   uintBitsToFloate4m3EXT(u8vec3 value);"
 4166|     10|            "fe4m3vec4   uintBitsToFloate4m3EXT(u8vec4 value);"
 4167|       |
 4168|     10|            "void saturatedConvertEXT();"
 4169|     10|            "\n");
 4170|     10|    }
 4171|       |
 4172|       |    // Explicit types
 4173|     99|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (4173:10): [True: 99, False: 0]
  |  Branch (4173:35): [True: 10, False: 89]
  |  Branch (4173:55): [True: 0, False: 89]
  |  Branch (4173:80): [True: 0, False: 0]
  ------------------
 4174|     10|        commonBuiltins.append(
 4175|     10|            "int8_t abs(int8_t);"
 4176|     10|            "i8vec2 abs(i8vec2);"
 4177|     10|            "i8vec3 abs(i8vec3);"
 4178|     10|            "i8vec4 abs(i8vec4);"
 4179|       |
 4180|     10|            "int8_t sign(int8_t);"
 4181|     10|            "i8vec2 sign(i8vec2);"
 4182|     10|            "i8vec3 sign(i8vec3);"
 4183|     10|            "i8vec4 sign(i8vec4);"
 4184|       |
 4185|     10|            "int8_t min(int8_t x, int8_t y);"
 4186|     10|            "i8vec2 min(i8vec2 x, int8_t y);"
 4187|     10|            "i8vec3 min(i8vec3 x, int8_t y);"
 4188|     10|            "i8vec4 min(i8vec4 x, int8_t y);"
 4189|     10|            "i8vec2 min(i8vec2 x, i8vec2 y);"
 4190|     10|            "i8vec3 min(i8vec3 x, i8vec3 y);"
 4191|     10|            "i8vec4 min(i8vec4 x, i8vec4 y);"
 4192|       |
 4193|     10|            "uint8_t min(uint8_t x, uint8_t y);"
 4194|     10|            "u8vec2 min(u8vec2 x, uint8_t y);"
 4195|     10|            "u8vec3 min(u8vec3 x, uint8_t y);"
 4196|     10|            "u8vec4 min(u8vec4 x, uint8_t y);"
 4197|     10|            "u8vec2 min(u8vec2 x, u8vec2 y);"
 4198|     10|            "u8vec3 min(u8vec3 x, u8vec3 y);"
 4199|     10|            "u8vec4 min(u8vec4 x, u8vec4 y);"
 4200|       |
 4201|     10|            "int8_t max(int8_t x, int8_t y);"
 4202|     10|            "i8vec2 max(i8vec2 x, int8_t y);"
 4203|     10|            "i8vec3 max(i8vec3 x, int8_t y);"
 4204|     10|            "i8vec4 max(i8vec4 x, int8_t y);"
 4205|     10|            "i8vec2 max(i8vec2 x, i8vec2 y);"
 4206|     10|            "i8vec3 max(i8vec3 x, i8vec3 y);"
 4207|     10|            "i8vec4 max(i8vec4 x, i8vec4 y);"
 4208|       |
 4209|     10|            "uint8_t max(uint8_t x, uint8_t y);"
 4210|     10|            "u8vec2 max(u8vec2 x, uint8_t y);"
 4211|     10|            "u8vec3 max(u8vec3 x, uint8_t y);"
 4212|     10|            "u8vec4 max(u8vec4 x, uint8_t y);"
 4213|     10|            "u8vec2 max(u8vec2 x, u8vec2 y);"
 4214|     10|            "u8vec3 max(u8vec3 x, u8vec3 y);"
 4215|     10|            "u8vec4 max(u8vec4 x, u8vec4 y);"
 4216|       |
 4217|     10|            "int8_t    clamp(int8_t x, int8_t minVal, int8_t maxVal);"
 4218|     10|            "i8vec2  clamp(i8vec2  x, int8_t minVal, int8_t maxVal);"
 4219|     10|            "i8vec3  clamp(i8vec3  x, int8_t minVal, int8_t maxVal);"
 4220|     10|            "i8vec4  clamp(i8vec4  x, int8_t minVal, int8_t maxVal);"
 4221|     10|            "i8vec2  clamp(i8vec2  x, i8vec2  minVal, i8vec2  maxVal);"
 4222|     10|            "i8vec3  clamp(i8vec3  x, i8vec3  minVal, i8vec3  maxVal);"
 4223|     10|            "i8vec4  clamp(i8vec4  x, i8vec4  minVal, i8vec4  maxVal);"
 4224|       |
 4225|     10|            "uint8_t   clamp(uint8_t x, uint8_t minVal, uint8_t maxVal);"
 4226|     10|            "u8vec2  clamp(u8vec2  x, uint8_t minVal, uint8_t maxVal);"
 4227|     10|            "u8vec3  clamp(u8vec3  x, uint8_t minVal, uint8_t maxVal);"
 4228|     10|            "u8vec4  clamp(u8vec4  x, uint8_t minVal, uint8_t maxVal);"
 4229|     10|            "u8vec2  clamp(u8vec2  x, u8vec2  minVal, u8vec2  maxVal);"
 4230|     10|            "u8vec3  clamp(u8vec3  x, u8vec3  minVal, u8vec3  maxVal);"
 4231|     10|            "u8vec4  clamp(u8vec4  x, u8vec4  minVal, u8vec4  maxVal);"
 4232|       |
 4233|     10|            "int8_t  mix(int8_t,  int8_t,  bool);"
 4234|     10|            "i8vec2  mix(i8vec2,  i8vec2,  bvec2);"
 4235|     10|            "i8vec3  mix(i8vec3,  i8vec3,  bvec3);"
 4236|     10|            "i8vec4  mix(i8vec4,  i8vec4,  bvec4);"
 4237|     10|            "uint8_t mix(uint8_t, uint8_t, bool);"
 4238|     10|            "u8vec2  mix(u8vec2,  u8vec2,  bvec2);"
 4239|     10|            "u8vec3  mix(u8vec3,  u8vec3,  bvec3);"
 4240|     10|            "u8vec4  mix(u8vec4,  u8vec4,  bvec4);"
 4241|       |
 4242|     10|            "bvec2 lessThan(i8vec2, i8vec2);"
 4243|     10|            "bvec3 lessThan(i8vec3, i8vec3);"
 4244|     10|            "bvec4 lessThan(i8vec4, i8vec4);"
 4245|     10|            "bvec2 lessThan(u8vec2, u8vec2);"
 4246|     10|            "bvec3 lessThan(u8vec3, u8vec3);"
 4247|     10|            "bvec4 lessThan(u8vec4, u8vec4);"
 4248|       |
 4249|     10|            "bvec2 lessThanEqual(i8vec2, i8vec2);"
 4250|     10|            "bvec3 lessThanEqual(i8vec3, i8vec3);"
 4251|     10|            "bvec4 lessThanEqual(i8vec4, i8vec4);"
 4252|     10|            "bvec2 lessThanEqual(u8vec2, u8vec2);"
 4253|     10|            "bvec3 lessThanEqual(u8vec3, u8vec3);"
 4254|     10|            "bvec4 lessThanEqual(u8vec4, u8vec4);"
 4255|       |
 4256|     10|            "bvec2 greaterThan(i8vec2, i8vec2);"
 4257|     10|            "bvec3 greaterThan(i8vec3, i8vec3);"
 4258|     10|            "bvec4 greaterThan(i8vec4, i8vec4);"
 4259|     10|            "bvec2 greaterThan(u8vec2, u8vec2);"
 4260|     10|            "bvec3 greaterThan(u8vec3, u8vec3);"
 4261|     10|            "bvec4 greaterThan(u8vec4, u8vec4);"
 4262|       |
 4263|     10|            "bvec2 greaterThanEqual(i8vec2, i8vec2);"
 4264|     10|            "bvec3 greaterThanEqual(i8vec3, i8vec3);"
 4265|     10|            "bvec4 greaterThanEqual(i8vec4, i8vec4);"
 4266|     10|            "bvec2 greaterThanEqual(u8vec2, u8vec2);"
 4267|     10|            "bvec3 greaterThanEqual(u8vec3, u8vec3);"
 4268|     10|            "bvec4 greaterThanEqual(u8vec4, u8vec4);"
 4269|       |
 4270|     10|            "bvec2 equal(i8vec2, i8vec2);"
 4271|     10|            "bvec3 equal(i8vec3, i8vec3);"
 4272|     10|            "bvec4 equal(i8vec4, i8vec4);"
 4273|     10|            "bvec2 equal(u8vec2, u8vec2);"
 4274|     10|            "bvec3 equal(u8vec3, u8vec3);"
 4275|     10|            "bvec4 equal(u8vec4, u8vec4);"
 4276|       |
 4277|     10|            "bvec2 notEqual(i8vec2, i8vec2);"
 4278|     10|            "bvec3 notEqual(i8vec3, i8vec3);"
 4279|     10|            "bvec4 notEqual(i8vec4, i8vec4);"
 4280|     10|            "bvec2 notEqual(u8vec2, u8vec2);"
 4281|     10|            "bvec3 notEqual(u8vec3, u8vec3);"
 4282|     10|            "bvec4 notEqual(u8vec4, u8vec4);"
 4283|       |
 4284|     10|            "  int8_t bitfieldExtract(  int8_t, int8_t, int8_t);"
 4285|     10|            "i8vec2 bitfieldExtract(i8vec2, int8_t, int8_t);"
 4286|     10|            "i8vec3 bitfieldExtract(i8vec3, int8_t, int8_t);"
 4287|     10|            "i8vec4 bitfieldExtract(i8vec4, int8_t, int8_t);"
 4288|       |
 4289|     10|            " uint8_t bitfieldExtract( uint8_t, int8_t, int8_t);"
 4290|     10|            "u8vec2 bitfieldExtract(u8vec2, int8_t, int8_t);"
 4291|     10|            "u8vec3 bitfieldExtract(u8vec3, int8_t, int8_t);"
 4292|     10|            "u8vec4 bitfieldExtract(u8vec4, int8_t, int8_t);"
 4293|       |
 4294|     10|            "  int8_t bitfieldInsert(  int8_t base,   int8_t, int8_t, int8_t);"
 4295|     10|            "i8vec2 bitfieldInsert(i8vec2 base, i8vec2, int8_t, int8_t);"
 4296|     10|            "i8vec3 bitfieldInsert(i8vec3 base, i8vec3, int8_t, int8_t);"
 4297|     10|            "i8vec4 bitfieldInsert(i8vec4 base, i8vec4, int8_t, int8_t);"
 4298|       |
 4299|     10|            " uint8_t bitfieldInsert( uint8_t base,  uint8_t, int8_t, int8_t);"
 4300|     10|            "u8vec2 bitfieldInsert(u8vec2 base, u8vec2, int8_t, int8_t);"
 4301|     10|            "u8vec3 bitfieldInsert(u8vec3 base, u8vec3, int8_t, int8_t);"
 4302|     10|            "u8vec4 bitfieldInsert(u8vec4 base, u8vec4, int8_t, int8_t);"
 4303|       |
 4304|     10|            "  int8_t bitCount(  int8_t);"
 4305|     10|            "i8vec2 bitCount(i8vec2);"
 4306|     10|            "i8vec3 bitCount(i8vec3);"
 4307|     10|            "i8vec4 bitCount(i8vec4);"
 4308|       |
 4309|     10|            "  int8_t bitCount( uint8_t);"
 4310|     10|            "i8vec2 bitCount(u8vec2);"
 4311|     10|            "i8vec3 bitCount(u8vec3);"
 4312|     10|            "i8vec4 bitCount(u8vec4);"
 4313|       |
 4314|     10|            "int8_t bitfieldReverse(highp int8_t);"
 4315|     10|            "i8vec2 bitfieldReverse(highp i8vec2);"
 4316|     10|            "i8vec3 bitfieldReverse(highp i8vec3);"
 4317|     10|            "i8vec4 bitfieldReverse(highp i8vec4);"
 4318|       |
 4319|     10|            "uint8_t bitfieldReverse(highp uint8_t);"
 4320|     10|            "u8vec2  bitfieldReverse(highp u8vec2);"
 4321|     10|            "u8vec3  bitfieldReverse(highp u8vec3);"
 4322|     10|            "u8vec4  bitfieldReverse(highp u8vec4);"
 4323|       |
 4324|     10|            "  int8_t findLSB(  int8_t);"
 4325|     10|            "i8vec2 findLSB(i8vec2);"
 4326|     10|            "i8vec3 findLSB(i8vec3);"
 4327|     10|            "i8vec4 findLSB(i8vec4);"
 4328|       |
 4329|     10|            "  int8_t findLSB( uint8_t);"
 4330|     10|            "i8vec2 findLSB(u8vec2);"
 4331|     10|            "i8vec3 findLSB(u8vec3);"
 4332|     10|            "i8vec4 findLSB(u8vec4);"
 4333|       |
 4334|     10|            "  int8_t findMSB(  int8_t);"
 4335|     10|            "i8vec2 findMSB(i8vec2);"
 4336|     10|            "i8vec3 findMSB(i8vec3);"
 4337|     10|            "i8vec4 findMSB(i8vec4);"
 4338|       |
 4339|     10|            "  int8_t findMSB( uint8_t);"
 4340|     10|            "i8vec2 findMSB(u8vec2);"
 4341|     10|            "i8vec3 findMSB(u8vec3);"
 4342|     10|            "i8vec4 findMSB(u8vec4);"
 4343|       |
 4344|     10|            "int16_t abs(int16_t);"
 4345|     10|            "i16vec2 abs(i16vec2);"
 4346|     10|            "i16vec3 abs(i16vec3);"
 4347|     10|            "i16vec4 abs(i16vec4);"
 4348|       |
 4349|     10|            "int16_t sign(int16_t);"
 4350|     10|            "i16vec2 sign(i16vec2);"
 4351|     10|            "i16vec3 sign(i16vec3);"
 4352|     10|            "i16vec4 sign(i16vec4);"
 4353|       |
 4354|     10|            "int16_t min(int16_t x, int16_t y);"
 4355|     10|            "i16vec2 min(i16vec2 x, int16_t y);"
 4356|     10|            "i16vec3 min(i16vec3 x, int16_t y);"
 4357|     10|            "i16vec4 min(i16vec4 x, int16_t y);"
 4358|     10|            "i16vec2 min(i16vec2 x, i16vec2 y);"
 4359|     10|            "i16vec3 min(i16vec3 x, i16vec3 y);"
 4360|     10|            "i16vec4 min(i16vec4 x, i16vec4 y);"
 4361|       |
 4362|     10|            "uint16_t min(uint16_t x, uint16_t y);"
 4363|     10|            "u16vec2 min(u16vec2 x, uint16_t y);"
 4364|     10|            "u16vec3 min(u16vec3 x, uint16_t y);"
 4365|     10|            "u16vec4 min(u16vec4 x, uint16_t y);"
 4366|     10|            "u16vec2 min(u16vec2 x, u16vec2 y);"
 4367|     10|            "u16vec3 min(u16vec3 x, u16vec3 y);"
 4368|     10|            "u16vec4 min(u16vec4 x, u16vec4 y);"
 4369|       |
 4370|     10|            "int16_t max(int16_t x, int16_t y);"
 4371|     10|            "i16vec2 max(i16vec2 x, int16_t y);"
 4372|     10|            "i16vec3 max(i16vec3 x, int16_t y);"
 4373|     10|            "i16vec4 max(i16vec4 x, int16_t y);"
 4374|     10|            "i16vec2 max(i16vec2 x, i16vec2 y);"
 4375|     10|            "i16vec3 max(i16vec3 x, i16vec3 y);"
 4376|     10|            "i16vec4 max(i16vec4 x, i16vec4 y);"
 4377|       |
 4378|     10|            "uint16_t max(uint16_t x, uint16_t y);"
 4379|     10|            "u16vec2 max(u16vec2 x, uint16_t y);"
 4380|     10|            "u16vec3 max(u16vec3 x, uint16_t y);"
 4381|     10|            "u16vec4 max(u16vec4 x, uint16_t y);"
 4382|     10|            "u16vec2 max(u16vec2 x, u16vec2 y);"
 4383|     10|            "u16vec3 max(u16vec3 x, u16vec3 y);"
 4384|     10|            "u16vec4 max(u16vec4 x, u16vec4 y);"
 4385|       |
 4386|     10|            "int16_t    clamp(int16_t x, int16_t minVal, int16_t maxVal);"
 4387|     10|            "i16vec2  clamp(i16vec2  x, int16_t minVal, int16_t maxVal);"
 4388|     10|            "i16vec3  clamp(i16vec3  x, int16_t minVal, int16_t maxVal);"
 4389|     10|            "i16vec4  clamp(i16vec4  x, int16_t minVal, int16_t maxVal);"
 4390|     10|            "i16vec2  clamp(i16vec2  x, i16vec2  minVal, i16vec2  maxVal);"
 4391|     10|            "i16vec3  clamp(i16vec3  x, i16vec3  minVal, i16vec3  maxVal);"
 4392|     10|            "i16vec4  clamp(i16vec4  x, i16vec4  minVal, i16vec4  maxVal);"
 4393|       |
 4394|     10|            "uint16_t   clamp(uint16_t x, uint16_t minVal, uint16_t maxVal);"
 4395|     10|            "u16vec2  clamp(u16vec2  x, uint16_t minVal, uint16_t maxVal);"
 4396|     10|            "u16vec3  clamp(u16vec3  x, uint16_t minVal, uint16_t maxVal);"
 4397|     10|            "u16vec4  clamp(u16vec4  x, uint16_t minVal, uint16_t maxVal);"
 4398|     10|            "u16vec2  clamp(u16vec2  x, u16vec2  minVal, u16vec2  maxVal);"
 4399|     10|            "u16vec3  clamp(u16vec3  x, u16vec3  minVal, u16vec3  maxVal);"
 4400|     10|            "u16vec4  clamp(u16vec4  x, u16vec4  minVal, u16vec4  maxVal);"
 4401|       |
 4402|     10|            "int16_t  mix(int16_t,  int16_t,  bool);"
 4403|     10|            "i16vec2  mix(i16vec2,  i16vec2,  bvec2);"
 4404|     10|            "i16vec3  mix(i16vec3,  i16vec3,  bvec3);"
 4405|     10|            "i16vec4  mix(i16vec4,  i16vec4,  bvec4);"
 4406|     10|            "uint16_t mix(uint16_t, uint16_t, bool);"
 4407|     10|            "u16vec2  mix(u16vec2,  u16vec2,  bvec2);"
 4408|     10|            "u16vec3  mix(u16vec3,  u16vec3,  bvec3);"
 4409|     10|            "u16vec4  mix(u16vec4,  u16vec4,  bvec4);"
 4410|       |
 4411|     10|            "float16_t frexp(float16_t, out int16_t);"
 4412|     10|            "f16vec2   frexp(f16vec2,   out i16vec2);"
 4413|     10|            "f16vec3   frexp(f16vec3,   out i16vec3);"
 4414|     10|            "f16vec4   frexp(f16vec4,   out i16vec4);"
 4415|       |
 4416|     10|            "float16_t ldexp(float16_t, int16_t);"
 4417|     10|            "f16vec2   ldexp(f16vec2,   i16vec2);"
 4418|     10|            "f16vec3   ldexp(f16vec3,   i16vec3);"
 4419|     10|            "f16vec4   ldexp(f16vec4,   i16vec4);"
 4420|       |
 4421|     10|            "int16_t halfBitsToInt16(float16_t);"
 4422|     10|            "i16vec2 halfBitsToInt16(f16vec2);"
 4423|     10|            "i16vec3 halhBitsToInt16(f16vec3);"
 4424|     10|            "i16vec4 halfBitsToInt16(f16vec4);"
 4425|       |
 4426|     10|            "uint16_t halfBitsToUint16(float16_t);"
 4427|     10|            "u16vec2  halfBitsToUint16(f16vec2);"
 4428|     10|            "u16vec3  halfBitsToUint16(f16vec3);"
 4429|     10|            "u16vec4  halfBitsToUint16(f16vec4);"
 4430|       |
 4431|     10|            "int16_t float16BitsToInt16(float16_t);"
 4432|     10|            "i16vec2 float16BitsToInt16(f16vec2);"
 4433|     10|            "i16vec3 float16BitsToInt16(f16vec3);"
 4434|     10|            "i16vec4 float16BitsToInt16(f16vec4);"
 4435|       |
 4436|     10|            "uint16_t float16BitsToUint16(float16_t);"
 4437|     10|            "u16vec2  float16BitsToUint16(f16vec2);"
 4438|     10|            "u16vec3  float16BitsToUint16(f16vec3);"
 4439|     10|            "u16vec4  float16BitsToUint16(f16vec4);"
 4440|       |
 4441|     10|            "float16_t int16BitsToFloat16(int16_t);"
 4442|     10|            "f16vec2   int16BitsToFloat16(i16vec2);"
 4443|     10|            "f16vec3   int16BitsToFloat16(i16vec3);"
 4444|     10|            "f16vec4   int16BitsToFloat16(i16vec4);"
 4445|       |
 4446|     10|            "float16_t uint16BitsToFloat16(uint16_t);"
 4447|     10|            "f16vec2   uint16BitsToFloat16(u16vec2);"
 4448|     10|            "f16vec3   uint16BitsToFloat16(u16vec3);"
 4449|     10|            "f16vec4   uint16BitsToFloat16(u16vec4);"
 4450|       |
 4451|     10|            "float16_t int16BitsToHalf(int16_t);"
 4452|     10|            "f16vec2   int16BitsToHalf(i16vec2);"
 4453|     10|            "f16vec3   int16BitsToHalf(i16vec3);"
 4454|     10|            "f16vec4   int16BitsToHalf(i16vec4);"
 4455|       |
 4456|     10|            "float16_t uint16BitsToHalf(uint16_t);"
 4457|     10|            "f16vec2   uint16BitsToHalf(u16vec2);"
 4458|     10|            "f16vec3   uint16BitsToHalf(u16vec3);"
 4459|     10|            "f16vec4   uint16BitsToHalf(u16vec4);"
 4460|       |
 4461|     10|            "int      packInt2x16(i16vec2);"
 4462|     10|            "uint     packUint2x16(u16vec2);"
 4463|     10|            "int64_t  packInt4x16(i16vec4);"
 4464|     10|            "uint64_t packUint4x16(u16vec4);"
 4465|     10|            "i16vec2  unpackInt2x16(int);"
 4466|     10|            "u16vec2  unpackUint2x16(uint);"
 4467|     10|            "i16vec4  unpackInt4x16(int64_t);"
 4468|     10|            "u16vec4  unpackUint4x16(uint64_t);"
 4469|       |
 4470|     10|            "bvec2 lessThan(i16vec2, i16vec2);"
 4471|     10|            "bvec3 lessThan(i16vec3, i16vec3);"
 4472|     10|            "bvec4 lessThan(i16vec4, i16vec4);"
 4473|     10|            "bvec2 lessThan(u16vec2, u16vec2);"
 4474|     10|            "bvec3 lessThan(u16vec3, u16vec3);"
 4475|     10|            "bvec4 lessThan(u16vec4, u16vec4);"
 4476|       |
 4477|     10|            "bvec2 lessThanEqual(i16vec2, i16vec2);"
 4478|     10|            "bvec3 lessThanEqual(i16vec3, i16vec3);"
 4479|     10|            "bvec4 lessThanEqual(i16vec4, i16vec4);"
 4480|     10|            "bvec2 lessThanEqual(u16vec2, u16vec2);"
 4481|     10|            "bvec3 lessThanEqual(u16vec3, u16vec3);"
 4482|     10|            "bvec4 lessThanEqual(u16vec4, u16vec4);"
 4483|       |
 4484|     10|            "bvec2 greaterThan(i16vec2, i16vec2);"
 4485|     10|            "bvec3 greaterThan(i16vec3, i16vec3);"
 4486|     10|            "bvec4 greaterThan(i16vec4, i16vec4);"
 4487|     10|            "bvec2 greaterThan(u16vec2, u16vec2);"
 4488|     10|            "bvec3 greaterThan(u16vec3, u16vec3);"
 4489|     10|            "bvec4 greaterThan(u16vec4, u16vec4);"
 4490|       |
 4491|     10|            "bvec2 greaterThanEqual(i16vec2, i16vec2);"
 4492|     10|            "bvec3 greaterThanEqual(i16vec3, i16vec3);"
 4493|     10|            "bvec4 greaterThanEqual(i16vec4, i16vec4);"
 4494|     10|            "bvec2 greaterThanEqual(u16vec2, u16vec2);"
 4495|     10|            "bvec3 greaterThanEqual(u16vec3, u16vec3);"
 4496|     10|            "bvec4 greaterThanEqual(u16vec4, u16vec4);"
 4497|       |
 4498|     10|            "bvec2 equal(i16vec2, i16vec2);"
 4499|     10|            "bvec3 equal(i16vec3, i16vec3);"
 4500|     10|            "bvec4 equal(i16vec4, i16vec4);"
 4501|     10|            "bvec2 equal(u16vec2, u16vec2);"
 4502|     10|            "bvec3 equal(u16vec3, u16vec3);"
 4503|     10|            "bvec4 equal(u16vec4, u16vec4);"
 4504|       |
 4505|     10|            "bvec2 notEqual(i16vec2, i16vec2);"
 4506|     10|            "bvec3 notEqual(i16vec3, i16vec3);"
 4507|     10|            "bvec4 notEqual(i16vec4, i16vec4);"
 4508|     10|            "bvec2 notEqual(u16vec2, u16vec2);"
 4509|     10|            "bvec3 notEqual(u16vec3, u16vec3);"
 4510|     10|            "bvec4 notEqual(u16vec4, u16vec4);"
 4511|       |
 4512|     10|            "  int16_t bitfieldExtract(  int16_t, int16_t, int16_t);"
 4513|     10|            "i16vec2 bitfieldExtract(i16vec2, int16_t, int16_t);"
 4514|     10|            "i16vec3 bitfieldExtract(i16vec3, int16_t, int16_t);"
 4515|     10|            "i16vec4 bitfieldExtract(i16vec4, int16_t, int16_t);"
 4516|       |
 4517|     10|            " uint16_t bitfieldExtract( uint16_t, int16_t, int16_t);"
 4518|     10|            "u16vec2 bitfieldExtract(u16vec2, int16_t, int16_t);"
 4519|     10|            "u16vec3 bitfieldExtract(u16vec3, int16_t, int16_t);"
 4520|     10|            "u16vec4 bitfieldExtract(u16vec4, int16_t, int16_t);"
 4521|       |
 4522|     10|            "  int16_t bitfieldInsert(  int16_t base,   int16_t, int16_t, int16_t);"
 4523|     10|            "i16vec2 bitfieldInsert(i16vec2 base, i16vec2, int16_t, int16_t);"
 4524|     10|            "i16vec3 bitfieldInsert(i16vec3 base, i16vec3, int16_t, int16_t);"
 4525|     10|            "i16vec4 bitfieldInsert(i16vec4 base, i16vec4, int16_t, int16_t);"
 4526|       |
 4527|     10|            " uint16_t bitfieldInsert( uint16_t base,  uint16_t, int16_t, int16_t);"
 4528|     10|            "u16vec2 bitfieldInsert(u16vec2 base, u16vec2, int16_t, int16_t);"
 4529|     10|            "u16vec3 bitfieldInsert(u16vec3 base, u16vec3, int16_t, int16_t);"
 4530|     10|            "u16vec4 bitfieldInsert(u16vec4 base, u16vec4, int16_t, int16_t);"
 4531|       |
 4532|     10|            "  int16_t bitCount(  int16_t);"
 4533|     10|            "i16vec2 bitCount(i16vec2);"
 4534|     10|            "i16vec3 bitCount(i16vec3);"
 4535|     10|            "i16vec4 bitCount(i16vec4);"
 4536|       |
 4537|     10|            "  int16_t bitCount( uint16_t);"
 4538|     10|            "i16vec2 bitCount(u16vec2);"
 4539|     10|            "i16vec3 bitCount(u16vec3);"
 4540|     10|            "i16vec4 bitCount(u16vec4);"
 4541|       |
 4542|     10|            "int16_t bitfieldReverse(highp int16_t);"
 4543|     10|            "i16vec2 bitfieldReverse(highp i16vec2);"
 4544|     10|            "i16vec3 bitfieldReverse(highp i16vec3);"
 4545|     10|            "i16vec4 bitfieldReverse(highp i16vec4);"
 4546|       |
 4547|     10|            "uint16_t bitfieldReverse(highp uint16_t);"
 4548|     10|            "u16vec2  bitfieldReverse(highp u16vec2);"
 4549|     10|            "u16vec3  bitfieldReverse(highp u16vec3);"
 4550|     10|            "u16vec4  bitfieldReverse(highp u16vec4);"
 4551|       |
 4552|     10|            "  int16_t findLSB(  int16_t);"
 4553|     10|            "i16vec2 findLSB(i16vec2);"
 4554|     10|            "i16vec3 findLSB(i16vec3);"
 4555|     10|            "i16vec4 findLSB(i16vec4);"
 4556|       |
 4557|     10|            "  int16_t findLSB( uint16_t);"
 4558|     10|            "i16vec2 findLSB(u16vec2);"
 4559|     10|            "i16vec3 findLSB(u16vec3);"
 4560|     10|            "i16vec4 findLSB(u16vec4);"
 4561|       |
 4562|     10|            "  int16_t findMSB(  int16_t);"
 4563|     10|            "i16vec2 findMSB(i16vec2);"
 4564|     10|            "i16vec3 findMSB(i16vec3);"
 4565|     10|            "i16vec4 findMSB(i16vec4);"
 4566|       |
 4567|     10|            "  int16_t findMSB( uint16_t);"
 4568|     10|            "i16vec2 findMSB(u16vec2);"
 4569|     10|            "i16vec3 findMSB(u16vec3);"
 4570|     10|            "i16vec4 findMSB(u16vec4);"
 4571|       |
 4572|     10|            "int16_t  pack16(i8vec2);"
 4573|     10|            "uint16_t pack16(u8vec2);"
 4574|     10|            "int32_t  pack32(i8vec4);"
 4575|     10|            "uint32_t pack32(u8vec4);"
 4576|     10|            "int32_t  pack32(i16vec2);"
 4577|     10|            "uint32_t pack32(u16vec2);"
 4578|     10|            "int64_t  pack64(i16vec4);"
 4579|     10|            "uint64_t pack64(u16vec4);"
 4580|     10|            "int64_t  pack64(i32vec2);"
 4581|     10|            "uint64_t pack64(u32vec2);"
 4582|       |
 4583|     10|            "i8vec2   unpack8(int16_t);"
 4584|     10|            "u8vec2   unpack8(uint16_t);"
 4585|     10|            "i8vec4   unpack8(int32_t);"
 4586|     10|            "u8vec4   unpack8(uint32_t);"
 4587|     10|            "i16vec2  unpack16(int32_t);"
 4588|     10|            "u16vec2  unpack16(uint32_t);"
 4589|     10|            "i16vec4  unpack16(int64_t);"
 4590|     10|            "u16vec4  unpack16(uint64_t);"
 4591|     10|            "i32vec2  unpack32(int64_t);"
 4592|     10|            "u32vec2  unpack32(uint64_t);"
 4593|       |
 4594|       |            // GL_EXT_expect_assume
 4595|     10|            "int8_t expectEXT(int8_t, int8_t);"
 4596|     10|            "i8vec2 expectEXT(i8vec2, i8vec2);"
 4597|     10|            "i8vec3 expectEXT(i8vec3, i8vec3);"
 4598|     10|            "i8vec4 expectEXT(i8vec4, i8vec4);"
 4599|       |
 4600|     10|            "uint8_t expectEXT(uint8_t, uint8_t);"
 4601|     10|            "u8vec2 expectEXT(u8vec2, u8vec2);"
 4602|     10|            "u8vec3 expectEXT(u8vec3, u8vec3);"
 4603|     10|            "u8vec4 expectEXT(u8vec4, u8vec4);"
 4604|       |
 4605|     10|            "int16_t expectEXT(int16_t, int16_t);"
 4606|     10|            "i16vec2 expectEXT(i16vec2, i16vec2);"
 4607|     10|            "i16vec3 expectEXT(i16vec3, i16vec3);"
 4608|     10|            "i16vec4 expectEXT(i16vec4, i16vec4);"
 4609|       |
 4610|     10|            "uint16_t expectEXT(uint16_t, uint16_t);"
 4611|     10|            "u16vec2 expectEXT(u16vec2, u16vec2);"
 4612|     10|            "u16vec3 expectEXT(u16vec3, u16vec3);"
 4613|     10|            "u16vec4 expectEXT(u16vec4, u16vec4);"
 4614|       |
 4615|     10|            "int64_t expectEXT(int64_t, int64_t);"
 4616|     10|            "i64vec2 expectEXT(i64vec2, i64vec2);"
 4617|     10|            "i64vec3 expectEXT(i64vec3, i64vec3);"
 4618|     10|            "i64vec4 expectEXT(i64vec4, i64vec4);"
 4619|       |
 4620|     10|            "uint64_t expectEXT(uint64_t, uint64_t);"
 4621|     10|            "u64vec2 expectEXT(u64vec2, u64vec2);"
 4622|     10|            "u64vec3 expectEXT(u64vec3, u64vec3);"
 4623|     10|            "u64vec4 expectEXT(u64vec4, u64vec4);"
 4624|     10|            "\n");
 4625|     10|    }
 4626|       |
 4627|       |    // Builtins for GL_EXT_texture_shadow_lod
 4628|     99|    if ((profile == EEsProfile && version >= 300) || ((profile != EEsProfile && version >= 130))) { 
  ------------------
  |  Branch (4628:10): [True: 0, False: 99]
  |  Branch (4628:35): [True: 0, False: 0]
  |  Branch (4628:56): [True: 99, False: 0]
  |  Branch (4628:81): [True: 99, False: 0]
  ------------------
 4629|     99|        commonBuiltins.append(
 4630|     99|            "float texture(sampler2DArrayShadow, vec4, float);"
 4631|     99|            "float texture(samplerCubeArrayShadow, vec4, float, float);"
 4632|     99|            "float textureLod(sampler2DArrayShadow, vec4, float);"
 4633|     99|            "float textureLod(samplerCubeShadow, vec4, float);"
 4634|     99|            "float textureLod(samplerCubeArrayShadow, vec4, float, float);"
 4635|     99|            "float textureLodOffset(sampler2DArrayShadow, vec4, float, ivec2);"
 4636|     99|            "float textureOffset(sampler2DArrayShadow, vec4 , ivec2, float);"
 4637|     99|            "\n");
 4638|     99|    }
 4639|       |
 4640|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (4640:9): [True: 99, False: 0]
  |  Branch (4640:34): [True: 10, False: 89]
  ------------------
 4641|     10|        stageBuiltins[EShLangFragment].append(derivativesAndControl64bits);
 4642|     10|        stageBuiltins[EShLangFragment].append(
 4643|     10|            "float64_t interpolateAtCentroid(float64_t);"
 4644|     10|            "f64vec2   interpolateAtCentroid(f64vec2);"
 4645|     10|            "f64vec3   interpolateAtCentroid(f64vec3);"
 4646|     10|            "f64vec4   interpolateAtCentroid(f64vec4);"
 4647|       |
 4648|     10|            "float64_t interpolateAtSample(float64_t, int);"
 4649|     10|            "f64vec2   interpolateAtSample(f64vec2,   int);"
 4650|     10|            "f64vec3   interpolateAtSample(f64vec3,   int);"
 4651|     10|            "f64vec4   interpolateAtSample(f64vec4,   int);"
 4652|       |
 4653|     10|            "float64_t interpolateAtOffset(float64_t, f64vec2);"
 4654|     10|            "f64vec2   interpolateAtOffset(f64vec2,   f64vec2);"
 4655|     10|            "f64vec3   interpolateAtOffset(f64vec3,   f64vec2);"
 4656|     10|            "f64vec4   interpolateAtOffset(f64vec4,   f64vec2);"
 4657|       |
 4658|     10|            "\n");
 4659|       |
 4660|     10|    }
 4661|       |
 4662|       |    // GL_EXT_expect_assume
 4663|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (4663:10): [True: 0, False: 99]
  |  Branch (4663:35): [True: 0, False: 0]
  ------------------
 4664|     99|         ((profile != EEsProfile && version >= 140))) {
  ------------------
  |  Branch (4664:12): [True: 99, False: 0]
  |  Branch (4664:37): [True: 99, False: 0]
  ------------------
 4665|     99|        commonBuiltins.append(
 4666|     99|            "void assumeEXT(bool);"
 4667|       |
 4668|     99|            "bool expectEXT(bool, bool);"
 4669|     99|            "bvec2 expectEXT(bvec2, bvec2);"
 4670|     99|            "bvec3 expectEXT(bvec3, bvec3);"
 4671|     99|            "bvec4 expectEXT(bvec4, bvec4);"
 4672|       |
 4673|     99|            "int expectEXT(int, int);"
 4674|     99|            "ivec2 expectEXT(ivec2, ivec2);"
 4675|     99|            "ivec3 expectEXT(ivec3, ivec3);"
 4676|     99|            "ivec4 expectEXT(ivec4, ivec4);"
 4677|       |
 4678|     99|            "uint expectEXT(uint, uint);"
 4679|     99|            "uvec2 expectEXT(uvec2, uvec2);"
 4680|     99|            "uvec3 expectEXT(uvec3, uvec3);"
 4681|     99|            "uvec4 expectEXT(uvec4, uvec4);"
 4682|     99|            "\n");
 4683|     99|    }
 4684|       |
 4685|       |    // QCOM_image_processing
 4686|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (4686:10): [True: 0, False: 99]
  |  Branch (4686:35): [True: 0, False: 0]
  ------------------
 4687|     99|         (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (4687:11): [True: 99, False: 0]
  |  Branch (4687:36): [True: 99, False: 0]
  ------------------
 4688|     99|        commonBuiltins.append(
 4689|     99|           "vec4 textureWeightedQCOM(sampler2D, vec2, sampler2DArray);"
 4690|     99|           "vec4 textureWeightedQCOM(sampler2D, vec2, sampler1DArray);"
 4691|     99|           "vec4 textureBoxFilterQCOM(sampler2D, vec2, vec2);"
 4692|     99|           "vec4 textureBlockMatchSADQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
 4693|     99|           "vec4 textureBlockMatchSSDQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
 4694|       |
 4695|     99|           "vec4 textureBlockMatchWindowSSDQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
 4696|     99|           "vec4 textureBlockMatchWindowSADQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
 4697|     99|           "vec4 textureBlockMatchGatherSSDQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
 4698|     99|           "vec4 textureBlockMatchGatherSADQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
 4699|     99|           "\n");
 4700|     99|    }
 4701|       |
 4702|       |    //============================================================================
 4703|       |    //
 4704|       |    // Prototypes for built-in functions seen by vertex shaders only.
 4705|       |    // (Except legacy lod functions, where it depends which release they are
 4706|       |    // vertex only.)
 4707|       |    //
 4708|       |    //============================================================================
 4709|       |
 4710|       |    //
 4711|       |    // Geometric Functions.
 4712|       |    //
 4713|     99|    if (spvVersion.vulkan == 0 && IncludeLegacy(version, profile, spvVersion))
  ------------------
  |  Branch (4713:9): [True: 0, False: 99]
  |  Branch (4713:35): [True: 0, False: 0]
  ------------------
 4714|      0|        stageBuiltins[EShLangVertex].append("vec4 ftransform();");
 4715|       |
 4716|       |    //
 4717|       |    // Original-style texture Functions with lod.
 4718|       |    //
 4719|     99|    TString* s;
 4720|     99|    if (version == 100)
  ------------------
  |  Branch (4720:9): [True: 0, False: 99]
  ------------------
 4721|      0|        s = &stageBuiltins[EShLangVertex];
 4722|     99|    else
 4723|     99|        s = &commonBuiltins;
 4724|     99|    if ((profile == EEsProfile && version == 100) ||
  ------------------
  |  Branch (4724:10): [True: 0, False: 99]
  |  Branch (4724:35): [True: 0, False: 0]
  ------------------
 4725|     99|         profile == ECompatibilityProfile ||
  ------------------
  |  Branch (4725:10): [True: 0, False: 99]
  ------------------
 4726|     99|        (profile == ECoreProfile && version < 420) ||
  ------------------
  |  Branch (4726:10): [True: 8, False: 91]
  |  Branch (4726:37): [True: 3, False: 5]
  ------------------
 4727|     96|         profile == ENoProfile) {
  ------------------
  |  Branch (4727:10): [True: 91, False: 5]
  ------------------
 4728|     94|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (4728:13): [True: 0, False: 94]
  ------------------
 4729|      0|            s->append(
 4730|      0|                "vec4 texture2DLod(sampler2D, vec2, float);"         // GL_ARB_shader_texture_lod
 4731|      0|                "vec4 texture2DProjLod(sampler2D, vec3, float);"     // GL_ARB_shader_texture_lod
 4732|      0|                "vec4 texture2DProjLod(sampler2D, vec4, float);"     // GL_ARB_shader_texture_lod
 4733|      0|                "vec4 texture3DLod(sampler3D, vec3, float);"         // GL_ARB_shader_texture_lod  // OES_texture_3D, but caught by keyword check
 4734|      0|                "vec4 texture3DProjLod(sampler3D, vec4, float);"     // GL_ARB_shader_texture_lod  // OES_texture_3D, but caught by keyword check
 4735|      0|                "vec4 textureCubeLod(samplerCube, vec3, float);"     // GL_ARB_shader_texture_lod
 4736|       |
 4737|      0|                "\n");
 4738|      0|        }
 4739|     94|    }
 4740|     99|    if ( profile == ECompatibilityProfile ||
  ------------------
  |  Branch (4740:10): [True: 0, False: 99]
  ------------------
 4741|     99|        (profile == ECoreProfile && version < 420) ||
  ------------------
  |  Branch (4741:10): [True: 8, False: 91]
  |  Branch (4741:37): [True: 3, False: 5]
  ------------------
 4742|     96|         profile == ENoProfile) {
  ------------------
  |  Branch (4742:10): [True: 91, False: 5]
  ------------------
 4743|     94|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (4743:13): [True: 0, False: 94]
  ------------------
 4744|      0|            s->append(
 4745|      0|                "vec4 texture1DLod(sampler1D, float, float);"                          // GL_ARB_shader_texture_lod
 4746|      0|                "vec4 texture1DProjLod(sampler1D, vec2, float);"                       // GL_ARB_shader_texture_lod
 4747|      0|                "vec4 texture1DProjLod(sampler1D, vec4, float);"                       // GL_ARB_shader_texture_lod
 4748|      0|                "vec4 shadow1DLod(sampler1DShadow, vec3, float);"                      // GL_ARB_shader_texture_lod
 4749|      0|                "vec4 shadow2DLod(sampler2DShadow, vec3, float);"                      // GL_ARB_shader_texture_lod
 4750|      0|                "vec4 shadow1DProjLod(sampler1DShadow, vec4, float);"                  // GL_ARB_shader_texture_lod
 4751|      0|                "vec4 shadow2DProjLod(sampler2DShadow, vec4, float);"                  // GL_ARB_shader_texture_lod
 4752|       |
 4753|      0|                "vec4 texture1DGradARB(sampler1D, float, float, float);"               // GL_ARB_shader_texture_lod
 4754|      0|                "vec4 texture1DProjGradARB(sampler1D, vec2, float, float);"            // GL_ARB_shader_texture_lod
 4755|      0|                "vec4 texture1DProjGradARB(sampler1D, vec4, float, float);"            // GL_ARB_shader_texture_lod
 4756|      0|                "vec4 texture2DGradARB(sampler2D, vec2, vec2, vec2);"                  // GL_ARB_shader_texture_lod
 4757|      0|                "vec4 texture2DProjGradARB(sampler2D, vec3, vec2, vec2);"              // GL_ARB_shader_texture_lod
 4758|      0|                "vec4 texture2DProjGradARB(sampler2D, vec4, vec2, vec2);"              // GL_ARB_shader_texture_lod
 4759|      0|                "vec4 texture3DGradARB(sampler3D, vec3, vec3, vec3);"                  // GL_ARB_shader_texture_lod
 4760|      0|                "vec4 texture3DProjGradARB(sampler3D, vec4, vec3, vec3);"              // GL_ARB_shader_texture_lod
 4761|      0|                "vec4 textureCubeGradARB(samplerCube, vec3, vec3, vec3);"              // GL_ARB_shader_texture_lod
 4762|      0|                "vec4 shadow1DGradARB(sampler1DShadow, vec3, float, float);"           // GL_ARB_shader_texture_lod
 4763|      0|                "vec4 shadow1DProjGradARB( sampler1DShadow, vec4, float, float);"      // GL_ARB_shader_texture_lod
 4764|      0|                "vec4 shadow2DGradARB(sampler2DShadow, vec3, vec2, vec2);"             // GL_ARB_shader_texture_lod
 4765|      0|                "vec4 shadow2DProjGradARB( sampler2DShadow, vec4, vec2, vec2);"        // GL_ARB_shader_texture_lod
 4766|      0|                "vec4 texture2DRectGradARB(sampler2DRect, vec2, vec2, vec2);"          // GL_ARB_shader_texture_lod
 4767|      0|                "vec4 texture2DRectProjGradARB( sampler2DRect, vec3, vec2, vec2);"     // GL_ARB_shader_texture_lod
 4768|      0|                "vec4 texture2DRectProjGradARB( sampler2DRect, vec4, vec2, vec2);"     // GL_ARB_shader_texture_lod
 4769|      0|                "vec4 shadow2DRectGradARB( sampler2DRectShadow, vec3, vec2, vec2);"    // GL_ARB_shader_texture_lod
 4770|      0|                "vec4 shadow2DRectProjGradARB(sampler2DRectShadow, vec4, vec2, vec2);" // GL_ARB_shader_texture_lod
 4771|       |
 4772|      0|                "\n");
 4773|      0|        }
 4774|     94|    }
 4775|       |
 4776|     99|    if ((profile != EEsProfile && version >= 150) ||
  ------------------
  |  Branch (4776:10): [True: 99, False: 0]
  |  Branch (4776:35): [True: 13, False: 86]
  ------------------
 4777|     86|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (4777:10): [True: 0, False: 86]
  |  Branch (4777:35): [True: 0, False: 0]
  ------------------
 4778|       |        //============================================================================
 4779|       |        //
 4780|       |        // Prototypes for built-in functions seen by geometry shaders only.
 4781|       |        //
 4782|       |        //============================================================================
 4783|     13|        if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (4783:13): [True: 13, False: 0]
  |  Branch (4783:38): [True: 13, False: 0]
  ------------------
 4784|     13|            stageBuiltins[EShLangGeometry].append(
 4785|     13|                "void EmitStreamVertex(int);"
 4786|     13|                "void EndStreamPrimitive(int);"
 4787|     13|                );
 4788|     13|        }
 4789|     13|        stageBuiltins[EShLangGeometry].append(
 4790|     13|            "void EmitVertex();"
 4791|     13|            "void EndPrimitive();"
 4792|     13|            "\n");
 4793|     13|    }
 4794|       |
 4795|       |    //============================================================================
 4796|       |    //
 4797|       |    // Prototypes for all control functions.
 4798|       |    //
 4799|       |    //============================================================================
 4800|     99|    bool esBarrier = (profile == EEsProfile && version >= 310);
  ------------------
  |  Branch (4800:23): [True: 0, False: 99]
  |  Branch (4800:48): [True: 0, False: 0]
  ------------------
 4801|     99|    if ((profile != EEsProfile && version >= 150) || esBarrier)
  ------------------
  |  Branch (4801:10): [True: 99, False: 0]
  |  Branch (4801:35): [True: 13, False: 86]
  |  Branch (4801:54): [True: 0, False: 86]
  ------------------
 4802|     13|        stageBuiltins[EShLangTessControl].append(
 4803|     13|            "void barrier();"
 4804|     13|            );
 4805|     99|    if ((profile != EEsProfile && version >= 420) || esBarrier)
  ------------------
  |  Branch (4805:10): [True: 99, False: 0]
  |  Branch (4805:35): [True: 10, False: 89]
  |  Branch (4805:54): [True: 0, False: 89]
  ------------------
 4806|     10|        stageBuiltins[EShLangCompute].append(
 4807|     10|            "void barrier();"
 4808|     10|            );
 4809|     99|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (4809:10): [True: 99, False: 0]
  |  Branch (4809:35): [True: 10, False: 89]
  |  Branch (4809:55): [True: 0, False: 89]
  |  Branch (4809:80): [True: 0, False: 0]
  ------------------
 4810|     10|        stageBuiltins[EShLangMesh].append(
 4811|     10|            "void barrier();"
 4812|     10|            );
 4813|     10|        stageBuiltins[EShLangTask].append(
 4814|     10|            "void barrier();"
 4815|     10|            );
 4816|     10|    }
 4817|     99|    if ((profile != EEsProfile && version >= 130) || esBarrier)
  ------------------
  |  Branch (4817:10): [True: 99, False: 0]
  |  Branch (4817:35): [True: 99, False: 0]
  |  Branch (4817:54): [True: 0, False: 0]
  ------------------
 4818|     99|        commonBuiltins.append(
 4819|     99|            "void memoryBarrier();"
 4820|     99|            );
 4821|     99|    if ((profile != EEsProfile && version >= 420) || esBarrier) {
  ------------------
  |  Branch (4821:10): [True: 99, False: 0]
  |  Branch (4821:35): [True: 10, False: 89]
  |  Branch (4821:54): [True: 0, False: 89]
  ------------------
 4822|     10|        commonBuiltins.append(
 4823|     10|            "void memoryBarrierBuffer();"
 4824|     10|            );
 4825|     10|        stageBuiltins[EShLangCompute].append(
 4826|     10|            "void memoryBarrierShared();"
 4827|     10|            "void groupMemoryBarrier();"
 4828|     10|            );
 4829|     10|    }
 4830|     99|    if ((profile != EEsProfile && version >= 420) || esBarrier) {
  ------------------
  |  Branch (4830:10): [True: 99, False: 0]
  |  Branch (4830:35): [True: 10, False: 89]
  |  Branch (4830:54): [True: 0, False: 89]
  ------------------
 4831|     10|        if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (4831:13): [True: 0, False: 10]
  |  Branch (4831:39): [True: 0, False: 10]
  ------------------
 4832|      0|            commonBuiltins.append("void memoryBarrierAtomicCounter();");
 4833|      0|        }
 4834|     10|        commonBuiltins.append("void memoryBarrierImage();");
 4835|     10|    }
 4836|     99|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (4836:10): [True: 99, False: 0]
  |  Branch (4836:35): [True: 10, False: 89]
  |  Branch (4836:55): [True: 0, False: 89]
  |  Branch (4836:80): [True: 0, False: 0]
  ------------------
 4837|     10|        stageBuiltins[EShLangMesh].append(
 4838|     10|            "void memoryBarrierShared();"
 4839|     10|            "void groupMemoryBarrier();"
 4840|     10|        );
 4841|     10|        stageBuiltins[EShLangTask].append(
 4842|     10|            "void memoryBarrierShared();"
 4843|     10|            "void groupMemoryBarrier();"
 4844|     10|        );
 4845|     10|    }
 4846|       |
 4847|     99|    commonBuiltins.append("void controlBarrier(int, int, int, int);\n"
 4848|     99|                          "void memoryBarrier(int, int, int);\n");
 4849|       |
 4850|     99|    commonBuiltins.append("void debugPrintfEXT();\n");
 4851|       |
 4852|     99|    commonBuiltins.append("void abortEXT();\n");
 4853|       |
 4854|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (4854:9): [True: 99, False: 0]
  |  Branch (4854:34): [True: 10, False: 89]
  ------------------
 4855|       |        // coopMatStoreNV perhaps ought to have "out" on the buf parameter, but
 4856|       |        // adding it introduces undesirable tempArgs on the stack. What we want
 4857|       |        // is more like "buf" thought of as a pointer value being an in parameter.
 4858|     10|        stageBuiltins[EShLangCompute].append(
 4859|     10|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal float16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4860|     10|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal float[] buf, uint element, uint stride, bool colMajor);\n"
 4861|     10|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4862|     10|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4863|     10|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n"
 4864|     10|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4865|     10|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n"
 4866|     10|            "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n"
 4867|       |
 4868|     10|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal float16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4869|     10|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal float[] buf, uint element, uint stride, bool colMajor);\n"
 4870|     10|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal float64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4871|     10|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4872|     10|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4873|     10|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n"
 4874|     10|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4875|     10|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n"
 4876|     10|            "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n"
 4877|       |
 4878|     10|            "fcoopmatNV coopMatMulAddNV(fcoopmatNV A, fcoopmatNV B, fcoopmatNV C);\n"
 4879|     10|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal int8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4880|     10|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal int16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4881|     10|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal int[] buf, uint element, uint stride, bool colMajor);\n"
 4882|     10|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal int64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4883|     10|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal ivec2[] buf, uint element, uint stride, bool colMajor);\n"
 4884|     10|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal ivec4[] buf, uint element, uint stride, bool colMajor);\n"
 4885|     10|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4886|     10|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4887|     10|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n"
 4888|     10|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4889|     10|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n"
 4890|     10|            "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n"
 4891|       |
 4892|     10|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal int8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4893|     10|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal int16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4894|     10|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal int[] buf, uint element, uint stride, bool colMajor);\n"
 4895|     10|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal int64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4896|     10|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal ivec2[] buf, uint element, uint stride, bool colMajor);\n"
 4897|     10|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal ivec4[] buf, uint element, uint stride, bool colMajor);\n"
 4898|     10|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4899|     10|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4900|     10|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n"
 4901|     10|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4902|     10|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n"
 4903|     10|            "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n"
 4904|       |
 4905|     10|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal int8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4906|     10|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal int16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4907|     10|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal int[] buf, uint element, uint stride, bool colMajor);\n"
 4908|     10|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal int64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4909|     10|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal ivec2[] buf, uint element, uint stride, bool colMajor);\n"
 4910|     10|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal ivec4[] buf, uint element, uint stride, bool colMajor);\n"
 4911|     10|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4912|     10|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4913|     10|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n"
 4914|     10|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4915|     10|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n"
 4916|     10|            "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n"
 4917|       |
 4918|     10|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal int8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4919|     10|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal int16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4920|     10|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal int[] buf, uint element, uint stride, bool colMajor);\n"
 4921|     10|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal int64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4922|     10|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal ivec2[] buf, uint element, uint stride, bool colMajor);\n"
 4923|     10|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal ivec4[] buf, uint element, uint stride, bool colMajor);\n"
 4924|     10|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n"
 4925|     10|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n"
 4926|     10|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n"
 4927|     10|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n"
 4928|     10|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n"
 4929|     10|            "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n"
 4930|       |
 4931|     10|            "icoopmatNV coopMatMulAddNV(icoopmatNV A, icoopmatNV B, icoopmatNV C);\n"
 4932|     10|            "ucoopmatNV coopMatMulAddNV(ucoopmatNV A, ucoopmatNV B, ucoopmatNV C);\n"
 4933|     10|            );
 4934|       |
 4935|     10|        std::stringstream cooperativeMatrixFuncs;
 4936|       |
 4937|     10|        {
 4938|     10|            static const char *allTypes[] =
 4939|     10|            {
 4940|     10|                "float", "vec2", "vec4",
 4941|     10|                "float16_t", "f16vec2", "f16vec4",
 4942|     10|                "bfloat16_t", "bf16vec2", "bf16vec4",
 4943|     10|                "floate5m2_t", "fe5m2vec2", "fe5m2vec4",
 4944|     10|                "floate4m3_t", "fe4m3vec2", "fe4m3vec4",
 4945|     10|                "double", "dvec2", "dvec4",
 4946|     10|                "int8_t", "i8vec2", "i8vec4",
 4947|     10|                "int16_t", "i16vec2", "i16vec4",
 4948|     10|                "int", "ivec2", "ivec4",
 4949|     10|                "int64_t", "i64vec2", "i64vec4",
 4950|     10|                "uint8_t", "u8vec2", "u8vec4",
 4951|     10|                "uint16_t", "u16vec2", "u16vec4",
 4952|     10|                "uint", "uvec2", "uvec4",
 4953|     10|                "uint64_t", "u64vec2", "u64vec4",
 4954|     10|            };
 4955|     20|            for (auto elemTy : {"uint", "uint64_t"}) {
  ------------------
  |  Branch (4955:30): [True: 20, False: 10]
  ------------------
 4956|    840|                for (auto t : allTypes) {
  ------------------
  |  Branch (4956:29): [True: 840, False: 20]
  ------------------
 4957|    840|                    cooperativeMatrixFuncs << "void coopMatLoad(out coopmat m, volatile coherent nontemporal " << t << "[] buf, " << elemTy << " element, uint stride, int matrixLayout);\n";
 4958|    840|                    cooperativeMatrixFuncs << "void coopMatStore(coopmat m, volatile coherent nontemporal " << t << "[] buf, " << elemTy << " element, uint stride, int matrixLayout);\n";
 4959|    840|                }
 4960|       |                // Just use uint8_t for buffer type, we have special matching rules to allow any conversion
 4961|     20|                cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t);\n";
 4962|     20|                cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t, tensorViewNV v);\n";
 4963|     20|                cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t, __function f);\n";
 4964|     20|                cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t, tensorViewNV v, __function f);\n";
 4965|     20|                cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t, __function f, __function g);\n";
 4966|     20|                cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t, tensorViewNV v, __function f, __function g);\n";
 4967|     20|                cooperativeMatrixFuncs << "void coopMatStoreTensorNV(coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t);\n";
 4968|     20|                cooperativeMatrixFuncs << "void coopMatStoreTensorNV(coopmat m, volatile coherent nontemporal uint8_t[] buf, " << elemTy << " element, tensorLayoutNV t, tensorViewNV v);\n";
 4969|     20|            }
 4970|     10|        }
 4971|       |
 4972|     10|        cooperativeMatrixFuncs <<
 4973|     10|            "coopmat coopMatMulAdd(coopmat A, coopmat B, coopmat C);\n"
 4974|     10|            "coopmat coopMatMulAdd(coopmat A, coopmat B, coopmat C, int matrixOperands);\n";
 4975|       |
 4976|     10|        commonBuiltins.append(cooperativeMatrixFuncs.str().c_str());
 4977|       |
 4978|     10|        commonBuiltins.append(
 4979|     10|            "const int gl_MatrixUseA = 0;\n"
 4980|     10|            "const int gl_MatrixUseB = 1;\n"
 4981|     10|            "const int gl_MatrixUseAccumulator = 2;\n"
 4982|     10|            "const int gl_MatrixOperandsSaturatingAccumulation = 0x10;\n"
 4983|     10|            "const int gl_CooperativeMatrixLayoutRowMajor = 0;\n"
 4984|     10|            "const int gl_CooperativeMatrixLayoutColumnMajor = 1;\n"
 4985|     10|            "const int gl_CooperativeMatrixLayoutRowBlockedInterleavedARM = 4202;\n"
 4986|     10|            "const int gl_CooperativeMatrixLayoutColumnBlockedInterleavedARM = 4203;\n"
 4987|     10|            "\n"
 4988|     10|            );
 4989|       |
 4990|     10|        commonBuiltins.append(
 4991|     10|            "void coopMatTransposeNV(out coopmat, coopmat);"
 4992|     10|            "void coopMatReduceNV(out coopmat, coopmat, int, __function);"
 4993|     10|            "void coopMatPerElementNV();"
 4994|     10|        );
 4995|       |
 4996|     10|        commonBuiltins.append(
 4997|     10|            "const int gl_CooperativeMatrixReduceRowNV = 0x1;\n"
 4998|     10|            "const int gl_CooperativeMatrixReduceColumnNV = 0x2;\n"
 4999|     10|            "const int gl_CooperativeMatrixReduceRowAndColumnNV = 0x3;\n"
 5000|     10|            "const int gl_CooperativeMatrixReduce2x2NV = 0x4;\n"
 5001|     10|            "\n"
 5002|     10|            );
 5003|       |
 5004|     10|        commonBuiltins.append(
 5005|     10|            "const int gl_CooperativeMatrixClampModeUndefinedNV = 0x0;\n"
 5006|     10|            "const int gl_CooperativeMatrixClampModeConstantNV = 0x1;\n"
 5007|     10|            "const int gl_CooperativeMatrixClampModeClampToEdgeNV = 0x2;\n"
 5008|     10|            "const int gl_CooperativeMatrixClampModeRepeatNV = 0x3;\n"
 5009|     10|            "const int gl_CooperativeMatrixClampModeMirrorRepeatNV = 0x4;\n"
 5010|     10|            "\n"
 5011|     10|            );
 5012|       |
 5013|     10|        {
 5014|     10|          std::stringstream coopMatConvFuncs;
 5015|       |
 5016|     10|          const std::string eltTypes[] = {"uint32_t", "uint", "int32_t", "int", "float32_t", "float", "float16_t"};
 5017|       |
 5018|     70|          for (auto srcEltTy : eltTypes) {
  ------------------
  |  Branch (5018:30): [True: 70, False: 10]
  ------------------
 5019|    490|            for (auto dstEltTy : eltTypes) {
  ------------------
  |  Branch (5019:32): [True: 490, False: 70]
  ------------------
 5020|    490|              coopMatConvFuncs << "void bitcastQCOM(" << srcEltTy.c_str() << " SrcArr[], " << dstEltTy.c_str()
 5021|    490|                << " DstArr[]);\n";
 5022|    490|            }
 5023|     70|          }
 5024|     10|          coopMatConvFuncs << "\n";
 5025|       |
 5026|     80|          for (auto eltTy : {"float32_t", "float16_t", "int8_t", "uint8_t", "uint32_t", "uint", "int32_t", "int"}) {
  ------------------
  |  Branch (5026:27): [True: 80, False: 10]
  ------------------
 5027|     80|            coopMatConvFuncs << "void vectorToCoopmatQCOM(" << eltTy << " SrcVec[], coopmat CM);\n";
 5028|     80|            coopMatConvFuncs << "void coopmatToVectorQCOM(coopmat CM, " << eltTy << " Dstvec[]);\n";
 5029|     80|          }
 5030|       |
 5031|     70|          for (auto eltTy : {"uint32_t", "uint", "int32_t", "int", "float32_t", "float", "float16_t"}) {
  ------------------
  |  Branch (5031:27): [True: 70, False: 10]
  ------------------
 5032|     70|            coopMatConvFuncs << "void extractSubArrayQCOM(" << eltTy << " arr[], uint index, " << eltTy << " subarr[]);\n";
 5033|     70|          }
 5034|       |
 5035|     10|          commonBuiltins.append(coopMatConvFuncs.str().c_str());
 5036|     10|        }
 5037|       |
 5038|     10|        commonBuiltins.append(
 5039|     10|            "tensorLayoutNV createTensorLayoutNV(uint Dim);\n"
 5040|     10|            "tensorLayoutNV createTensorLayoutNV(uint Dim, uint Mode);\n"
 5041|       |
 5042|     10|            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0);\n"
 5043|     10|            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0, uint blockSize1);\n"
 5044|     10|            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0, uint blockSize1, uint blockSize2);\n"
 5045|     10|            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0, uint blockSize1, uint blockSize2, uint blockSize3);\n"
 5046|     10|            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0, uint blockSize1, uint blockSize2, uint blockSize3, uint blockSize4);\n"
 5047|       |
 5048|     10|            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0);\n"
 5049|     10|            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0, uint dim1);\n"
 5050|     10|            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0, uint dim1, uint dim2);\n"
 5051|     10|            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0, uint dim1, uint dim2, uint dim3);\n"
 5052|     10|            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0, uint dim1, uint dim2, uint dim3, uint dim4);\n"
 5053|       |
 5054|     10|            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0);\n"
 5055|     10|            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0, uint stride1);\n"
 5056|     10|            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0, uint stride1, uint stride2);\n"
 5057|     10|            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0, uint stride1, uint stride2, uint stride3);\n"
 5058|     10|            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0, uint stride1, uint stride2, uint stride3, uint stride4);\n"
 5059|       |
 5060|     10|            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0);\n"
 5061|     10|            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0, uint offset1, uint span1);\n"
 5062|     10|            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0, uint offset1, uint span1, uint offset2, uint span2);\n"
 5063|     10|            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0, uint offset1, uint span1, uint offset2, uint span2, uint offset3, uint span3);\n"
 5064|     10|            "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"
 5065|       |
 5066|     10|            "tensorLayoutNV setTensorLayoutClampValueNV(tensorLayoutNV t, uint value);\n"
 5067|       |
 5068|     10|            "tensorViewNV createTensorViewNV(uint Dim);\n"
 5069|     10|            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions);\n"
 5070|     10|            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0);\n"
 5071|     10|            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0, uint p1);\n"
 5072|     10|            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0, uint p1, uint p2);\n"
 5073|     10|            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0, uint p1, uint p2, uint p3);\n"
 5074|     10|            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0, uint p1, uint p2, uint p3, uint p4);\n"
 5075|       |
 5076|     10|            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0);\n"
 5077|     10|            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0, uint dim1);\n"
 5078|     10|            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0, uint dim1, uint dim2);\n"
 5079|     10|            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0, uint dim1, uint dim2, uint dim3);\n"
 5080|     10|            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0, uint dim1, uint dim2, uint dim3, uint dim4);\n"
 5081|       |
 5082|     10|            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0);\n"
 5083|     10|            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0, uint stride1);\n"
 5084|     10|            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0, uint stride1, uint stride2);\n"
 5085|     10|            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0, uint stride1, uint stride2, uint stride3);\n"
 5086|     10|            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0, uint stride1, uint stride2, uint stride3, uint stride4);\n"
 5087|       |
 5088|     10|            "tensorViewNV setTensorViewClipNV(tensorViewNV v, uint clipRowOffset, uint clipRowSpan, uint clipColOffset, uint clipColSpan);\n"
 5089|     10|            "\n"
 5090|     10|        );
 5091|       |
 5092|       |        // GL_ARM_tensors builtins.
 5093|     10|        static const char *tensorDataTypesARM[] = {
 5094|     10|            "bool",
 5095|     10|            "int8_t", "int16_t", "int32_t", "int64_t",
 5096|     10|            "uint8_t", "uint16_t", "uint32_t", "uint64_t",
 5097|     10|            "float16_t", "float32_t", "float64_t",
 5098|     10|            "bfloat16_t", "floate5m2_t", "floate4m3_t",
 5099|     10|        };
 5100|     10|        std::ostringstream ostream;
 5101|    150|        for (auto t : tensorDataTypesARM) {
  ------------------
  |  Branch (5101:21): [True: 150, False: 10]
  ------------------
 5102|       |            // Scalar
 5103|    150|            ostream << "void tensorReadARM(readonly tensorARM t, uint coords[], out "
 5104|    150|                    << t << " data, uint tensorOperands = 0U, ...);\n";
 5105|    150|            ostream << "void tensorWriteARM(writeonly tensorARM t, uint coords[], "
 5106|    150|                    << t << " data, uint tensorOperands = 0U, ...);\n";
 5107|       |            // Array
 5108|    150|            ostream << "void tensorReadARM(readonly tensorARM t, uint coords[], "
 5109|    150|                    << t << " data[], uint tensorOperands = 0U, ...);\n";
 5110|    150|            ostream << "void tensorWriteARM(writeonly tensorARM t, uint coords[], "
 5111|    150|                    << t << " data[], uint tensorOperands = 0U, ...);\n";
 5112|    150|        }
 5113|     10|        ostream << "uint tensorSizeARM(readonly writeonly tensorARM t, uint dim);\n";
 5114|     10|        commonBuiltins.append(ostream.str());
 5115|     10|    }
 5116|       |
 5117|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (5117:9): [True: 99, False: 0]
  |  Branch (5117:34): [True: 10, False: 89]
  ------------------
 5118|     10|        const char *basicTypes[] = {
 5119|     10|            "int8_t",
 5120|     10|            "int16_t",
 5121|     10|            "int32_t",
 5122|     10|            "int64_t",
 5123|     10|            "uint8_t",
 5124|     10|            "uint16_t",
 5125|     10|            "uint32_t",
 5126|     10|            "uint64_t",
 5127|     10|            "float16_t",
 5128|     10|            "float32_t",
 5129|     10|            "float64_t",
 5130|     10|        };
 5131|     10|        std::string coopVecOffsetTypes[] = {
 5132|     10|            "uint",
 5133|     10|            "uint64_t",
 5134|     10|        };
 5135|     20|        for (auto offsetTy : coopVecOffsetTypes) {
  ------------------
  |  Branch (5135:28): [True: 20, False: 10]
  ------------------
 5136|    240|            for (uint32_t i = 0; i < sizeof(basicTypes)/sizeof(basicTypes[0]); ++i) {
  ------------------
  |  Branch (5136:34): [True: 220, False: 20]
  ------------------
 5137|    220|                std::string func = std::string("void coopVecMatMulNV(out coopvecNV result, ") +
 5138|    220|                                   std::string("coopvecNV v, ") +
 5139|    220|                                   std::string("int inputInterpretation, ") +
 5140|    220|                                   std::string(basicTypes[i]) + std::string("[] matrix, ") +
 5141|    220|                                   offsetTy + std::string(" matrixOffset, ") +
 5142|    220|                                   std::string("int matrixInterpretation, ") +
 5143|    220|                                   std::string("uint M, ") +
 5144|    220|                                   std::string("uint K, ") +
 5145|    220|                                   std::string("int matrixLayout, ") +
 5146|    220|                                   std::string("bool transpose, ") +
 5147|    220|                                   std::string("uint matrixStride);\n");
 5148|    220|                commonBuiltins.append(func.c_str());
 5149|       |
 5150|  2.64k|                for (uint32_t j = 0; j < sizeof(basicTypes)/sizeof(basicTypes[0]); ++j) {
  ------------------
  |  Branch (5150:38): [True: 2.42k, False: 220]
  ------------------
 5151|  2.42k|                    func = std::string("void coopVecMatMulAddNV(out coopvecNV result, ") +
 5152|  2.42k|                           std::string("coopvecNV v, ") +
 5153|  2.42k|                           std::string("int inputInterpretation, ") +
 5154|  2.42k|                           std::string(basicTypes[i]) + std::string("[] matrix, ") +
 5155|  2.42k|                           offsetTy + std::string(" matrixOffset, ") +
 5156|  2.42k|                           std::string("int matrixInterpretation, ") +
 5157|  2.42k|                           std::string(basicTypes[j]) + std::string("[] bias, ") +
 5158|  2.42k|                           offsetTy + std::string(" biasOffset, ") +
 5159|  2.42k|                           std::string("int biasInterpretation, ") +
 5160|  2.42k|                           std::string("uint M, ") +
 5161|  2.42k|                           std::string("uint K, ") +
 5162|  2.42k|                           std::string("int matrixLayout, ") +
 5163|  2.42k|                           std::string("bool transpose, ") +
 5164|  2.42k|                           std::string("uint matrixStride);\n");
 5165|  2.42k|                    commonBuiltins.append(func.c_str());
 5166|  2.42k|                }
 5167|       |
 5168|    220|                func = std::string("void coopVecOuterProductAccumulateNV(coopvecNV v1, coopvecNV v2, ") +
 5169|    220|                       std::string(basicTypes[i]) +
 5170|    220|                       std::string("[] buf, ") + offsetTy + std::string(" offset, uint stride, int matrixLayout, int matrixInterpretation);\n");
 5171|    220|                commonBuiltins.append(func.c_str());
 5172|       |            
 5173|    220|                func = std::string("void coopVecReduceSumAccumulateNV(coopvecNV v, ") +
 5174|    220|                       std::string(basicTypes[i]) +
 5175|    220|                       std::string("[] buf, ") + offsetTy + std::string(" offset);\n");
 5176|    220|                commonBuiltins.append(func.c_str());
 5177|    220|            }
 5178|     20|        }
 5179|     10|        std::string cooperativeVectorFuncs =
 5180|     10|            "coopvecNV fma(coopvecNV, coopvecNV, coopvecNV);\n"
 5181|     10|            "coopvecNV min(coopvecNV, coopvecNV);\n"
 5182|     10|            "coopvecNV max(coopvecNV, coopvecNV);\n"
 5183|     10|            "coopvecNV step(coopvecNV, coopvecNV);\n"
 5184|     10|            "coopvecNV exp(coopvecNV);\n"            
 5185|     10|            "coopvecNV log(coopvecNV);\n"            
 5186|     10|            "coopvecNV tanh(coopvecNV);\n"            
 5187|     10|            "coopvecNV atan(coopvecNV);\n"            
 5188|     10|            "coopvecNV clamp(coopvecNV, coopvecNV, coopvecNV);\n";
 5189|       |
 5190|     10|        commonBuiltins.append(cooperativeVectorFuncs.c_str());
 5191|       |
 5192|     10|        if (profile != EEsProfile) {
  ------------------
  |  Branch (5192:13): [True: 10, False: 0]
  ------------------
 5193|     10|            std::string longVectorFuncs =
 5194|       |
 5195|       |                // manually add long vector prototypes for functions not in BaseFunctions/etc
 5196|     10|                "vector frexp(vector, vector);\n"
 5197|     10|                "vector ldexp(vector, vector);\n"
 5198|     10|                "vector fma(vector, vector, vector);\n"
 5199|       |
 5200|     10|                "vector floatBitsToInt(vector);\n"
 5201|     10|                "vector floatBitsToUint(vector);\n"
 5202|     10|                "vector intBitsToFloat(vector);\n"
 5203|     10|                "vector uintBitsToFloat(vector);\n"
 5204|     10|                "vector doubleBitsToInt64(vector);"
 5205|     10|                "vector doubleBitsToUint64(vector);"
 5206|     10|                "vector int64BitsToDouble(vector);"
 5207|     10|                "vector uint64BitsToDouble(vector);"
 5208|     10|                "vector bfloat16BitsToIntEXT(vector);"
 5209|     10|                "vector bfloat16BitsToUintEXT(vector);"
 5210|     10|                "vector intBitsToBFloat16EXT(vector);"
 5211|     10|                "vector uintBitsToBFloat16EXT(vector);"
 5212|     10|                "vector halfBitsToInt16(vector);"
 5213|     10|                "vector halfBitsToUint16(vector);"
 5214|     10|                "vector float16BitsToInt16(vector);"
 5215|     10|                "vector float16BitsToUint16(vector);"
 5216|     10|                "vector int16BitsToFloat16(vector);"
 5217|     10|                "vector uint16BitsToFloat16(vector);"
 5218|     10|                "vector int16BitsToHalf(vector);"
 5219|     10|                "vector uint16BitsToHalf(vector);"
 5220|     10|                "vector floate5m2BitsToIntEXT(vector);"
 5221|     10|                "vector floate5m2BitsToUintEXT(vector);"
 5222|     10|                "vector intBitsToFloate5m2EXT(vector);"
 5223|     10|                "vector uintBitsToFloate5m2EXT(vector);"
 5224|     10|                "vector floate4m3BitsToIntEXT(vector);"
 5225|     10|                "vector floate4m3BitsToUintEXT(vector);"
 5226|     10|                "vector intBitsToFloate4m3EXT(vector);"
 5227|     10|                "vector uintBitsToFloate4m3EXT(vector);"
 5228|       |
 5229|     10|                "vector uaddCarry(highp vector, highp vector, out lowp vector carry);"
 5230|     10|                "vector usubBorrow(highp vector, highp vector, out lowp vector borrow);"
 5231|     10|                "void umulExtended(highp vector, highp vector, out highp vector, out highp vector);"
 5232|     10|                "void imulExtended(highp vector, highp vector, out highp vector, out highp vector);"
 5233|     10|                "vector bitfieldExtract(vector, int, int);"
 5234|     10|                "vector bitfieldInsert(vector, vector, int, int);"
 5235|     10|                "vector bitfieldReverse(highp vector);"
 5236|     10|                "vector bitCount(vector);"
 5237|     10|                "vector findLSB(vector);"
 5238|     10|                "vector findMSB(vector);"
 5239|       |
 5240|       |                // BaseFunctions overloads with a scalar parameter don't get generated in AddLongVectorBuiltin
 5241|     10|                "vector mod(vector, double);\n"
 5242|     10|                "vector min(vector, double);\n"
 5243|     10|                "vector max(vector, double);\n"
 5244|     10|                "vector clamp(vector, double, double);"
 5245|     10|                "vector mix(vector, vector,  double);"
 5246|     10|                "vector step(double, vector);"
 5247|     10|                "vector smoothstep(double, double, vector);"
 5248|     10|                "vector refract(vector, vector, double);"
 5249|       |
 5250|     10|                "vector mod(vector, float16_t);\n"
 5251|     10|                "vector min(vector, float16_t);\n"
 5252|     10|                "vector max(vector, float16_t);\n"
 5253|     10|                "vector clamp(vector, float16_t, float16_t);"
 5254|     10|                "vector mix(vector, vector,  float16_t);"
 5255|     10|                "vector step(float16_t, vector);"
 5256|     10|                "vector smoothstep(float16_t, float16_t, vector);"
 5257|     10|                "vector refract(vector, vector, float16_t);"
 5258|       |
 5259|     10|                "vector min(vector, uint64_t);\n"
 5260|     10|                "vector max(vector, uint64_t);\n"
 5261|     10|                "vector clamp(vector, uint64_t, uint64_t);"
 5262|     10|                "vector mix(vector, vector,  uint64_t);"
 5263|       |
 5264|     10|                "vector min(vector, int64_t);\n"
 5265|     10|                "vector max(vector, int64_t);\n"
 5266|     10|                "vector clamp(vector, int64_t, int64_t);"
 5267|     10|                "vector mix(vector, vector,  int64_t);"
 5268|       |
 5269|     10|                "vector min(vector, uint16_t);\n"
 5270|     10|                "vector max(vector, uint16_t);\n"
 5271|     10|                "vector clamp(vector, uint16_t, uint16_t);"
 5272|     10|                "vector mix(vector, vector,  uint16_t);"
 5273|       |
 5274|     10|                "vector min(vector, int16_t);\n"
 5275|     10|                "vector max(vector, int16_t);\n"
 5276|     10|                "vector clamp(vector, int16_t, int16_t);"
 5277|     10|                "vector mix(vector, vector,  int16_t);"
 5278|       |
 5279|     10|                "vector min(vector, uint8_t);\n"
 5280|     10|                "vector max(vector, uint8_t);\n"
 5281|     10|                "vector clamp(vector, uint8_t, uint8_t);"
 5282|     10|                "vector mix(vector, vector,  uint8_t);"
 5283|       |
 5284|     10|                "vector min(vector, int8_t);\n"
 5285|     10|                "vector max(vector, int8_t);\n"
 5286|     10|                "vector clamp(vector, int8_t, int8_t);"
 5287|     10|                "vector mix(vector, vector,  int8_t);"
 5288|       |
 5289|     10|                "vector expectEXT(vector, vector);"
 5290|     10|                ;
 5291|       |
 5292|     10|            std::string longVectorDerivativeFuncs =
 5293|     10|                "vector dFdxFine(vector);"
 5294|     10|                "vector dFdyFine(vector);"
 5295|     10|                "vector fwidthFine(vector);"
 5296|     10|                "vector dFdxCoarse(vector);"
 5297|     10|                "vector dFdyCoarse(vector);"
 5298|     10|                "vector fwidthCoarse(vector);"
 5299|       |
 5300|     10|                ;
 5301|     10|            commonBuiltins.append(longVectorFuncs.c_str());
 5302|     10|            stageBuiltins[EShLangFragment].append(longVectorDerivativeFuncs.c_str());
 5303|     10|            stageBuiltins[EShLangCompute].append(longVectorDerivativeFuncs.c_str());
 5304|     10|        }
 5305|       |
 5306|     10|        const char *scalarAndVectorTypes[] = {
 5307|     10|            "int8_t",
 5308|     10|            "int16_t",
 5309|     10|            "int32_t",
 5310|     10|            "int64_t",
 5311|     10|            "uint8_t",
 5312|     10|            "uint16_t",
 5313|     10|            "uint32_t",
 5314|     10|            "uint64_t",
 5315|     10|            "float16_t",
 5316|     10|            "float32_t",
 5317|     10|            "float64_t",
 5318|     10|            "i8vec2",
 5319|     10|            "i16vec2",
 5320|     10|            "i32vec2",
 5321|     10|            "i64vec2",
 5322|     10|            "u8vec2",
 5323|     10|            "u16vec2",
 5324|     10|            "u32vec2",
 5325|     10|            "u64vec2",
 5326|     10|            "f16vec2",
 5327|     10|            "f32vec2",
 5328|     10|            "f64vec2",
 5329|     10|            "i8vec3",
 5330|     10|            "i16vec3",
 5331|     10|            "i32vec3",
 5332|     10|            "i64vec3",
 5333|     10|            "u8vec3",
 5334|     10|            "u16vec3",
 5335|     10|            "u32vec3",
 5336|     10|            "u64vec3",
 5337|     10|            "f16vec3",
 5338|     10|            "f32vec3",
 5339|     10|            "f64vec3",
 5340|     10|            "i8vec4",
 5341|     10|            "i16vec4",
 5342|     10|            "i32vec4",
 5343|     10|            "i64vec4",
 5344|     10|            "u8vec4",
 5345|     10|            "u16vec4",
 5346|     10|            "u32vec4",
 5347|     10|            "u64vec4",
 5348|     10|            "f16vec4",
 5349|     10|            "f32vec4",
 5350|     10|            "f64vec4",
 5351|     10|        };
 5352|       |
 5353|     20|        for (auto offsetTy : coopVecOffsetTypes) {
  ------------------
  |  Branch (5353:28): [True: 20, False: 10]
  ------------------
 5354|    900|            for (uint32_t i = 0; i < sizeof(scalarAndVectorTypes)/sizeof(scalarAndVectorTypes[0]); ++i) {
  ------------------
  |  Branch (5354:34): [True: 880, False: 20]
  ------------------
 5355|    880|                std::string load = std::string("void coopVecLoadNV(out coopvecNV v, volatile coherent ") +
 5356|    880|                                   std::string(scalarAndVectorTypes[i]) + std::string("[] buf, ") + offsetTy + std::string(" offset);");
 5357|    880|                std::string store = std::string("void coopVecStoreNV(coopvecNV v, volatile coherent ") +
 5358|    880|                                   std::string(scalarAndVectorTypes[i]) + std::string("[] buf, ") + offsetTy + std::string(" offset);");
 5359|    880|                commonBuiltins.append(load.c_str());
 5360|    880|                commonBuiltins.append(store.c_str());
 5361|    880|            }
 5362|     20|        }
 5363|       |
 5364|     10|        commonBuiltins.append(
 5365|     10|            "const int gl_CooperativeVectorMatrixLayoutRowMajorNV = 0;\n"
 5366|     10|            "const int gl_CooperativeVectorMatrixLayoutColumnMajorNV = 1;\n"
 5367|     10|            "const int gl_CooperativeVectorMatrixLayoutInferencingOptimalNV = 2;\n"
 5368|     10|            "const int gl_CooperativeVectorMatrixLayoutTrainingOptimalNV = 3;\n"
 5369|     10|            "\n"
 5370|     10|            );
 5371|       |
 5372|     10|        commonBuiltins.append(
 5373|     10|            "const int gl_ComponentTypeFloat16NV                = 0;\n"
 5374|     10|            "const int gl_ComponentTypeFloat32NV                = 1;\n"
 5375|     10|            "const int gl_ComponentTypeFloat64NV                = 2;\n"
 5376|     10|            "const int gl_ComponentTypeSignedInt8NV             = 3;\n"
 5377|     10|            "const int gl_ComponentTypeSignedInt16NV            = 4;\n"
 5378|     10|            "const int gl_ComponentTypeSignedInt32NV            = 5;\n"
 5379|     10|            "const int gl_ComponentTypeSignedInt64NV            = 6;\n"
 5380|     10|            "const int gl_ComponentTypeUnsignedInt8NV           = 7;\n"
 5381|     10|            "const int gl_ComponentTypeUnsignedInt16NV          = 8;\n"
 5382|     10|            "const int gl_ComponentTypeUnsignedInt32NV          = 9;\n"
 5383|     10|            "const int gl_ComponentTypeUnsignedInt64NV          = 10;\n"
 5384|     10|            "const int gl_ComponentTypeSignedInt8PackedNV       = 1000491000;\n"
 5385|     10|            "const int gl_ComponentTypeUnsignedInt8PackedNV     = 1000491001;\n"
 5386|     10|            "const int gl_ComponentTypeFloatE4M3NV              = 1000491002;\n"
 5387|     10|            "const int gl_ComponentTypeFloatE5M2NV              = 1000491003;\n"
 5388|     10|            "\n"
 5389|     10|            );
 5390|     10|    }
 5391|       |
 5392|       |    //============================================================================
 5393|       |    //
 5394|       |    // Prototypes for built-in functions seen by fragment shaders only.
 5395|       |    //
 5396|       |    //============================================================================
 5397|       |
 5398|       |    //
 5399|       |    // Original-style texture Functions with bias.
 5400|       |    //
 5401|     99|    if (spvVersion.spv == 0 && (profile != EEsProfile || version == 100)) {
  ------------------
  |  Branch (5401:9): [True: 0, False: 99]
  |  Branch (5401:33): [True: 0, False: 0]
  |  Branch (5401:58): [True: 0, False: 0]
  ------------------
 5402|      0|        stageBuiltins[EShLangFragment].append(
 5403|      0|            "vec4 texture2D(sampler2D, vec2, float);"
 5404|      0|            "vec4 texture2DProj(sampler2D, vec3, float);"
 5405|      0|            "vec4 texture2DProj(sampler2D, vec4, float);"
 5406|      0|            "vec4 texture3D(sampler3D, vec3, float);"        // OES_texture_3D
 5407|      0|            "vec4 texture3DProj(sampler3D, vec4, float);"    // OES_texture_3D
 5408|      0|            "vec4 textureCube(samplerCube, vec3, float);"
 5409|       |
 5410|      0|            "\n");
 5411|      0|    }
 5412|     99|    if (spvVersion.spv == 0 && (profile != EEsProfile && version > 100)) {
  ------------------
  |  Branch (5412:9): [True: 0, False: 99]
  |  Branch (5412:33): [True: 0, False: 0]
  |  Branch (5412:58): [True: 0, False: 0]
  ------------------
 5413|      0|        stageBuiltins[EShLangFragment].append(
 5414|      0|            "vec4 texture1D(sampler1D, float, float);"
 5415|      0|            "vec4 texture1DProj(sampler1D, vec2, float);"
 5416|      0|            "vec4 texture1DProj(sampler1D, vec4, float);"
 5417|      0|            "vec4 shadow1D(sampler1DShadow, vec3, float);"
 5418|      0|            "vec4 shadow2D(sampler2DShadow, vec3, float);"
 5419|      0|            "vec4 shadow1DProj(sampler1DShadow, vec4, float);"
 5420|      0|            "vec4 shadow2DProj(sampler2DShadow, vec4, float);"
 5421|       |
 5422|      0|            "\n");
 5423|      0|    }
 5424|     99|    if (spvVersion.spv == 0 && profile == EEsProfile) {
  ------------------
  |  Branch (5424:9): [True: 0, False: 99]
  |  Branch (5424:32): [True: 0, False: 0]
  ------------------
 5425|      0|        stageBuiltins[EShLangFragment].append(
 5426|      0|            "vec4 texture2DLodEXT(sampler2D, vec2, float);"      // GL_EXT_shader_texture_lod
 5427|      0|            "vec4 texture2DProjLodEXT(sampler2D, vec3, float);"  // GL_EXT_shader_texture_lod
 5428|      0|            "vec4 texture2DProjLodEXT(sampler2D, vec4, float);"  // GL_EXT_shader_texture_lod
 5429|      0|            "vec4 textureCubeLodEXT(samplerCube, vec3, float);"  // GL_EXT_shader_texture_lod
 5430|       |
 5431|      0|            "\n");
 5432|      0|    }
 5433|       |
 5434|       |    // GL_EXT_shader_tile_image
 5435|     99|    if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (5435:9): [True: 99, False: 0]
  ------------------
 5436|     99|        stageBuiltins[EShLangFragment].append(
 5437|     99|            "lowp uint stencilAttachmentReadEXT();"
 5438|     99|            "lowp uint stencilAttachmentReadEXT(int);"
 5439|     99|            "highp float depthAttachmentReadEXT();"
 5440|     99|            "highp float depthAttachmentReadEXT(int);"
 5441|     99|            "\n");
 5442|     99|        stageBuiltins[EShLangFragment].append(
 5443|     99|            "vec4 colorAttachmentReadEXT(attachmentEXT);"
 5444|     99|            "vec4 colorAttachmentReadEXT(attachmentEXT, int);"
 5445|     99|            "ivec4 colorAttachmentReadEXT(iattachmentEXT);"
 5446|     99|            "ivec4 colorAttachmentReadEXT(iattachmentEXT, int);"
 5447|     99|            "uvec4 colorAttachmentReadEXT(uattachmentEXT);"
 5448|     99|            "uvec4 colorAttachmentReadEXT(uattachmentEXT, int);"
 5449|     99|            "\n");
 5450|     99|    }
 5451|       |
 5452|       |    // GL_ARB_derivative_control
 5453|     99|    if (profile != EEsProfile && version >= 400) {
  ------------------
  |  Branch (5453:9): [True: 99, False: 0]
  |  Branch (5453:34): [True: 12, False: 87]
  ------------------
 5454|     12|        stageBuiltins[EShLangFragment].append(derivativeControls);
 5455|     12|        stageBuiltins[EShLangFragment].append("\n");
 5456|     12|    }
 5457|       |
 5458|       |    // GL_OES_shader_multisample_interpolation
 5459|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (5459:10): [True: 0, False: 99]
  |  Branch (5459:35): [True: 0, False: 0]
  ------------------
 5460|     99|        (profile != EEsProfile && version >= 150)) { // NV_gpu_shader5
  ------------------
  |  Branch (5460:10): [True: 99, False: 0]
  |  Branch (5460:35): [True: 13, False: 86]
  ------------------
 5461|     13|        stageBuiltins[EShLangFragment].append(
 5462|     13|            "float interpolateAtCentroid(float);"
 5463|     13|            "vec2  interpolateAtCentroid(vec2);"
 5464|     13|            "vec3  interpolateAtCentroid(vec3);"
 5465|     13|            "vec4  interpolateAtCentroid(vec4);"
 5466|       |
 5467|     13|            "float interpolateAtSample(float, int);"
 5468|     13|            "vec2  interpolateAtSample(vec2,  int);"
 5469|     13|            "vec3  interpolateAtSample(vec3,  int);"
 5470|     13|            "vec4  interpolateAtSample(vec4,  int);"
 5471|       |
 5472|     13|            "float interpolateAtOffset(float, vec2);"
 5473|     13|            "vec2  interpolateAtOffset(vec2,  vec2);"
 5474|     13|            "vec3  interpolateAtOffset(vec3,  vec2);"
 5475|     13|            "vec4  interpolateAtOffset(vec4,  vec2);"
 5476|       |
 5477|     13|            "\n");
 5478|     13|    }
 5479|       |
 5480|     99|    stageBuiltins[EShLangFragment].append(
 5481|     99|        "void beginInvocationInterlockARB(void);"
 5482|     99|        "void endInvocationInterlockARB(void);");
 5483|       |
 5484|     99|    stageBuiltins[EShLangFragment].append(
 5485|     99|        "bool helperInvocationEXT();"
 5486|     99|        "\n");
 5487|       |
 5488|       |    // GL_AMD_shader_explicit_vertex_parameter
 5489|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (5489:9): [True: 99, False: 0]
  |  Branch (5489:34): [True: 10, False: 89]
  ------------------
 5490|     10|        stageBuiltins[EShLangFragment].append(
 5491|     10|            "float interpolateAtVertexAMD(float, uint);"
 5492|     10|            "vec2  interpolateAtVertexAMD(vec2,  uint);"
 5493|     10|            "vec3  interpolateAtVertexAMD(vec3,  uint);"
 5494|     10|            "vec4  interpolateAtVertexAMD(vec4,  uint);"
 5495|       |
 5496|     10|            "int   interpolateAtVertexAMD(int,   uint);"
 5497|     10|            "ivec2 interpolateAtVertexAMD(ivec2, uint);"
 5498|     10|            "ivec3 interpolateAtVertexAMD(ivec3, uint);"
 5499|     10|            "ivec4 interpolateAtVertexAMD(ivec4, uint);"
 5500|       |
 5501|     10|            "uint  interpolateAtVertexAMD(uint,  uint);"
 5502|     10|            "uvec2 interpolateAtVertexAMD(uvec2, uint);"
 5503|     10|            "uvec3 interpolateAtVertexAMD(uvec3, uint);"
 5504|     10|            "uvec4 interpolateAtVertexAMD(uvec4, uint);"
 5505|       |
 5506|     10|            "float16_t interpolateAtVertexAMD(float16_t, uint);"
 5507|     10|            "f16vec2   interpolateAtVertexAMD(f16vec2,   uint);"
 5508|     10|            "f16vec3   interpolateAtVertexAMD(f16vec3,   uint);"
 5509|     10|            "f16vec4   interpolateAtVertexAMD(f16vec4,   uint);"
 5510|       |
 5511|     10|            "\n");
 5512|     10|    }
 5513|       |
 5514|       |    // GL_AMD_gpu_shader_half_float
 5515|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (5515:9): [True: 99, False: 0]
  |  Branch (5515:34): [True: 10, False: 89]
  ------------------
 5516|     10|        stageBuiltins[EShLangFragment].append(derivativesAndControl16bits);
 5517|     10|        stageBuiltins[EShLangFragment].append("\n");
 5518|       |
 5519|     10|        stageBuiltins[EShLangFragment].append(
 5520|     10|            "float16_t interpolateAtCentroid(float16_t);"
 5521|     10|            "f16vec2   interpolateAtCentroid(f16vec2);"
 5522|     10|            "f16vec3   interpolateAtCentroid(f16vec3);"
 5523|     10|            "f16vec4   interpolateAtCentroid(f16vec4);"
 5524|       |
 5525|     10|            "float16_t interpolateAtSample(float16_t, int);"
 5526|     10|            "f16vec2   interpolateAtSample(f16vec2,   int);"
 5527|     10|            "f16vec3   interpolateAtSample(f16vec3,   int);"
 5528|     10|            "f16vec4   interpolateAtSample(f16vec4,   int);"
 5529|       |
 5530|     10|            "float16_t interpolateAtOffset(float16_t, f16vec2);"
 5531|     10|            "f16vec2   interpolateAtOffset(f16vec2,   f16vec2);"
 5532|     10|            "f16vec3   interpolateAtOffset(f16vec3,   f16vec2);"
 5533|     10|            "f16vec4   interpolateAtOffset(f16vec4,   f16vec2);"
 5534|       |
 5535|     10|            "\n");
 5536|     10|    }
 5537|       |
 5538|       |    // GL_ARB_shader_clock& GL_EXT_shader_realtime_clock
 5539|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (5539:9): [True: 99, False: 0]
  |  Branch (5539:34): [True: 10, False: 89]
  ------------------
 5540|     10|        commonBuiltins.append(
 5541|     10|            "uvec2 clock2x32ARB();"
 5542|     10|            "uint64_t clockARB();"
 5543|     10|            "uvec2 clockRealtime2x32EXT();"
 5544|     10|            "uint64_t clockRealtimeEXT();"
 5545|     10|            "\n");
 5546|     10|    }
 5547|       |
 5548|       |    // GL_AMD_shader_fragment_mask
 5549|     99|    if (profile != EEsProfile && version >= 450 && spvVersion.vulkan > 0) {
  ------------------
  |  Branch (5549:9): [True: 99, False: 0]
  |  Branch (5549:34): [True: 10, False: 89]
  |  Branch (5549:52): [True: 10, False: 0]
  ------------------
 5550|     10|        stageBuiltins[EShLangFragment].append(
 5551|     10|            "uint fragmentMaskFetchAMD(subpassInputMS);"
 5552|     10|            "uint fragmentMaskFetchAMD(isubpassInputMS);"
 5553|     10|            "uint fragmentMaskFetchAMD(usubpassInputMS);"
 5554|       |
 5555|     10|            "vec4  fragmentFetchAMD(subpassInputMS,  uint);"
 5556|     10|            "ivec4 fragmentFetchAMD(isubpassInputMS, uint);"
 5557|     10|            "uvec4 fragmentFetchAMD(usubpassInputMS, uint);"
 5558|       |
 5559|     10|            "\n");
 5560|     10|    }
 5561|       |
 5562|       |    // Builtins for GL_NV_ray_tracing/GL_NV_ray_tracing_motion_blur/GL_EXT_ray_tracing/GL_EXT_ray_query/
 5563|       |    // GL_NV_shader_invocation_reorder/GL_KHR_ray_tracing_position_Fetch
 5564|     99|    if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (5564:9): [True: 99, False: 0]
  |  Branch (5564:34): [True: 0, False: 99]
  ------------------
 5565|      0|         commonBuiltins.append("void rayQueryInitializeEXT(rayQueryEXT, accelerationStructureEXT, uint, uint, vec3, float, vec3, float);"
 5566|      0|            "void rayQueryTerminateEXT(rayQueryEXT);"
 5567|      0|            "void rayQueryGenerateIntersectionEXT(rayQueryEXT, float);"
 5568|      0|            "void rayQueryConfirmIntersectionEXT(rayQueryEXT);"
 5569|      0|            "bool rayQueryProceedEXT(rayQueryEXT);"
 5570|      0|            "uint rayQueryGetIntersectionTypeEXT(rayQueryEXT, bool);"
 5571|      0|            "float rayQueryGetRayTMinEXT(rayQueryEXT);"
 5572|      0|            "uint rayQueryGetRayFlagsEXT(rayQueryEXT);"
 5573|      0|            "vec3 rayQueryGetWorldRayOriginEXT(rayQueryEXT);"
 5574|      0|            "vec3 rayQueryGetWorldRayDirectionEXT(rayQueryEXT);"
 5575|      0|            "float rayQueryGetIntersectionTEXT(rayQueryEXT, bool);"
 5576|      0|            "int rayQueryGetIntersectionInstanceCustomIndexEXT(rayQueryEXT, bool);"
 5577|      0|            "int rayQueryGetIntersectionInstanceIdEXT(rayQueryEXT, bool);"
 5578|      0|            "uint rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQueryEXT, bool);"
 5579|      0|            "int rayQueryGetIntersectionGeometryIndexEXT(rayQueryEXT, bool);"
 5580|      0|            "int rayQueryGetIntersectionPrimitiveIndexEXT(rayQueryEXT, bool);"
 5581|      0|            "vec2 rayQueryGetIntersectionBarycentricsEXT(rayQueryEXT, bool);"
 5582|      0|            "bool rayQueryGetIntersectionFrontFaceEXT(rayQueryEXT, bool);"
 5583|      0|            "bool rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQueryEXT);"
 5584|      0|            "vec3 rayQueryGetIntersectionObjectRayDirectionEXT(rayQueryEXT, bool);"
 5585|      0|            "vec3 rayQueryGetIntersectionObjectRayOriginEXT(rayQueryEXT, bool);"
 5586|      0|            "mat4x3 rayQueryGetIntersectionObjectToWorldEXT(rayQueryEXT, bool);"
 5587|      0|            "mat4x3 rayQueryGetIntersectionWorldToObjectEXT(rayQueryEXT, bool);"
 5588|      0|            "void rayQueryGetIntersectionTriangleVertexPositionsEXT(rayQueryEXT, bool, out vec3[3]);"
 5589|      0|            "int rayQueryGetIntersectionClusterIdNV(rayQueryEXT, bool);"
 5590|      0|            "vec3 rayQueryGetIntersectionSpherePositionNV(rayQueryEXT, bool);"
 5591|      0|            "float rayQueryGetIntersectionSphereRadiusNV(rayQueryEXT, bool);"
 5592|      0|            "float rayQueryGetIntersectionLSSHitValueNV(rayQueryEXT, bool);"
 5593|      0|            "void rayQueryGetIntersectionLSSPositionsNV(rayQueryEXT, bool, out vec3[2]);"
 5594|      0|            "void rayQueryGetIntersectionLSSRadiiNV(rayQueryEXT, bool, out float[2]);"
 5595|      0|            "bool rayQueryIsSphereHitNV(rayQueryEXT, bool);"
 5596|      0|            "bool rayQueryIsLSSHitNV(rayQueryEXT, bool);"
 5597|      0|            "\n");
 5598|       |
 5599|      0|        stageBuiltins[EShLangRayGen].append(
 5600|      0|            "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5601|      0|            "void traceRayMotionNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5602|      0|            "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5603|      0|            "void executeCallableNV(uint, int);"
 5604|      0|            "void executeCallableEXT(uint, int);"
 5605|      0|            "void hitObjectTraceRayNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5606|      0|            "void hitObjectTraceRayMotionNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5607|      0|            "void hitObjectRecordHitNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,int);"
 5608|      0|            "void hitObjectRecordHitMotionNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5609|      0|            "void hitObjectRecordHitWithIndexNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,int);"
 5610|      0|            "void hitObjectRecordHitWithIndexMotionNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,float,int);"
 5611|      0|            "void hitObjectRecordMissNV(hitObjectNV,uint,vec3,float,vec3,float);"
 5612|      0|            "void hitObjectRecordMissMotionNV(hitObjectNV,uint,vec3,float,vec3,float,float);"
 5613|      0|            "void hitObjectRecordEmptyNV(hitObjectNV);"
 5614|      0|            "void hitObjectExecuteShaderNV(hitObjectNV,int);"
 5615|      0|            "bool hitObjectIsEmptyNV(hitObjectNV);"
 5616|      0|            "bool hitObjectIsMissNV(hitObjectNV);"
 5617|      0|            "bool hitObjectIsHitNV(hitObjectNV);"
 5618|      0|            "float hitObjectGetRayTMinNV(hitObjectNV);"
 5619|      0|            "float hitObjectGetRayTMaxNV(hitObjectNV);"
 5620|      0|            "vec3 hitObjectGetWorldRayOriginNV(hitObjectNV);"
 5621|      0|            "vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV);"
 5622|      0|            "vec3 hitObjectGetObjectRayOriginNV(hitObjectNV);"
 5623|      0|            "vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV);"
 5624|      0|            "mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV);"
 5625|      0|            "mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV);"
 5626|      0|            "int hitObjectGetInstanceCustomIndexNV(hitObjectNV);"
 5627|      0|            "int hitObjectGetInstanceIdNV(hitObjectNV);"
 5628|      0|            "int hitObjectGetGeometryIndexNV(hitObjectNV);"
 5629|      0|            "int hitObjectGetPrimitiveIndexNV(hitObjectNV);"
 5630|      0|            "uint hitObjectGetHitKindNV(hitObjectNV);"
 5631|      0|            "void hitObjectGetAttributesNV(hitObjectNV,int);"
 5632|      0|            "float hitObjectGetCurrentTimeNV(hitObjectNV);"
 5633|      0|            "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);"
 5634|      0|            "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);"
 5635|      0|            "int hitObjectGetClusterIdNV(hitObjectNV);"
 5636|      0|            "void reorderThreadNV(uint, uint);"
 5637|      0|            "void reorderThreadNV(hitObjectNV);"
 5638|      0|            "void reorderThreadNV(hitObjectNV, uint, uint);"
 5639|      0|            "vec3 fetchMicroTriangleVertexPositionNV(accelerationStructureEXT, int, int, int, ivec2);"
 5640|      0|            "vec2 fetchMicroTriangleVertexBarycentricNV(accelerationStructureEXT, int, int, int, ivec2);"
 5641|      0|            "vec3 hitObjectGetSpherePositionNV(hitObjectNV);"
 5642|      0|            "float hitObjectGetSphereRadiusNV(hitObjectNV);"
 5643|      0|            "void hitObjectGetLSSPositionsNV(hitObjectNV, out vec3[2]);"
 5644|      0|            "void hitObjectGetLSSRadiiNV(hitObjectNV, out float[2]);"
 5645|      0|            "bool hitObjectIsSphereHitNV(hitObjectNV);"
 5646|      0|            "bool hitObjectIsLSSHitNV(hitObjectNV);"
 5647|      0|            "void hitObjectTraceRayEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5648|      0|            "void hitObjectTraceRayMotionEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5649|      0|            "void hitObjectRecordMissEXT(hitObjectEXT,uint,uint,vec3,float,vec3,float);"
 5650|      0|            "void hitObjectRecordMissMotionEXT(hitObjectEXT,uint,uint,vec3,float,vec3,float,float);"
 5651|      0|            "void hitObjectRecordEmptyEXT(hitObjectEXT);"
 5652|      0|            "void hitObjectExecuteShaderEXT(hitObjectEXT,int);"
 5653|      0|            "bool hitObjectIsEmptyEXT(hitObjectEXT);"
 5654|      0|            "bool hitObjectIsMissEXT(hitObjectEXT);"
 5655|      0|            "bool hitObjectIsHitEXT(hitObjectEXT);"
 5656|      0|            "float hitObjectGetRayTMinEXT(hitObjectEXT);"
 5657|      0|            "float hitObjectGetRayTMaxEXT(hitObjectEXT);"
 5658|      0|            "uint hitObjectGetRayFlagsEXT(hitObjectEXT);"
 5659|      0|            "vec3 hitObjectGetWorldRayOriginEXT(hitObjectEXT);"
 5660|      0|            "vec3 hitObjectGetWorldRayDirectionEXT(hitObjectEXT);"
 5661|      0|            "vec3 hitObjectGetObjectRayOriginEXT(hitObjectEXT);"
 5662|      0|            "vec3 hitObjectGetObjectRayDirectionEXT(hitObjectEXT);"
 5663|      0|            "mat4x3 hitObjectGetWorldToObjectEXT(hitObjectEXT);"
 5664|      0|            "mat4x3 hitObjectGetObjectToWorldEXT(hitObjectEXT);"
 5665|      0|            "int hitObjectGetInstanceCustomIndexEXT(hitObjectEXT);"
 5666|      0|            "int hitObjectGetInstanceIdEXT(hitObjectEXT);"
 5667|      0|            "int hitObjectGetGeometryIndexEXT(hitObjectEXT);"
 5668|      0|            "int hitObjectGetPrimitiveIndexEXT(hitObjectEXT);"
 5669|      0|            "uint hitObjectGetHitKindEXT(hitObjectEXT);"
 5670|      0|            "void hitObjectGetAttributesEXT(hitObjectEXT,int);"
 5671|      0|            "float hitObjectGetCurrentTimeEXT(hitObjectEXT);"
 5672|      0|            "uint hitObjectGetShaderBindingTableRecordIndexEXT(hitObjectEXT);"
 5673|      0|            "uvec2 hitObjectGetShaderRecordBufferHandleEXT(hitObjectEXT);"
 5674|      0|            "void hitObjectSetShaderBindingTableRecordIndexEXT(hitObjectEXT, uint);"
 5675|      0|            "void hitObjectReorderExecuteEXT(hitObjectEXT,int);"
 5676|      0|            "void hitObjectReorderExecuteEXT(hitObjectEXT,uint,uint,int);"
 5677|      0|            "void hitObjectTraceReorderExecuteEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5678|      0|            "void hitObjectTraceReorderExecuteEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,uint,uint,int);"
 5679|      0|            "void hitObjectTraceMotionReorderExecuteEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5680|      0|            "void hitObjectTraceMotionReorderExecuteEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,uint,uint,int);"
 5681|      0|            "void hitObjectRecordFromQueryEXT(hitObjectEXT, rayQueryEXT, uint, int);"
 5682|      0|            "void hitObjectRecordFromQueryEXT(hitObjectEXT, rayQueryEXT, uint, int, uint);"
 5683|      0|            "void hitObjectGetIntersectionTriangleVertexPositionsEXT(hitObjectEXT, out vec3[3]);"
 5684|      0|            "void reorderThreadEXT(uint, uint);"
 5685|      0|            "void reorderThreadEXT(hitObjectEXT);"
 5686|      0|            "void reorderThreadEXT(hitObjectEXT, uint, uint);"
 5687|      0|            "\n");
 5688|      0|        stageBuiltins[EShLangIntersect].append(
 5689|      0|            "bool reportIntersectionNV(float, uint);"
 5690|      0|            "bool reportIntersectionEXT(float, uint);"
 5691|      0|            "\n");
 5692|      0|        stageBuiltins[EShLangAnyHit].append(
 5693|      0|            "void ignoreIntersectionNV();"
 5694|      0|            "void terminateRayNV();"
 5695|      0|            "\n");
 5696|      0|        stageBuiltins[EShLangClosestHit].append(
 5697|      0|            "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5698|      0|            "void traceRayMotionNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5699|      0|            "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5700|      0|            "void executeCallableNV(uint, int);"
 5701|      0|            "void executeCallableEXT(uint, int);"
 5702|      0|            "void hitObjectTraceRayNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5703|      0|            "void hitObjectTraceRayMotionNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5704|      0|            "void hitObjectRecordHitNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,int);"
 5705|      0|            "void hitObjectRecordHitMotionNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5706|      0|            "void hitObjectRecordHitWithIndexNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,int);"
 5707|      0|            "void hitObjectRecordHitWithIndexMotionNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,float,int);"
 5708|      0|            "void hitObjectRecordMissNV(hitObjectNV, uint, vec3, float, vec3, float);"
 5709|      0|            "void hitObjectRecordMissMotionNV(hitObjectNV,uint,vec3,float,vec3,float,float);"
 5710|      0|            "void hitObjectRecordEmptyNV(hitObjectNV);"
 5711|      0|            "void hitObjectExecuteShaderNV(hitObjectNV, int);"
 5712|      0|            "bool hitObjectIsEmptyNV(hitObjectNV);"
 5713|      0|            "bool hitObjectIsMissNV(hitObjectNV);"
 5714|      0|            "bool hitObjectIsHitNV(hitObjectNV);"
 5715|      0|            "float hitObjectGetRayTMinNV(hitObjectNV);"
 5716|      0|            "float hitObjectGetRayTMaxNV(hitObjectNV);"
 5717|      0|            "vec3 hitObjectGetWorldRayOriginNV(hitObjectNV);"
 5718|      0|            "vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV);"
 5719|      0|            "vec3 hitObjectGetObjectRayOriginNV(hitObjectNV);"
 5720|      0|            "vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV);"
 5721|      0|            "mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV);"
 5722|      0|            "mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV);"
 5723|      0|            "int hitObjectGetInstanceCustomIndexNV(hitObjectNV);"
 5724|      0|            "int hitObjectGetInstanceIdNV(hitObjectNV);"
 5725|      0|            "int hitObjectGetGeometryIndexNV(hitObjectNV);"
 5726|      0|            "int hitObjectGetPrimitiveIndexNV(hitObjectNV);"
 5727|      0|            "uint hitObjectGetHitKindNV(hitObjectNV);"
 5728|      0|            "void hitObjectGetAttributesNV(hitObjectNV,int);"
 5729|      0|            "float hitObjectGetCurrentTimeNV(hitObjectNV);"
 5730|      0|            "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);"
 5731|      0|            "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);"
 5732|      0|            "int hitObjectGetClusterIdNV(hitObjectNV);"
 5733|      0|            "vec3 hitObjectGetSpherePositionNV(hitObjectNV);"
 5734|      0|            "float hitObjectGetSphereRadiusNV(hitObjectNV);"
 5735|      0|            "void hitObjectGetLSSPositionsNV(hitObjectNV, out vec3[2]);"
 5736|      0|            "void hitObjectGetLSSRadiiNV(hitObjectNV, out float[2]);"
 5737|      0|            "bool hitObjectIsSphereHitNV(hitObjectNV);"
 5738|      0|            "bool hitObjectIsLSSHitNV(hitObjectNV);"
 5739|      0|            "void hitObjectTraceRayEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5740|      0|            "void hitObjectTraceRayMotionEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5741|      0|            "void hitObjectRecordMissEXT(hitObjectEXT,uint,uint,vec3,float,vec3,float);"
 5742|      0|            "void hitObjectRecordMissMotionEXT(hitObjectEXT,uint,uint,vec3,float,vec3,float,float);"
 5743|      0|            "void hitObjectRecordEmptyEXT(hitObjectEXT);"
 5744|      0|            "void hitObjectExecuteShaderEXT(hitObjectEXT,int);"
 5745|      0|            "bool hitObjectIsEmptyEXT(hitObjectEXT);"
 5746|      0|            "bool hitObjectIsMissEXT(hitObjectEXT);"
 5747|      0|            "bool hitObjectIsHitEXT(hitObjectEXT);"
 5748|      0|            "float hitObjectGetRayTMinEXT(hitObjectEXT);"
 5749|      0|            "float hitObjectGetRayTMaxEXT(hitObjectEXT);"
 5750|      0|            "uint hitObjectGetRayFlagsEXT(hitObjectEXT);"
 5751|      0|            "vec3 hitObjectGetWorldRayOriginEXT(hitObjectEXT);"
 5752|      0|            "vec3 hitObjectGetWorldRayDirectionEXT(hitObjectEXT);"
 5753|      0|            "vec3 hitObjectGetObjectRayOriginEXT(hitObjectEXT);"
 5754|      0|            "vec3 hitObjectGetObjectRayDirectionEXT(hitObjectEXT);"
 5755|      0|            "mat4x3 hitObjectGetWorldToObjectEXT(hitObjectEXT);"
 5756|      0|            "mat4x3 hitObjectGetObjectToWorldEXT(hitObjectEXT);"
 5757|      0|            "int hitObjectGetInstanceCustomIndexEXT(hitObjectEXT);"
 5758|      0|            "int hitObjectGetInstanceIdEXT(hitObjectEXT);"
 5759|      0|            "int hitObjectGetGeometryIndexEXT(hitObjectEXT);"
 5760|      0|            "int hitObjectGetPrimitiveIndexEXT(hitObjectEXT);"
 5761|      0|            "uint hitObjectGetHitKindEXT(hitObjectEXT);"
 5762|      0|            "void hitObjectGetAttributesEXT(hitObjectEXT,int);"
 5763|      0|            "float hitObjectGetCurrentTimeEXT(hitObjectEXT);"
 5764|      0|            "uint hitObjectGetShaderBindingTableRecordIndexEXT(hitObjectEXT);"
 5765|      0|            "uvec2 hitObjectGetShaderRecordBufferHandleEXT(hitObjectEXT);"
 5766|      0|            "void hitObjectSetShaderBindingTableRecordIndexEXT(hitObjectEXT, uint);"
 5767|      0|            "void hitObjectRecordFromQueryEXT(hitObjectEXT, rayQueryEXT,uint, int);"
 5768|      0|            "void hitObjectRecordFromQueryEXT(hitObjectEXT, rayQueryEXT,uint, int, uint);"
 5769|      0|            "void hitObjectGetIntersectionTriangleVertexPositionsEXT(hitObjectEXT, out vec3[3]);"
 5770|      0|            "\n");
 5771|      0|        stageBuiltins[EShLangMiss].append(
 5772|      0|            "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5773|      0|            "void traceRayMotionNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5774|      0|            "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5775|      0|            "void executeCallableNV(uint, int);"
 5776|      0|            "void executeCallableEXT(uint, int);"
 5777|      0|            "void hitObjectTraceRayNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5778|      0|            "void hitObjectTraceRayMotionNV(hitObjectNV,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5779|      0|            "void hitObjectRecordHitNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,int);"
 5780|      0|            "void hitObjectRecordHitMotionNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5781|      0|            "void hitObjectRecordHitWithIndexNV(hitObjectNV,accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,int);"
 5782|      0|            "void hitObjectRecordHitWithIndexMotionNV(hitObjectNV, accelerationStructureEXT,int,int,int,uint,uint,vec3,float,vec3,float,float,int);"
 5783|      0|            "void hitObjectRecordMissNV(hitObjectNV, uint, vec3, float, vec3, float);"
 5784|      0|            "void hitObjectRecordMissMotionNV(hitObjectNV,uint,vec3,float,vec3,float,float);"
 5785|      0|            "void hitObjectRecordEmptyNV(hitObjectNV);"
 5786|      0|            "void hitObjectExecuteShaderNV(hitObjectNV, int);"
 5787|      0|            "bool hitObjectIsEmptyNV(hitObjectNV);"
 5788|      0|            "bool hitObjectIsMissNV(hitObjectNV);"
 5789|      0|            "bool hitObjectIsHitNV(hitObjectNV);"
 5790|      0|            "float hitObjectGetRayTMinNV(hitObjectNV);"
 5791|      0|            "float hitObjectGetRayTMaxNV(hitObjectNV);"
 5792|      0|            "vec3 hitObjectGetWorldRayOriginNV(hitObjectNV);"
 5793|      0|            "vec3 hitObjectGetWorldRayDirectionNV(hitObjectNV);"
 5794|      0|            "vec3 hitObjectGetObjectRayOriginNV(hitObjectNV);"
 5795|      0|            "vec3 hitObjectGetObjectRayDirectionNV(hitObjectNV);"
 5796|      0|            "mat4x3 hitObjectGetWorldToObjectNV(hitObjectNV);"
 5797|      0|            "mat4x3 hitObjectGetObjectToWorldNV(hitObjectNV);"
 5798|      0|            "int hitObjectGetInstanceCustomIndexNV(hitObjectNV);"
 5799|      0|            "int hitObjectGetInstanceIdNV(hitObjectNV);"
 5800|      0|            "int hitObjectGetGeometryIndexNV(hitObjectNV);"
 5801|      0|            "int hitObjectGetPrimitiveIndexNV(hitObjectNV);"
 5802|      0|            "uint hitObjectGetHitKindNV(hitObjectNV);"
 5803|      0|            "void hitObjectGetAttributesNV(hitObjectNV,int);"
 5804|      0|            "float hitObjectGetCurrentTimeNV(hitObjectNV);"
 5805|      0|            "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);"
 5806|      0|            "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);"
 5807|      0|            "int hitObjectGetClusterIdNV(hitObjectNV);"
 5808|      0|            "vec3 hitObjectGetSpherePositionNV(hitObjectNV);"
 5809|      0|            "float hitObjectGetSphereRadiusNV(hitObjectNV);"
 5810|      0|            "void hitObjectGetLSSPositionsNV(hitObjectNV, out vec3[2]);"
 5811|      0|            "void hitObjectGetLSSRadiiNV(hitObjectNV, out float[2]);"
 5812|      0|            "bool hitObjectIsSphereHitNV(hitObjectNV);"
 5813|      0|            "bool hitObjectIsLSSHitNV(hitObjectNV);"
 5814|      0|            "void hitObjectTraceRayEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);"
 5815|      0|            "void hitObjectTraceRayMotionEXT(hitObjectEXT,accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);"
 5816|      0|            "void hitObjectRecordMissEXT(hitObjectEXT,uint,uint,vec3,float,vec3,float);"
 5817|      0|            "void hitObjectRecordMissMotionEXT(hitObjectEXT,uint,uint,vec3,float,vec3,float,float);"
 5818|      0|            "void hitObjectRecordEmptyEXT(hitObjectEXT);"
 5819|      0|            "void hitObjectExecuteShaderEXT(hitObjectEXT,int);"
 5820|      0|            "bool hitObjectIsEmptyEXT(hitObjectEXT);"
 5821|      0|            "bool hitObjectIsMissEXT(hitObjectEXT);"
 5822|      0|            "bool hitObjectIsHitEXT(hitObjectEXT);"
 5823|      0|            "float hitObjectGetRayTMinEXT(hitObjectEXT);"
 5824|      0|            "float hitObjectGetRayTMaxEXT(hitObjectEXT);"
 5825|      0|            "uint hitObjectGetRayFlagsEXT(hitObjectEXT);"
 5826|      0|            "vec3 hitObjectGetWorldRayOriginEXT(hitObjectEXT);"
 5827|      0|            "vec3 hitObjectGetWorldRayDirectionEXT(hitObjectEXT);"
 5828|      0|            "vec3 hitObjectGetObjectRayOriginEXT(hitObjectEXT);"
 5829|      0|            "vec3 hitObjectGetObjectRayDirectionEXT(hitObjectEXT);"
 5830|      0|            "mat4x3 hitObjectGetWorldToObjectEXT(hitObjectEXT);"
 5831|      0|            "mat4x3 hitObjectGetObjectToWorldEXT(hitObjectEXT);"
 5832|      0|            "int hitObjectGetInstanceCustomIndexEXT(hitObjectEXT);"
 5833|      0|            "int hitObjectGetInstanceIdEXT(hitObjectEXT);"
 5834|      0|            "int hitObjectGetGeometryIndexEXT(hitObjectEXT);"
 5835|      0|            "int hitObjectGetPrimitiveIndexEXT(hitObjectEXT);"
 5836|      0|            "uint hitObjectGetHitKindEXT(hitObjectEXT);"
 5837|      0|            "void hitObjectGetAttributesEXT(hitObjectEXT,int);"
 5838|      0|            "float hitObjectGetCurrentTimeEXT(hitObjectEXT);"
 5839|      0|            "uint hitObjectGetShaderBindingTableRecordIndexEXT(hitObjectEXT);"
 5840|      0|            "uvec2 hitObjectGetShaderRecordBufferHandleEXT(hitObjectEXT);"
 5841|      0|            "void hitObjectSetShaderBindingTableRecordIndexEXT(hitObjectEXT, uint);"
 5842|      0|            "void hitObjectRecordFromQueryEXT(hitObjectEXT, rayQueryEXT, uint, int);"
 5843|      0|            "void hitObjectRecordFromQueryEXT(hitObjectEXT, rayQueryEXT, uint, int, uint);"
 5844|      0|            "void hitObjectGetIntersectionTriangleVertexPositionsEXT(hitObjectEXT, out vec3[3]);"
 5845|      0|            "\n");
 5846|      0|        stageBuiltins[EShLangCallable].append(
 5847|      0|            "void executeCallableNV(uint, int);"
 5848|      0|            "void executeCallableEXT(uint, int);"
 5849|      0|            "\n");
 5850|      0|    }
 5851|       |
 5852|       |    // GL_KHR_compute_shader_derivatives / SPV_NV_compute_shader_derivatives
 5853|     99|    if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (5853:10): [True: 0, False: 99]
  |  Branch (5853:35): [True: 0, False: 0]
  |  Branch (5853:55): [True: 99, False: 0]
  |  Branch (5853:80): [True: 10, False: 89]
  ------------------
 5854|     10|        if (profile != EEsProfile) {
  ------------------
  |  Branch (5854:13): [True: 10, False: 0]
  ------------------
 5855|     10|            stageBuiltins[EShLangCompute].append(derivatives);
 5856|     10|            stageBuiltins[EShLangTask].append(derivatives);
 5857|     10|            stageBuiltins[EShLangMesh].append(derivatives);
 5858|     10|        }
 5859|       |
 5860|     10|        stageBuiltins[EShLangCompute].append(derivativeControls);
 5861|     10|        stageBuiltins[EShLangCompute].append("\n");
 5862|       |
 5863|     10|        if (profile != EEsProfile) {
  ------------------
  |  Branch (5863:13): [True: 10, False: 0]
  ------------------
 5864|     10|            stageBuiltins[EShLangTask].append(derivativeControls);
 5865|     10|            stageBuiltins[EShLangTask].append("\n");
 5866|     10|            stageBuiltins[EShLangMesh].append(derivativeControls);
 5867|     10|            stageBuiltins[EShLangMesh].append("\n");
 5868|     10|        }
 5869|     10|    }
 5870|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (5870:9): [True: 99, False: 0]
  |  Branch (5870:34): [True: 10, False: 89]
  ------------------
 5871|     10|        stageBuiltins[EShLangCompute].append(derivativesAndControl16bits);
 5872|     10|        stageBuiltins[EShLangCompute].append(derivativesAndControl64bits);
 5873|     10|        stageBuiltins[EShLangCompute].append("\n");
 5874|     10|        stageBuiltins[EShLangTask].append(derivativesAndControl16bits);
 5875|     10|        stageBuiltins[EShLangTask].append(derivativesAndControl64bits);
 5876|     10|        stageBuiltins[EShLangTask].append("\n");
 5877|     10|        stageBuiltins[EShLangMesh].append(derivativesAndControl16bits);
 5878|     10|        stageBuiltins[EShLangMesh].append(derivativesAndControl64bits);
 5879|     10|        stageBuiltins[EShLangMesh].append("\n");
 5880|     10|    }
 5881|       |
 5882|       |    // Builtins for GL_NV_mesh_shader
 5883|     99|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (5883:10): [True: 99, False: 0]
  |  Branch (5883:35): [True: 10, False: 89]
  |  Branch (5883:55): [True: 0, False: 89]
  |  Branch (5883:80): [True: 0, False: 0]
  ------------------
 5884|     10|        stageBuiltins[EShLangMesh].append(
 5885|     10|            "void writePackedPrimitiveIndices4x8NV(uint, uint);"
 5886|     10|            "\n");
 5887|     10|    }
 5888|       |    // Builtins for GL_EXT_mesh_shader
 5889|     99|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (5889:10): [True: 99, False: 0]
  |  Branch (5889:35): [True: 10, False: 89]
  |  Branch (5889:55): [True: 0, False: 89]
  |  Branch (5889:80): [True: 0, False: 0]
  ------------------
 5890|       |        // Builtins for GL_EXT_mesh_shader
 5891|     10|        stageBuiltins[EShLangTask].append(
 5892|     10|            "void EmitMeshTasksEXT(uint, uint, uint);"
 5893|     10|            "\n");
 5894|       |
 5895|     10|        stageBuiltins[EShLangMesh].append(
 5896|     10|            "void SetMeshOutputsEXT(uint, uint);"
 5897|     10|            "\n");
 5898|     10|    }
 5899|       |    // Builtins for GL_NV_displacement_micromap
 5900|     99|    if ((profile != EEsProfile && version >= 460) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (5900:10): [True: 99, False: 0]
  |  Branch (5900:35): [True: 0, False: 99]
  |  Branch (5900:55): [True: 0, False: 99]
  |  Branch (5900:80): [True: 0, False: 0]
  ------------------
 5901|      0|        stageBuiltins[EShLangMesh].append(
 5902|      0|            "vec3 fetchMicroTriangleVertexPositionNV(accelerationStructureEXT, int, int, int, ivec2);"
 5903|      0|            "vec2 fetchMicroTriangleVertexBarycentricNV(accelerationStructureEXT, int, int, int, ivec2);"
 5904|      0|            "\n");
 5905|       |
 5906|      0|        stageBuiltins[EShLangCompute].append(
 5907|      0|            "vec3 fetchMicroTriangleVertexPositionNV(accelerationStructureEXT, int, int, int, ivec2);"
 5908|      0|            "vec2 fetchMicroTriangleVertexBarycentricNV(accelerationStructureEXT, int, int, int, ivec2);"
 5909|      0|            "\n");
 5910|       |
 5911|      0|    }
 5912|       |
 5913|       |
 5914|       |    //============================================================================
 5915|       |    //
 5916|       |    // Standard Uniforms
 5917|       |    //
 5918|       |    //============================================================================
 5919|       |
 5920|       |    //
 5921|       |    // Depth range in window coordinates, p. 33
 5922|       |    //
 5923|     99|    if (spvVersion.spv == 0) {
  ------------------
  |  Branch (5923:9): [True: 0, False: 99]
  ------------------
 5924|      0|        commonBuiltins.append(
 5925|      0|            "struct gl_DepthRangeParameters {"
 5926|      0|            );
 5927|      0|        if (profile == EEsProfile) {
  ------------------
  |  Branch (5927:13): [True: 0, False: 0]
  ------------------
 5928|      0|            commonBuiltins.append(
 5929|      0|                "highp float near;"   // n
 5930|      0|                "highp float far;"    // f
 5931|      0|                "highp float diff;"   // f - n
 5932|      0|                );
 5933|      0|        } else {
 5934|      0|            commonBuiltins.append(
 5935|      0|                "float near;"  // n
 5936|      0|                "float far;"   // f
 5937|      0|                "float diff;"  // f - n
 5938|      0|                );
 5939|      0|        }
 5940|       |
 5941|      0|        commonBuiltins.append(
 5942|      0|            "};"
 5943|      0|            "uniform gl_DepthRangeParameters gl_DepthRange;"
 5944|      0|            "\n");
 5945|      0|    }
 5946|       |
 5947|     99|    if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) {
  ------------------
  |  Branch (5947:9): [True: 0, False: 99]
  |  Branch (5947:32): [True: 0, False: 0]
  ------------------
 5948|       |        //
 5949|       |        // Matrix state. p. 31, 32, 37, 39, 40.
 5950|       |        //
 5951|      0|        commonBuiltins.append(
 5952|      0|            "uniform mat4  gl_ModelViewMatrix;"
 5953|      0|            "uniform mat4  gl_ProjectionMatrix;"
 5954|      0|            "uniform mat4  gl_ModelViewProjectionMatrix;"
 5955|       |
 5956|       |            //
 5957|       |            // Derived matrix state that provides inverse and transposed versions
 5958|       |            // of the matrices above.
 5959|       |            //
 5960|      0|            "uniform mat3  gl_NormalMatrix;"
 5961|       |
 5962|      0|            "uniform mat4  gl_ModelViewMatrixInverse;"
 5963|      0|            "uniform mat4  gl_ProjectionMatrixInverse;"
 5964|      0|            "uniform mat4  gl_ModelViewProjectionMatrixInverse;"
 5965|       |
 5966|      0|            "uniform mat4  gl_ModelViewMatrixTranspose;"
 5967|      0|            "uniform mat4  gl_ProjectionMatrixTranspose;"
 5968|      0|            "uniform mat4  gl_ModelViewProjectionMatrixTranspose;"
 5969|       |
 5970|      0|            "uniform mat4  gl_ModelViewMatrixInverseTranspose;"
 5971|      0|            "uniform mat4  gl_ProjectionMatrixInverseTranspose;"
 5972|      0|            "uniform mat4  gl_ModelViewProjectionMatrixInverseTranspose;"
 5973|       |
 5974|       |            //
 5975|       |            // Normal scaling p. 39.
 5976|       |            //
 5977|      0|            "uniform float gl_NormalScale;"
 5978|       |
 5979|       |            //
 5980|       |            // Point Size, p. 66, 67.
 5981|       |            //
 5982|      0|            "struct gl_PointParameters {"
 5983|      0|                "float size;"
 5984|      0|                "float sizeMin;"
 5985|      0|                "float sizeMax;"
 5986|      0|                "float fadeThresholdSize;"
 5987|      0|                "float distanceConstantAttenuation;"
 5988|      0|                "float distanceLinearAttenuation;"
 5989|      0|                "float distanceQuadraticAttenuation;"
 5990|      0|            "};"
 5991|       |
 5992|      0|            "uniform gl_PointParameters gl_Point;"
 5993|       |
 5994|       |            //
 5995|       |            // Material State p. 50, 55.
 5996|       |            //
 5997|      0|            "struct gl_MaterialParameters {"
 5998|      0|                "vec4  emission;"    // Ecm
 5999|      0|                "vec4  ambient;"     // Acm
 6000|      0|                "vec4  diffuse;"     // Dcm
 6001|      0|                "vec4  specular;"    // Scm
 6002|      0|                "float shininess;"   // Srm
 6003|      0|            "};"
 6004|      0|            "uniform gl_MaterialParameters  gl_FrontMaterial;"
 6005|      0|            "uniform gl_MaterialParameters  gl_BackMaterial;"
 6006|       |
 6007|       |            //
 6008|       |            // Light State p 50, 53, 55.
 6009|       |            //
 6010|      0|            "struct gl_LightSourceParameters {"
 6011|      0|                "vec4  ambient;"             // Acli
 6012|      0|                "vec4  diffuse;"             // Dcli
 6013|      0|                "vec4  specular;"            // Scli
 6014|      0|                "vec4  position;"            // Ppli
 6015|      0|                "vec4  halfVector;"          // Derived: Hi
 6016|      0|                "vec3  spotDirection;"       // Sdli
 6017|      0|                "float spotExponent;"        // Srli
 6018|      0|                "float spotCutoff;"          // Crli
 6019|       |                                                        // (range: [0.0,90.0], 180.0)
 6020|      0|                "float spotCosCutoff;"       // Derived: cos(Crli)
 6021|       |                                                        // (range: [1.0,0.0],-1.0)
 6022|      0|                "float constantAttenuation;" // K0
 6023|      0|                "float linearAttenuation;"   // K1
 6024|      0|                "float quadraticAttenuation;"// K2
 6025|      0|            "};"
 6026|       |
 6027|      0|            "struct gl_LightModelParameters {"
 6028|      0|                "vec4  ambient;"       // Acs
 6029|      0|            "};"
 6030|       |
 6031|      0|            "uniform gl_LightModelParameters  gl_LightModel;"
 6032|       |
 6033|       |            //
 6034|       |            // Derived state from products of light and material.
 6035|       |            //
 6036|      0|            "struct gl_LightModelProducts {"
 6037|      0|                "vec4  sceneColor;"     // Derived. Ecm + Acm * Acs
 6038|      0|            "};"
 6039|       |
 6040|      0|            "uniform gl_LightModelProducts gl_FrontLightModelProduct;"
 6041|      0|            "uniform gl_LightModelProducts gl_BackLightModelProduct;"
 6042|       |
 6043|      0|            "struct gl_LightProducts {"
 6044|      0|                "vec4  ambient;"        // Acm * Acli
 6045|      0|                "vec4  diffuse;"        // Dcm * Dcli
 6046|      0|                "vec4  specular;"       // Scm * Scli
 6047|      0|            "};"
 6048|       |
 6049|       |            //
 6050|       |            // Fog p. 161
 6051|       |            //
 6052|      0|            "struct gl_FogParameters {"
 6053|      0|                "vec4  color;"
 6054|      0|                "float density;"
 6055|      0|                "float start;"
 6056|      0|                "float end;"
 6057|      0|                "float scale;"   //  1 / (gl_FogEnd - gl_FogStart)
 6058|      0|            "};"
 6059|       |
 6060|      0|            "uniform gl_FogParameters gl_Fog;"
 6061|       |
 6062|      0|            "\n");
 6063|      0|    }
 6064|       |
 6065|       |    //============================================================================
 6066|       |    //
 6067|       |    // Define the interface to the compute shader.
 6068|       |    //
 6069|       |    //============================================================================
 6070|       |
 6071|     99|    if ((profile != EEsProfile && version >= 420) ||
  ------------------
  |  Branch (6071:10): [True: 99, False: 0]
  |  Branch (6071:35): [True: 10, False: 89]
  ------------------
 6072|     89|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6072:10): [True: 0, False: 89]
  |  Branch (6072:35): [True: 0, False: 0]
  ------------------
 6073|     10|        stageBuiltins[EShLangCompute].append(
 6074|     10|            "in    highp uvec3 gl_NumWorkGroups;"
 6075|     10|            "const highp uvec3 gl_WorkGroupSize = uvec3(1,1,1);"
 6076|       |
 6077|     10|            "in highp uvec3 gl_WorkGroupID;"
 6078|     10|            "in highp uvec3 gl_LocalInvocationID;"
 6079|       |
 6080|     10|            "in highp uvec3 gl_GlobalInvocationID;"
 6081|     10|            "in highp uint gl_LocalInvocationIndex;"
 6082|       |
 6083|     10|            "\n");
 6084|     10|    }
 6085|       |
 6086|     99|    if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (6086:10): [True: 99, False: 0]
  |  Branch (6086:35): [True: 99, False: 0]
  ------------------
 6087|     99|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6087:10): [True: 0, False: 0]
  |  Branch (6087:35): [True: 0, False: 0]
  ------------------
 6088|     99|        stageBuiltins[EShLangCompute].append(
 6089|     99|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6090|     99|            "\n");
 6091|     99|    }
 6092|       |
 6093|       |    // GL_QCOM_tile_shading
 6094|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (6094:10): [True: 0, False: 99]
  |  Branch (6094:35): [True: 0, False: 0]
  ------------------
 6095|     99|        (profile != EEsProfile && version >= 460)) {
  ------------------
  |  Branch (6095:10): [True: 99, False: 0]
  |  Branch (6095:35): [True: 0, False: 99]
  ------------------
 6096|      0|        stageBuiltins[EShLangCompute].append(
 6097|      0|            "in highp uvec2 gl_TileOffsetQCOM;"     // GL_QCOM_tile_shading
 6098|      0|            "in highp uvec3 gl_TileDimensionQCOM;"  // GL_QCOM_tile_shading
 6099|      0|            "in highp uvec2 gl_TileApronSizeQCOM;"  // GL_QCOM_tile_shading
 6100|      0|            "\n");
 6101|      0|    }
 6102|       |
 6103|       |    //============================================================================
 6104|       |    //
 6105|       |    // Define the interface to the mesh/task shader.
 6106|       |    //
 6107|       |    //============================================================================
 6108|       |
 6109|     99|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (6109:10): [True: 99, False: 0]
  |  Branch (6109:35): [True: 10, False: 89]
  |  Branch (6109:55): [True: 0, False: 89]
  |  Branch (6109:80): [True: 0, False: 0]
  ------------------
 6110|       |        // per-vertex attributes
 6111|     10|        stageBuiltins[EShLangMesh].append(
 6112|     10|            "out gl_MeshPerVertexNV {"
 6113|     10|                "vec4 gl_Position;"
 6114|     10|                "float gl_PointSize;"
 6115|     10|                "float gl_ClipDistance[];"
 6116|     10|                "float gl_CullDistance[];"
 6117|     10|                "perviewNV vec4 gl_PositionPerViewNV[];"
 6118|     10|                "perviewNV float gl_ClipDistancePerViewNV[][];"
 6119|     10|                "perviewNV float gl_CullDistancePerViewNV[][];"
 6120|     10|            "} gl_MeshVerticesNV[];"
 6121|     10|        );
 6122|       |
 6123|       |        // per-primitive attributes
 6124|     10|        stageBuiltins[EShLangMesh].append(
 6125|     10|            "perprimitiveNV out gl_MeshPerPrimitiveNV {"
 6126|     10|                "int gl_PrimitiveID;"
 6127|     10|                "int gl_Layer;"
 6128|     10|                "int gl_ViewportIndex;"
 6129|     10|                "int gl_ViewportMask[];"
 6130|     10|                "perviewNV int gl_LayerPerViewNV[];"
 6131|     10|                "perviewNV int gl_ViewportMaskPerViewNV[][];"
 6132|     10|            "} gl_MeshPrimitivesNV[];"
 6133|     10|        );
 6134|       |
 6135|     10|        stageBuiltins[EShLangMesh].append(
 6136|     10|            "out uint gl_PrimitiveCountNV;"
 6137|     10|            "out uint gl_PrimitiveIndicesNV[];"
 6138|       |
 6139|     10|            "in uint gl_MeshViewCountNV;"
 6140|     10|            "in uint gl_MeshViewIndicesNV[4];"
 6141|       |
 6142|     10|            "const highp uvec3 gl_WorkGroupSize = uvec3(1,1,1);"
 6143|       |
 6144|     10|            "in highp uvec3 gl_WorkGroupID;"
 6145|     10|            "in highp uvec3 gl_LocalInvocationID;"
 6146|       |
 6147|     10|            "in highp uvec3 gl_GlobalInvocationID;"
 6148|     10|            "in highp uint gl_LocalInvocationIndex;"
 6149|     10|            "\n");
 6150|       |
 6151|       |        // GL_EXT_mesh_shader
 6152|     10|        stageBuiltins[EShLangMesh].append(
 6153|     10|            "out uint gl_PrimitivePointIndicesEXT[];"
 6154|     10|            "out uvec2 gl_PrimitiveLineIndicesEXT[];"
 6155|     10|            "out uvec3 gl_PrimitiveTriangleIndicesEXT[];"
 6156|     10|            "in    highp uvec3 gl_NumWorkGroups;"
 6157|     10|            "\n");
 6158|       |
 6159|       |        // per-vertex attributes
 6160|     10|        stageBuiltins[EShLangMesh].append(
 6161|     10|            "out gl_MeshPerVertexEXT {"
 6162|     10|                "vec4 gl_Position;"
 6163|     10|                "float gl_PointSize;"
 6164|     10|                "float gl_ClipDistance[];"
 6165|     10|                "float gl_CullDistance[];"
 6166|     10|            "} gl_MeshVerticesEXT[];"
 6167|     10|        );
 6168|       |
 6169|       |        // per-primitive attributes
 6170|     10|        stageBuiltins[EShLangMesh].append(
 6171|     10|            "perprimitiveEXT out gl_MeshPerPrimitiveEXT {"
 6172|     10|                "int gl_PrimitiveID;"
 6173|     10|                "int gl_Layer;"
 6174|     10|                "int gl_ViewportIndex;"
 6175|     10|                "bool gl_CullPrimitiveEXT;"
 6176|     10|                "int  gl_PrimitiveShadingRateEXT;"
 6177|     10|            "} gl_MeshPrimitivesEXT[];"
 6178|     10|        );
 6179|       |
 6180|     10|        stageBuiltins[EShLangTask].append(
 6181|     10|            "out uint gl_TaskCountNV;"
 6182|       |
 6183|     10|            "const highp uvec3 gl_WorkGroupSize = uvec3(1,1,1);"
 6184|       |
 6185|     10|            "in highp uvec3 gl_WorkGroupID;"
 6186|     10|            "in highp uvec3 gl_LocalInvocationID;"
 6187|       |
 6188|     10|            "in highp uvec3 gl_GlobalInvocationID;"
 6189|     10|            "in highp uint gl_LocalInvocationIndex;"
 6190|       |
 6191|     10|            "in uint gl_MeshViewCountNV;"
 6192|     10|            "in uint gl_MeshViewIndicesNV[4];"
 6193|     10|            "in    highp uvec3 gl_NumWorkGroups;"
 6194|     10|            "\n");
 6195|     10|    }
 6196|       |
 6197|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (6197:9): [True: 99, False: 0]
  |  Branch (6197:34): [True: 10, False: 89]
  ------------------
 6198|     10|        stageBuiltins[EShLangMesh].append(
 6199|     10|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6200|     10|            "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
 6201|     10|            "in int gl_ViewIndex;"             // GL_EXT_multiview
 6202|     10|            "\n");
 6203|       |
 6204|     10|        stageBuiltins[EShLangTask].append(
 6205|     10|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6206|     10|            "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
 6207|     10|            "\n");
 6208|       |
 6209|     10|        if (version >= 460) {
  ------------------
  |  Branch (6209:13): [True: 0, False: 10]
  ------------------
 6210|      0|            stageBuiltins[EShLangMesh].append(
 6211|      0|                "in int gl_DrawID;"
 6212|      0|                "\n");
 6213|       |
 6214|      0|            stageBuiltins[EShLangTask].append(
 6215|      0|                "in int gl_DrawID;"
 6216|      0|                "\n");
 6217|      0|        }
 6218|     10|    }
 6219|       |
 6220|       |    //============================================================================
 6221|       |    //
 6222|       |    // Define the interface to the vertex shader.
 6223|       |    //
 6224|       |    //============================================================================
 6225|       |
 6226|     99|    if (profile != EEsProfile) {
  ------------------
  |  Branch (6226:9): [True: 99, False: 0]
  ------------------
 6227|     99|        if (version < 130) {
  ------------------
  |  Branch (6227:13): [True: 0, False: 99]
  ------------------
 6228|      0|            stageBuiltins[EShLangVertex].append(
 6229|      0|                "attribute vec4  gl_Color;"
 6230|      0|                "attribute vec4  gl_SecondaryColor;"
 6231|      0|                "attribute vec3  gl_Normal;"
 6232|      0|                "attribute vec4  gl_Vertex;"
 6233|      0|                "attribute vec4  gl_MultiTexCoord0;"
 6234|      0|                "attribute vec4  gl_MultiTexCoord1;"
 6235|      0|                "attribute vec4  gl_MultiTexCoord2;"
 6236|      0|                "attribute vec4  gl_MultiTexCoord3;"
 6237|      0|                "attribute vec4  gl_MultiTexCoord4;"
 6238|      0|                "attribute vec4  gl_MultiTexCoord5;"
 6239|      0|                "attribute vec4  gl_MultiTexCoord6;"
 6240|      0|                "attribute vec4  gl_MultiTexCoord7;"
 6241|      0|                "attribute float gl_FogCoord;"
 6242|      0|                "\n");
 6243|     99|        } else if (IncludeLegacy(version, profile, spvVersion)) {
  ------------------
  |  Branch (6243:20): [True: 0, False: 99]
  ------------------
 6244|      0|            stageBuiltins[EShLangVertex].append(
 6245|      0|                "in vec4  gl_Color;"
 6246|      0|                "in vec4  gl_SecondaryColor;"
 6247|      0|                "in vec3  gl_Normal;"
 6248|      0|                "in vec4  gl_Vertex;"
 6249|      0|                "in vec4  gl_MultiTexCoord0;"
 6250|      0|                "in vec4  gl_MultiTexCoord1;"
 6251|      0|                "in vec4  gl_MultiTexCoord2;"
 6252|      0|                "in vec4  gl_MultiTexCoord3;"
 6253|      0|                "in vec4  gl_MultiTexCoord4;"
 6254|      0|                "in vec4  gl_MultiTexCoord5;"
 6255|      0|                "in vec4  gl_MultiTexCoord6;"
 6256|      0|                "in vec4  gl_MultiTexCoord7;"
 6257|      0|                "in float gl_FogCoord;"
 6258|      0|                "\n");
 6259|      0|        }
 6260|       |
 6261|     99|        if (version < 150) {
  ------------------
  |  Branch (6261:13): [True: 86, False: 13]
  ------------------
 6262|     86|            if (version < 130) {
  ------------------
  |  Branch (6262:17): [True: 0, False: 86]
  ------------------
 6263|      0|                stageBuiltins[EShLangVertex].append(
 6264|      0|                    "        vec4  gl_ClipVertex;"       // needs qualifier fixed later
 6265|      0|                    "varying vec4  gl_FrontColor;"
 6266|      0|                    "varying vec4  gl_BackColor;"
 6267|      0|                    "varying vec4  gl_FrontSecondaryColor;"
 6268|      0|                    "varying vec4  gl_BackSecondaryColor;"
 6269|      0|                    "varying vec4  gl_TexCoord[];"
 6270|      0|                    "varying float gl_FogFragCoord;"
 6271|      0|                    "\n");
 6272|     86|            } else if (IncludeLegacy(version, profile, spvVersion)) {
  ------------------
  |  Branch (6272:24): [True: 0, False: 86]
  ------------------
 6273|      0|                stageBuiltins[EShLangVertex].append(
 6274|      0|                    "    vec4  gl_ClipVertex;"       // needs qualifier fixed later
 6275|      0|                    "out vec4  gl_FrontColor;"
 6276|      0|                    "out vec4  gl_BackColor;"
 6277|      0|                    "out vec4  gl_FrontSecondaryColor;"
 6278|      0|                    "out vec4  gl_BackSecondaryColor;"
 6279|      0|                    "out vec4  gl_TexCoord[];"
 6280|      0|                    "out float gl_FogFragCoord;"
 6281|      0|                    "\n");
 6282|      0|            }
 6283|     86|            stageBuiltins[EShLangVertex].append(
 6284|     86|                "vec4 gl_Position;"   // needs qualifier fixed later
 6285|     86|                "float gl_PointSize;" // needs qualifier fixed later
 6286|     86|                );
 6287|       |
 6288|     86|            if (version == 130 || version == 140)
  ------------------
  |  Branch (6288:17): [True: 0, False: 86]
  |  Branch (6288:35): [True: 86, False: 0]
  ------------------
 6289|     86|                stageBuiltins[EShLangVertex].append(
 6290|     86|                    "out float gl_ClipDistance[];"
 6291|     86|                    );
 6292|     86|        } else {
 6293|       |            // version >= 150
 6294|     13|            stageBuiltins[EShLangVertex].append(
 6295|     13|                "out gl_PerVertex {"
 6296|     13|                    "vec4 gl_Position;"     // needs qualifier fixed later
 6297|     13|                    "float gl_PointSize;"   // needs qualifier fixed later
 6298|     13|                    "float gl_ClipDistance[];"
 6299|     13|                    );
 6300|     13|            if (IncludeLegacy(version, profile, spvVersion))
  ------------------
  |  Branch (6300:17): [True: 0, False: 13]
  ------------------
 6301|      0|                stageBuiltins[EShLangVertex].append(
 6302|      0|                    "vec4 gl_ClipVertex;"   // needs qualifier fixed later
 6303|      0|                    "vec4 gl_FrontColor;"
 6304|      0|                    "vec4 gl_BackColor;"
 6305|      0|                    "vec4 gl_FrontSecondaryColor;"
 6306|      0|                    "vec4 gl_BackSecondaryColor;"
 6307|      0|                    "vec4 gl_TexCoord[];"
 6308|      0|                    "float gl_FogFragCoord;"
 6309|      0|                    );
 6310|     13|            if (version >= 450)
  ------------------
  |  Branch (6310:17): [True: 10, False: 3]
  ------------------
 6311|     10|                stageBuiltins[EShLangVertex].append(
 6312|     10|                    "float gl_CullDistance[];"
 6313|     10|                    );
 6314|     13|            stageBuiltins[EShLangVertex].append(
 6315|     13|                "};"
 6316|     13|                "\n");
 6317|     13|        }
 6318|     99|        if (version >= 130 && spvVersion.vulkan == 0)
  ------------------
  |  Branch (6318:13): [True: 99, False: 0]
  |  Branch (6318:31): [True: 0, False: 99]
  ------------------
 6319|      0|            stageBuiltins[EShLangVertex].append(
 6320|      0|                "int gl_VertexID;"            // needs qualifier fixed later
 6321|      0|                );
 6322|     99|        if (spvVersion.vulkan == 0)
  ------------------
  |  Branch (6322:13): [True: 0, False: 99]
  ------------------
 6323|      0|            stageBuiltins[EShLangVertex].append(
 6324|      0|                "int gl_InstanceID;"          // needs qualifier fixed later
 6325|      0|                );
 6326|     99|        if (spvVersion.vulkan > 0 && version >= 140)
  ------------------
  |  Branch (6326:13): [True: 99, False: 0]
  |  Branch (6326:38): [True: 99, False: 0]
  ------------------
 6327|     99|            stageBuiltins[EShLangVertex].append(
 6328|     99|                "in int gl_VertexIndex;"
 6329|     99|                "in int gl_InstanceIndex;"
 6330|     99|                );
 6331|       |
 6332|     99|        if (spvVersion.vulkan > 0 && version >= 140 && spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (6332:13): [True: 99, False: 0]
  |  Branch (6332:38): [True: 99, False: 0]
  |  Branch (6332:56): [True: 0, False: 99]
  ------------------
 6333|      0|            stageBuiltins[EShLangVertex].append(
 6334|      0|                "in int gl_VertexID;"         // declare with 'in' qualifier
 6335|      0|                "in int gl_InstanceID;"
 6336|      0|                );
 6337|       |
 6338|     99|        if (version >= 440) {
  ------------------
  |  Branch (6338:13): [True: 10, False: 89]
  ------------------
 6339|     10|            stageBuiltins[EShLangVertex].append(
 6340|     10|                "in int gl_BaseVertexARB;"
 6341|     10|                "in int gl_BaseInstanceARB;"
 6342|     10|                "in int gl_DrawIDARB;"
 6343|     10|                );
 6344|     10|        }
 6345|     99|        if (version >= 410) {
  ------------------
  |  Branch (6345:13): [True: 10, False: 89]
  ------------------
 6346|     10|            stageBuiltins[EShLangVertex].append(
 6347|     10|                "out int gl_ViewportIndex;"
 6348|     10|                "out int gl_Layer;"
 6349|     10|                );
 6350|     10|        }
 6351|     99|        if (version >= 460) {
  ------------------
  |  Branch (6351:13): [True: 0, False: 99]
  ------------------
 6352|      0|            stageBuiltins[EShLangVertex].append(
 6353|      0|                "in int gl_BaseVertex;"
 6354|      0|                "in int gl_BaseInstance;"
 6355|      0|                "in int gl_DrawID;"
 6356|      0|                );
 6357|      0|        }
 6358|       |
 6359|     99|        if (version >= 430)
  ------------------
  |  Branch (6359:13): [True: 10, False: 89]
  ------------------
 6360|     10|            stageBuiltins[EShLangVertex].append(
 6361|     10|                "out int gl_ViewportMask[];"             // GL_NV_viewport_array2
 6362|     10|                );
 6363|       |
 6364|     99|        if (version >= 450)
  ------------------
  |  Branch (6364:13): [True: 10, False: 89]
  ------------------
 6365|     10|            stageBuiltins[EShLangVertex].append(
 6366|     10|                "out int gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
 6367|     10|                "out vec4 gl_SecondaryPositionNV;"       // GL_NV_stereo_view_rendering
 6368|     10|                "out vec4 gl_PositionPerViewNV[];"       // GL_NVX_multiview_per_view_attributes
 6369|     10|                "out int  gl_ViewportMaskPerViewNV[];"   // GL_NVX_multiview_per_view_attributes
 6370|     10|                );
 6371|     99|    } else {
 6372|       |        // ES profile
 6373|      0|        if (version == 100) {
  ------------------
  |  Branch (6373:13): [True: 0, False: 0]
  ------------------
 6374|      0|            stageBuiltins[EShLangVertex].append(
 6375|      0|                "highp   vec4  gl_Position;"  // needs qualifier fixed later
 6376|      0|                "mediump float gl_PointSize;" // needs qualifier fixed later
 6377|      0|                "highp int gl_InstanceID;" // needs qualifier fixed later
 6378|      0|                );
 6379|      0|        } else {
 6380|      0|            if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (6380:17): [True: 0, False: 0]
  |  Branch (6380:43): [True: 0, False: 0]
  ------------------
 6381|      0|                stageBuiltins[EShLangVertex].append(
 6382|      0|                    "in highp int gl_VertexID;"      // needs qualifier fixed later
 6383|      0|                    "in highp int gl_InstanceID;"    // needs qualifier fixed later
 6384|      0|                    );
 6385|      0|            if (spvVersion.vulkan > 0)
  ------------------
  |  Branch (6385:17): [True: 0, False: 0]
  ------------------
 6386|      0|                stageBuiltins[EShLangVertex].append(
 6387|      0|                    "in highp int gl_VertexIndex;"
 6388|      0|                    "in highp int gl_InstanceIndex;"
 6389|      0|                    );
 6390|      0|            if (version < 310)
  ------------------
  |  Branch (6390:17): [True: 0, False: 0]
  ------------------
 6391|      0|                stageBuiltins[EShLangVertex].append(
 6392|      0|                    "highp vec4  gl_Position;"    // needs qualifier fixed later
 6393|      0|                    "highp float gl_PointSize;"   // needs qualifier fixed later
 6394|      0|                    );
 6395|      0|            else
 6396|      0|                stageBuiltins[EShLangVertex].append(
 6397|      0|                    "out gl_PerVertex {"
 6398|      0|                        "highp vec4  gl_Position;"    // needs qualifier fixed later
 6399|      0|                        "highp float gl_PointSize;"   // needs qualifier fixed later
 6400|      0|                    "};"
 6401|      0|                    );
 6402|      0|        }
 6403|      0|    }
 6404|       |
 6405|     99|    if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (6405:10): [True: 99, False: 0]
  |  Branch (6405:35): [True: 99, False: 0]
  ------------------
 6406|     99|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6406:10): [True: 0, False: 0]
  |  Branch (6406:35): [True: 0, False: 0]
  ------------------
 6407|     99|        stageBuiltins[EShLangVertex].append(
 6408|     99|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6409|     99|            "in highp int gl_ViewIndex;"       // GL_EXT_multiview
 6410|     99|            "\n");
 6411|     99|    }
 6412|       |
 6413|     99|    if (version >= 300 /* both ES and non-ES */) {
  ------------------
  |  Branch (6413:9): [True: 12, False: 87]
  ------------------
 6414|     12|        stageBuiltins[EShLangVertex].append(
 6415|     12|            "in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
 6416|     12|            "\n");
 6417|     12|    }
 6418|       |
 6419|     99|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6419:10): [True: 99, False: 0]
  |  Branch (6419:35): [True: 10, False: 89]
  |  Branch (6419:55): [True: 0, False: 89]
  |  Branch (6419:80): [True: 0, False: 0]
  ------------------
 6420|     10|        stageBuiltins[EShLangVertex].append(
 6421|     10|            "out highp int gl_PrimitiveShadingRateEXT;" // GL_EXT_fragment_shading_rate
 6422|     10|            "\n");
 6423|     10|    }
 6424|       |
 6425|       |    //============================================================================
 6426|       |    //
 6427|       |    // Define the interface to the geometry shader.
 6428|       |    //
 6429|       |    //============================================================================
 6430|       |
 6431|     99|    if (profile == ECoreProfile || profile == ECompatibilityProfile) {
  ------------------
  |  Branch (6431:9): [True: 8, False: 91]
  |  Branch (6431:36): [True: 0, False: 91]
  ------------------
 6432|      8|        stageBuiltins[EShLangGeometry].append(
 6433|      8|            "in gl_PerVertex {"
 6434|      8|                "vec4 gl_Position;"
 6435|      8|                "float gl_PointSize;"
 6436|      8|                "float gl_ClipDistance[];"
 6437|      8|                );
 6438|      8|        if (profile == ECompatibilityProfile)
  ------------------
  |  Branch (6438:13): [True: 0, False: 8]
  ------------------
 6439|      0|            stageBuiltins[EShLangGeometry].append(
 6440|      0|                "vec4 gl_ClipVertex;"
 6441|      0|                "vec4 gl_FrontColor;"
 6442|      0|                "vec4 gl_BackColor;"
 6443|      0|                "vec4 gl_FrontSecondaryColor;"
 6444|      0|                "vec4 gl_BackSecondaryColor;"
 6445|      0|                "vec4 gl_TexCoord[];"
 6446|      0|                "float gl_FogFragCoord;"
 6447|      0|                );
 6448|      8|        if (version >= 450)
  ------------------
  |  Branch (6448:13): [True: 5, False: 3]
  ------------------
 6449|      5|            stageBuiltins[EShLangGeometry].append(
 6450|      5|                "float gl_CullDistance[];"
 6451|      5|                "vec4 gl_SecondaryPositionNV;"   // GL_NV_stereo_view_rendering
 6452|      5|                "vec4 gl_PositionPerViewNV[];"   // GL_NVX_multiview_per_view_attributes
 6453|      5|                );
 6454|      8|        stageBuiltins[EShLangGeometry].append(
 6455|      8|            "} gl_in[];"
 6456|       |
 6457|      8|            "in int gl_PrimitiveIDIn;"
 6458|      8|            "out gl_PerVertex {"
 6459|      8|                "vec4 gl_Position;"
 6460|      8|                "float gl_PointSize;"
 6461|      8|                "float gl_ClipDistance[];"
 6462|      8|                "\n");
 6463|      8|        if (profile == ECompatibilityProfile && version >= 400)
  ------------------
  |  Branch (6463:13): [True: 0, False: 8]
  |  Branch (6463:49): [True: 0, False: 0]
  ------------------
 6464|      0|            stageBuiltins[EShLangGeometry].append(
 6465|      0|                "vec4 gl_ClipVertex;"
 6466|      0|                "vec4 gl_FrontColor;"
 6467|      0|                "vec4 gl_BackColor;"
 6468|      0|                "vec4 gl_FrontSecondaryColor;"
 6469|      0|                "vec4 gl_BackSecondaryColor;"
 6470|      0|                "vec4 gl_TexCoord[];"
 6471|      0|                "float gl_FogFragCoord;"
 6472|      0|                );
 6473|      8|        if (version >= 450)
  ------------------
  |  Branch (6473:13): [True: 5, False: 3]
  ------------------
 6474|      5|            stageBuiltins[EShLangGeometry].append(
 6475|      5|                "float gl_CullDistance[];"
 6476|      5|                );
 6477|      8|        stageBuiltins[EShLangGeometry].append(
 6478|      8|            "};"
 6479|       |
 6480|      8|            "out int gl_PrimitiveID;"
 6481|      8|            "out int gl_Layer;");
 6482|       |
 6483|      8|        if (version >= 150)
  ------------------
  |  Branch (6483:13): [True: 8, False: 0]
  ------------------
 6484|      8|            stageBuiltins[EShLangGeometry].append(
 6485|      8|            "out int gl_ViewportIndex;"
 6486|      8|            );
 6487|       |
 6488|      8|        if (profile == ECompatibilityProfile && version < 400)
  ------------------
  |  Branch (6488:13): [True: 0, False: 8]
  |  Branch (6488:49): [True: 0, False: 0]
  ------------------
 6489|      0|            stageBuiltins[EShLangGeometry].append(
 6490|      0|            "out vec4 gl_ClipVertex;"
 6491|      0|            );
 6492|       |
 6493|      8|        if (version >= 150)
  ------------------
  |  Branch (6493:13): [True: 8, False: 0]
  ------------------
 6494|      8|            stageBuiltins[EShLangGeometry].append(
 6495|      8|            "in int gl_InvocationID;"
 6496|      8|            );
 6497|       |
 6498|      8|        if (version >= 430)
  ------------------
  |  Branch (6498:13): [True: 5, False: 3]
  ------------------
 6499|      5|            stageBuiltins[EShLangGeometry].append(
 6500|      5|                "out int gl_ViewportMask[];"               // GL_NV_viewport_array2
 6501|      5|            );
 6502|       |
 6503|      8|        if (version >= 450)
  ------------------
  |  Branch (6503:13): [True: 5, False: 3]
  ------------------
 6504|      5|            stageBuiltins[EShLangGeometry].append(
 6505|      5|                "out int gl_SecondaryViewportMaskNV[];"    // GL_NV_stereo_view_rendering
 6506|      5|                "out vec4 gl_SecondaryPositionNV;"         // GL_NV_stereo_view_rendering
 6507|      5|                "out vec4 gl_PositionPerViewNV[];"         // GL_NVX_multiview_per_view_attributes
 6508|      5|                "out int  gl_ViewportMaskPerViewNV[];"     // GL_NVX_multiview_per_view_attributes
 6509|      5|            );
 6510|       |
 6511|      8|        stageBuiltins[EShLangGeometry].append("\n");
 6512|     91|    } else if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (6512:16): [True: 0, False: 91]
  |  Branch (6512:41): [True: 0, False: 0]
  ------------------
 6513|      0|        stageBuiltins[EShLangGeometry].append(
 6514|      0|            "in gl_PerVertex {"
 6515|      0|                "highp vec4 gl_Position;"
 6516|      0|                "highp float gl_PointSize;"
 6517|      0|            "} gl_in[];"
 6518|      0|            "\n"
 6519|      0|            "in highp int gl_PrimitiveIDIn;"
 6520|      0|            "in highp int gl_InvocationID;"
 6521|      0|            "\n"
 6522|      0|            "out gl_PerVertex {"
 6523|      0|                "highp vec4 gl_Position;"
 6524|      0|                "highp float gl_PointSize;"
 6525|      0|            "};"
 6526|      0|            "\n"
 6527|      0|            "out highp int gl_PrimitiveID;"
 6528|      0|            "out highp int gl_Layer;"
 6529|      0|            "\n"
 6530|      0|            );
 6531|      0|    }
 6532|       |
 6533|     99|    if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (6533:10): [True: 99, False: 0]
  |  Branch (6533:35): [True: 99, False: 0]
  ------------------
 6534|     99|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6534:10): [True: 0, False: 0]
  |  Branch (6534:35): [True: 0, False: 0]
  ------------------
 6535|     99|        stageBuiltins[EShLangGeometry].append(
 6536|     99|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6537|     99|            "in highp int gl_ViewIndex;"       // GL_EXT_multiview
 6538|     99|            "\n");
 6539|     99|    }
 6540|       |
 6541|     99|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6541:10): [True: 99, False: 0]
  |  Branch (6541:35): [True: 10, False: 89]
  |  Branch (6541:55): [True: 0, False: 89]
  |  Branch (6541:80): [True: 0, False: 0]
  ------------------
 6542|     10|        stageBuiltins[EShLangGeometry].append(
 6543|     10|            "out highp int gl_PrimitiveShadingRateEXT;" // GL_EXT_fragment_shading_rate
 6544|     10|            "\n");
 6545|     10|    }
 6546|       |
 6547|       |    //============================================================================
 6548|       |    //
 6549|       |    // Define the interface to the tessellation control shader.
 6550|       |    //
 6551|       |    //============================================================================
 6552|       |
 6553|     99|    if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (6553:9): [True: 99, False: 0]
  |  Branch (6553:34): [True: 13, False: 86]
  ------------------
 6554|       |        // Note:  "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below,
 6555|       |        // as it depends on the resource sizing of gl_MaxPatchVertices.
 6556|       |
 6557|     13|        stageBuiltins[EShLangTessControl].append(
 6558|     13|            "in int gl_PatchVerticesIn;"
 6559|     13|            "in int gl_PrimitiveID;"
 6560|     13|            "in int gl_InvocationID;"
 6561|       |
 6562|     13|            "out gl_PerVertex {"
 6563|     13|                "vec4 gl_Position;"
 6564|     13|                "float gl_PointSize;"
 6565|     13|                "float gl_ClipDistance[];"
 6566|     13|                );
 6567|     13|        if (profile == ECompatibilityProfile)
  ------------------
  |  Branch (6567:13): [True: 0, False: 13]
  ------------------
 6568|      0|            stageBuiltins[EShLangTessControl].append(
 6569|      0|                "vec4 gl_ClipVertex;"
 6570|      0|                "vec4 gl_FrontColor;"
 6571|      0|                "vec4 gl_BackColor;"
 6572|      0|                "vec4 gl_FrontSecondaryColor;"
 6573|      0|                "vec4 gl_BackSecondaryColor;"
 6574|      0|                "vec4 gl_TexCoord[];"
 6575|      0|                "float gl_FogFragCoord;"
 6576|      0|                );
 6577|     13|        if (version >= 450)
  ------------------
  |  Branch (6577:13): [True: 10, False: 3]
  ------------------
 6578|     10|            stageBuiltins[EShLangTessControl].append(
 6579|     10|                "float gl_CullDistance[];"
 6580|     10|            );
 6581|     13|        if (version >= 430)
  ------------------
  |  Branch (6581:13): [True: 10, False: 3]
  ------------------
 6582|     10|            stageBuiltins[EShLangTessControl].append(
 6583|     10|                "int  gl_ViewportMask[];"             // GL_NV_viewport_array2
 6584|     10|            );
 6585|     13|        if (version >= 450)
  ------------------
  |  Branch (6585:13): [True: 10, False: 3]
  ------------------
 6586|     10|            stageBuiltins[EShLangTessControl].append(
 6587|     10|                "vec4 gl_SecondaryPositionNV;"        // GL_NV_stereo_view_rendering
 6588|     10|                "int  gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
 6589|     10|                "vec4 gl_PositionPerViewNV[];"        // GL_NVX_multiview_per_view_attributes
 6590|     10|                "int  gl_ViewportMaskPerViewNV[];"    // GL_NVX_multiview_per_view_attributes
 6591|     10|                );
 6592|     13|        stageBuiltins[EShLangTessControl].append(
 6593|     13|            "} gl_out[];"
 6594|       |
 6595|     13|            "patch out float gl_TessLevelOuter[4];"
 6596|     13|            "patch out float gl_TessLevelInner[2];"
 6597|     13|            "\n");
 6598|       |
 6599|     13|        if (version >= 410)
  ------------------
  |  Branch (6599:13): [True: 10, False: 3]
  ------------------
 6600|     10|            stageBuiltins[EShLangTessControl].append(
 6601|     10|                "out int gl_ViewportIndex;"
 6602|     10|                "out int gl_Layer;"
 6603|     10|                "\n");
 6604|       |
 6605|     86|    } else {
 6606|       |        // Note:  "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below,
 6607|       |        // as it depends on the resource sizing of gl_MaxPatchVertices.
 6608|       |
 6609|     86|        stageBuiltins[EShLangTessControl].append(
 6610|     86|            "in highp int gl_PatchVerticesIn;"
 6611|     86|            "in highp int gl_PrimitiveID;"
 6612|     86|            "in highp int gl_InvocationID;"
 6613|       |
 6614|     86|            "out gl_PerVertex {"
 6615|     86|                "highp vec4 gl_Position;"
 6616|     86|                "highp float gl_PointSize;"
 6617|     86|                );
 6618|     86|        stageBuiltins[EShLangTessControl].append(
 6619|     86|            "} gl_out[];"
 6620|       |
 6621|     86|            "patch out highp float gl_TessLevelOuter[4];"
 6622|     86|            "patch out highp float gl_TessLevelInner[2];"
 6623|     86|            "patch out highp vec4 gl_BoundingBoxOES[2];"
 6624|     86|            "patch out highp vec4 gl_BoundingBoxEXT[2];"
 6625|     86|            "\n");
 6626|     86|        if (profile == EEsProfile && version >= 320) {
  ------------------
  |  Branch (6626:13): [True: 0, False: 86]
  |  Branch (6626:38): [True: 0, False: 0]
  ------------------
 6627|      0|            stageBuiltins[EShLangTessControl].append(
 6628|      0|                "patch out highp vec4 gl_BoundingBox[2];"
 6629|      0|                "\n"
 6630|      0|            );
 6631|      0|        }
 6632|     86|    }
 6633|       |
 6634|     99|    if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (6634:10): [True: 99, False: 0]
  |  Branch (6634:35): [True: 99, False: 0]
  ------------------
 6635|     99|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6635:10): [True: 0, False: 0]
  |  Branch (6635:35): [True: 0, False: 0]
  ------------------
 6636|     99|        stageBuiltins[EShLangTessControl].append(
 6637|     99|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6638|     99|            "in highp int gl_ViewIndex;"       // GL_EXT_multiview
 6639|     99|            "\n");
 6640|     99|    }
 6641|       |
 6642|       |    //============================================================================
 6643|       |    //
 6644|       |    // Define the interface to the tessellation evaluation shader.
 6645|       |    //
 6646|       |    //============================================================================
 6647|       |
 6648|     99|    if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (6648:9): [True: 99, False: 0]
  |  Branch (6648:34): [True: 13, False: 86]
  ------------------
 6649|       |        // Note:  "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below,
 6650|       |        // as it depends on the resource sizing of gl_MaxPatchVertices.
 6651|       |
 6652|     13|        stageBuiltins[EShLangTessEvaluation].append(
 6653|     13|            "in int gl_PatchVerticesIn;"
 6654|     13|            "in int gl_PrimitiveID;"
 6655|     13|            "in vec3 gl_TessCoord;"
 6656|       |
 6657|     13|            "patch in float gl_TessLevelOuter[4];"
 6658|     13|            "patch in float gl_TessLevelInner[2];"
 6659|       |
 6660|     13|            "out gl_PerVertex {"
 6661|     13|                "vec4 gl_Position;"
 6662|     13|                "float gl_PointSize;"
 6663|     13|                "float gl_ClipDistance[];"
 6664|     13|            );
 6665|     13|        if (version >= 400 && profile == ECompatibilityProfile)
  ------------------
  |  Branch (6665:13): [True: 12, False: 1]
  |  Branch (6665:31): [True: 0, False: 12]
  ------------------
 6666|      0|            stageBuiltins[EShLangTessEvaluation].append(
 6667|      0|                "vec4 gl_ClipVertex;"
 6668|      0|                "vec4 gl_FrontColor;"
 6669|      0|                "vec4 gl_BackColor;"
 6670|      0|                "vec4 gl_FrontSecondaryColor;"
 6671|      0|                "vec4 gl_BackSecondaryColor;"
 6672|      0|                "vec4 gl_TexCoord[];"
 6673|      0|                "float gl_FogFragCoord;"
 6674|      0|                );
 6675|     13|        if (version >= 450)
  ------------------
  |  Branch (6675:13): [True: 10, False: 3]
  ------------------
 6676|     10|            stageBuiltins[EShLangTessEvaluation].append(
 6677|     10|                "float gl_CullDistance[];"
 6678|     10|                );
 6679|     13|        stageBuiltins[EShLangTessEvaluation].append(
 6680|     13|            "};"
 6681|     13|            "\n");
 6682|       |
 6683|     13|        if (version >= 410)
  ------------------
  |  Branch (6683:13): [True: 10, False: 3]
  ------------------
 6684|     10|            stageBuiltins[EShLangTessEvaluation].append(
 6685|     10|                "out int gl_ViewportIndex;"
 6686|     10|                "out int gl_Layer;"
 6687|     10|                "\n");
 6688|       |
 6689|     13|        if (version >= 430)
  ------------------
  |  Branch (6689:13): [True: 10, False: 3]
  ------------------
 6690|     10|            stageBuiltins[EShLangTessEvaluation].append(
 6691|     10|                "out int  gl_ViewportMask[];"             // GL_NV_viewport_array2
 6692|     10|            );
 6693|       |
 6694|     13|        if (version >= 450)
  ------------------
  |  Branch (6694:13): [True: 10, False: 3]
  ------------------
 6695|     10|            stageBuiltins[EShLangTessEvaluation].append(
 6696|     10|                "out vec4 gl_SecondaryPositionNV;"        // GL_NV_stereo_view_rendering
 6697|     10|                "out int  gl_SecondaryViewportMaskNV[];"  // GL_NV_stereo_view_rendering
 6698|     10|                "out vec4 gl_PositionPerViewNV[];"        // GL_NVX_multiview_per_view_attributes
 6699|     10|                "out int  gl_ViewportMaskPerViewNV[];"    // GL_NVX_multiview_per_view_attributes
 6700|     10|                );
 6701|       |
 6702|     86|    } else if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (6702:16): [True: 0, False: 86]
  |  Branch (6702:41): [True: 0, False: 0]
  ------------------
 6703|       |        // Note:  "in gl_PerVertex {...} gl_in[gl_MaxPatchVertices];" is declared in initialize() below,
 6704|       |        // as it depends on the resource sizing of gl_MaxPatchVertices.
 6705|       |
 6706|      0|        stageBuiltins[EShLangTessEvaluation].append(
 6707|      0|            "in highp int gl_PatchVerticesIn;"
 6708|      0|            "in highp int gl_PrimitiveID;"
 6709|      0|            "in highp vec3 gl_TessCoord;"
 6710|       |
 6711|      0|            "patch in highp float gl_TessLevelOuter[4];"
 6712|      0|            "patch in highp float gl_TessLevelInner[2];"
 6713|       |
 6714|      0|            "out gl_PerVertex {"
 6715|      0|                "highp vec4 gl_Position;"
 6716|      0|                "highp float gl_PointSize;"
 6717|      0|            );
 6718|      0|        stageBuiltins[EShLangTessEvaluation].append(
 6719|      0|            "};"
 6720|      0|            "\n");
 6721|      0|    }
 6722|       |
 6723|     99|    if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (6723:10): [True: 99, False: 0]
  |  Branch (6723:35): [True: 99, False: 0]
  ------------------
 6724|     99|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6724:10): [True: 0, False: 0]
  |  Branch (6724:35): [True: 0, False: 0]
  ------------------
 6725|     99|        stageBuiltins[EShLangTessEvaluation].append(
 6726|     99|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6727|     99|            "in highp int gl_ViewIndex;"       // GL_EXT_multiview
 6728|     99|            "\n");
 6729|     99|    }
 6730|       |
 6731|       |    //============================================================================
 6732|       |    //
 6733|       |    // Define the interface to the fragment shader.
 6734|       |    //
 6735|       |    //============================================================================
 6736|       |
 6737|     99|    if (profile != EEsProfile) {
  ------------------
  |  Branch (6737:9): [True: 99, False: 0]
  ------------------
 6738|       |
 6739|     99|        stageBuiltins[EShLangFragment].append(
 6740|     99|            "vec4  gl_FragCoord;"   // needs qualifier fixed later
 6741|     99|            "bool  gl_FrontFacing;" // needs qualifier fixed later
 6742|     99|            "float gl_FragDepth;"   // needs qualifier fixed later
 6743|     99|            );
 6744|     99|        if (version >= 120)
  ------------------
  |  Branch (6744:13): [True: 99, False: 0]
  ------------------
 6745|     99|            stageBuiltins[EShLangFragment].append(
 6746|     99|                "vec2 gl_PointCoord;"  // needs qualifier fixed later
 6747|     99|                );
 6748|     99|        if (version >= 140)
  ------------------
  |  Branch (6748:13): [True: 99, False: 0]
  ------------------
 6749|     99|            stageBuiltins[EShLangFragment].append(
 6750|     99|                "out int gl_FragStencilRefARB;"
 6751|     99|                );
 6752|     99|        if (IncludeLegacy(version, profile, spvVersion) || (! ForwardCompatibility && version < 420))
  ------------------
  |  Branch (6752:13): [True: 0, False: 99]
  |  Branch (6752:61): [True: 99, Folded]
  |  Branch (6752:87): [True: 89, False: 10]
  ------------------
 6753|     89|            stageBuiltins[EShLangFragment].append(
 6754|     89|                "vec4 gl_FragColor;"   // needs qualifier fixed later
 6755|     89|                );
 6756|       |
 6757|     99|        if (version < 130) {
  ------------------
  |  Branch (6757:13): [True: 0, False: 99]
  ------------------
 6758|      0|            stageBuiltins[EShLangFragment].append(
 6759|      0|                "varying vec4  gl_Color;"
 6760|      0|                "varying vec4  gl_SecondaryColor;"
 6761|      0|                "varying vec4  gl_TexCoord[];"
 6762|      0|                "varying float gl_FogFragCoord;"
 6763|      0|                );
 6764|     99|        } else {
 6765|     99|            stageBuiltins[EShLangFragment].append(
 6766|     99|                "in float gl_ClipDistance[];"
 6767|     99|                );
 6768|       |
 6769|     99|            if (IncludeLegacy(version, profile, spvVersion)) {
  ------------------
  |  Branch (6769:17): [True: 0, False: 99]
  ------------------
 6770|      0|                if (version < 150)
  ------------------
  |  Branch (6770:21): [True: 0, False: 0]
  ------------------
 6771|      0|                    stageBuiltins[EShLangFragment].append(
 6772|      0|                        "in float gl_FogFragCoord;"
 6773|      0|                        "in vec4  gl_TexCoord[];"
 6774|      0|                        "in vec4  gl_Color;"
 6775|      0|                        "in vec4  gl_SecondaryColor;"
 6776|      0|                        );
 6777|      0|                else
 6778|      0|                    stageBuiltins[EShLangFragment].append(
 6779|      0|                        "in gl_PerFragment {"
 6780|      0|                            "in float gl_FogFragCoord;"
 6781|      0|                            "in vec4  gl_TexCoord[];"
 6782|      0|                            "in vec4  gl_Color;"
 6783|      0|                            "in vec4  gl_SecondaryColor;"
 6784|      0|                        "};"
 6785|      0|                        );
 6786|      0|            }
 6787|     99|        }
 6788|       |
 6789|     99|        if (version >= 150)
  ------------------
  |  Branch (6789:13): [True: 13, False: 86]
  ------------------
 6790|     13|            stageBuiltins[EShLangFragment].append(
 6791|     13|                "flat in int gl_PrimitiveID;"
 6792|     13|                );
 6793|       |
 6794|     99|        if (version >= 130) { // ARB_sample_shading
  ------------------
  |  Branch (6794:13): [True: 99, False: 0]
  ------------------
 6795|     99|            stageBuiltins[EShLangFragment].append(
 6796|     99|                "flat in  int  gl_SampleID;"
 6797|     99|                "     in  vec2 gl_SamplePosition;"
 6798|     99|                "     out int  gl_SampleMask[];"
 6799|     99|                );
 6800|       |
 6801|     99|            if (spvVersion.spv == 0) {
  ------------------
  |  Branch (6801:17): [True: 0, False: 99]
  ------------------
 6802|      0|                stageBuiltins[EShLangFragment].append(
 6803|      0|                    "uniform int gl_NumSamples;"
 6804|      0|                );
 6805|      0|            }
 6806|     99|        }
 6807|       |
 6808|     99|        if (version >= 150)
  ------------------
  |  Branch (6808:13): [True: 13, False: 86]
  ------------------
 6809|     13|            stageBuiltins[EShLangFragment].append(
 6810|     13|                "flat in  int  gl_SampleMaskIn[];"
 6811|     13|            );
 6812|       |
 6813|     99|        if (version >= 430)
  ------------------
  |  Branch (6813:13): [True: 10, False: 89]
  ------------------
 6814|     10|            stageBuiltins[EShLangFragment].append(
 6815|     10|                "flat in int gl_Layer;"
 6816|     10|                "flat in int gl_ViewportIndex;"
 6817|     10|                );
 6818|       |
 6819|     99|        if (version >= 450)
  ------------------
  |  Branch (6819:13): [True: 10, False: 89]
  ------------------
 6820|     10|            stageBuiltins[EShLangFragment].append(
 6821|     10|                "in float gl_CullDistance[];"
 6822|     10|                "bool gl_HelperInvocation;"     // needs qualifier fixed later
 6823|     10|                );
 6824|       |
 6825|     99|        if (version >= 450)
  ------------------
  |  Branch (6825:13): [True: 10, False: 89]
  ------------------
 6826|     10|            stageBuiltins[EShLangFragment].append( // GL_EXT_fragment_invocation_density
 6827|     10|                "flat in ivec2 gl_FragSizeEXT;"
 6828|     10|                "flat in int   gl_FragInvocationCountEXT;"
 6829|     10|                );
 6830|       |
 6831|     99|        if (version >= 450)
  ------------------
  |  Branch (6831:13): [True: 10, False: 89]
  ------------------
 6832|     10|            stageBuiltins[EShLangFragment].append(
 6833|     10|                "in vec2 gl_BaryCoordNoPerspAMD;"
 6834|     10|                "in vec2 gl_BaryCoordNoPerspCentroidAMD;"
 6835|     10|                "in vec2 gl_BaryCoordNoPerspSampleAMD;"
 6836|     10|                "in vec2 gl_BaryCoordSmoothAMD;"
 6837|     10|                "in vec2 gl_BaryCoordSmoothCentroidAMD;"
 6838|     10|                "in vec2 gl_BaryCoordSmoothSampleAMD;"
 6839|     10|                "in vec3 gl_BaryCoordPullModelAMD;"
 6840|     10|                );
 6841|       |
 6842|     99|        if (version >= 430)
  ------------------
  |  Branch (6842:13): [True: 10, False: 89]
  ------------------
 6843|     10|            stageBuiltins[EShLangFragment].append(
 6844|     10|                "in bool gl_FragFullyCoveredNV;"
 6845|     10|                );
 6846|     99|        if (version >= 450)
  ------------------
  |  Branch (6846:13): [True: 10, False: 89]
  ------------------
 6847|     10|            stageBuiltins[EShLangFragment].append(
 6848|     10|                "flat in ivec2 gl_FragmentSizeNV;"          // GL_NV_shading_rate_image
 6849|     10|                "flat in int   gl_InvocationsPerPixelNV;"
 6850|     10|                "in vec3 gl_BaryCoordNV;"                   // GL_NV_fragment_shader_barycentric
 6851|     10|                "in vec3 gl_BaryCoordNoPerspNV;"
 6852|     10|                "in vec3 gl_BaryCoordEXT;"                  // GL_EXT_fragment_shader_barycentric
 6853|     10|                "in vec3 gl_BaryCoordNoPerspEXT;"
 6854|     10|                );
 6855|       |
 6856|     99|        if (version >= 450)
  ------------------
  |  Branch (6856:13): [True: 10, False: 89]
  ------------------
 6857|     10|            stageBuiltins[EShLangFragment].append(
 6858|     10|                "flat in int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate
 6859|     10|            );
 6860|       |
 6861|     99|    } else {
 6862|       |        // ES profile
 6863|       |
 6864|      0|        if (version == 100) {
  ------------------
  |  Branch (6864:13): [True: 0, False: 0]
  ------------------
 6865|      0|            stageBuiltins[EShLangFragment].append(
 6866|      0|                "mediump vec4 gl_FragCoord;"    // needs qualifier fixed later
 6867|      0|                "        bool gl_FrontFacing;"  // needs qualifier fixed later
 6868|      0|                "mediump vec4 gl_FragColor;"    // needs qualifier fixed later
 6869|      0|                "mediump vec2 gl_PointCoord;"   // needs qualifier fixed later
 6870|      0|                );
 6871|      0|        }
 6872|      0|        if (version >= 300) {
  ------------------
  |  Branch (6872:13): [True: 0, False: 0]
  ------------------
 6873|      0|            stageBuiltins[EShLangFragment].append(
 6874|      0|                "highp   vec4  gl_FragCoord;"    // needs qualifier fixed later
 6875|      0|                "        bool  gl_FrontFacing;"  // needs qualifier fixed later
 6876|      0|                "mediump vec2  gl_PointCoord;"   // needs qualifier fixed later
 6877|      0|                "highp   float gl_FragDepth;"    // needs qualifier fixed later
 6878|      0|                );
 6879|      0|        }
 6880|      0|        if (version >= 310) {
  ------------------
  |  Branch (6880:13): [True: 0, False: 0]
  ------------------
 6881|      0|            stageBuiltins[EShLangFragment].append(
 6882|      0|                "bool gl_HelperInvocation;"          // needs qualifier fixed later
 6883|      0|                "flat in highp int gl_PrimitiveID;"  // needs qualifier fixed later
 6884|      0|                "flat in highp int gl_Layer;"        // needs qualifier fixed later
 6885|      0|                );
 6886|       |
 6887|      0|            stageBuiltins[EShLangFragment].append(  // GL_OES_sample_variables
 6888|      0|                "flat  in lowp     int gl_SampleID;"
 6889|      0|                "      in mediump vec2 gl_SamplePosition;"
 6890|      0|                "flat  in highp    int gl_SampleMaskIn[];"
 6891|      0|                "     out highp    int gl_SampleMask[];"
 6892|      0|                );
 6893|      0|            if (spvVersion.spv == 0)
  ------------------
  |  Branch (6893:17): [True: 0, False: 0]
  ------------------
 6894|      0|                stageBuiltins[EShLangFragment].append(  // GL_OES_sample_variables
 6895|      0|                    "uniform lowp int gl_NumSamples;"
 6896|      0|                    );
 6897|      0|        }
 6898|      0|        stageBuiltins[EShLangFragment].append(
 6899|      0|            "highp float gl_FragDepthEXT;"       // GL_EXT_frag_depth
 6900|      0|            );
 6901|       |
 6902|      0|        if (version >= 310)
  ------------------
  |  Branch (6902:13): [True: 0, False: 0]
  ------------------
 6903|      0|            stageBuiltins[EShLangFragment].append( // GL_EXT_fragment_invocation_density
 6904|      0|                "flat in ivec2 gl_FragSizeEXT;"
 6905|      0|                "flat in int   gl_FragInvocationCountEXT;"
 6906|      0|            );
 6907|      0|        if (version >= 320)
  ------------------
  |  Branch (6907:13): [True: 0, False: 0]
  ------------------
 6908|      0|            stageBuiltins[EShLangFragment].append( // GL_NV_shading_rate_image
 6909|      0|                "flat in ivec2 gl_FragmentSizeNV;"
 6910|      0|                "flat in int   gl_InvocationsPerPixelNV;"
 6911|      0|            );
 6912|      0|        if (version >= 320)
  ------------------
  |  Branch (6912:13): [True: 0, False: 0]
  ------------------
 6913|      0|            stageBuiltins[EShLangFragment].append(
 6914|      0|                "in vec3 gl_BaryCoordNV;"
 6915|      0|                "in vec3 gl_BaryCoordNoPerspNV;"
 6916|      0|                "in vec3 gl_BaryCoordEXT;"
 6917|      0|                "in vec3 gl_BaryCoordNoPerspEXT;"
 6918|      0|            );
 6919|      0|        if (version >= 310)
  ------------------
  |  Branch (6919:13): [True: 0, False: 0]
  ------------------
 6920|      0|            stageBuiltins[EShLangFragment].append(
 6921|      0|                "flat in highp int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate
 6922|      0|            );
 6923|      0|    }
 6924|       |
 6925|     99|    stageBuiltins[EShLangFragment].append("\n");
 6926|       |
 6927|     99|    if (version >= 130)
  ------------------
  |  Branch (6927:9): [True: 99, False: 0]
  ------------------
 6928|     99|        add2ndGenerationSamplingImaging(version, profile, spvVersion);
 6929|       |
 6930|     99|    if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (6930:10): [True: 99, False: 0]
  |  Branch (6930:35): [True: 99, False: 0]
  ------------------
 6931|     99|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (6931:10): [True: 0, False: 0]
  |  Branch (6931:35): [True: 0, False: 0]
  ------------------
 6932|     99|        stageBuiltins[EShLangFragment].append(
 6933|     99|            "flat in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 6934|     99|            "flat in highp int gl_ViewIndex;"       // GL_EXT_multiview
 6935|     99|            "\n");
 6936|     99|    }
 6937|       |
 6938|     99|    if (version >= 300 /* both ES and non-ES */) {
  ------------------
  |  Branch (6938:9): [True: 12, False: 87]
  ------------------
 6939|     12|        stageBuiltins[EShLangFragment].append(
 6940|     12|            "flat in highp uint gl_ViewID_OVR;"     // GL_OVR_multiview, GL_OVR_multiview2
 6941|     12|            "\n");
 6942|     12|    }
 6943|       |    
 6944|       |    // GL_QCOM_tile_shading
 6945|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (6945:10): [True: 0, False: 99]
  |  Branch (6945:35): [True: 0, False: 0]
  ------------------
 6946|     99|        (profile != EEsProfile && version >= 460)) {
  ------------------
  |  Branch (6946:10): [True: 99, False: 0]
  |  Branch (6946:35): [True: 0, False: 99]
  ------------------
 6947|      0|        stageBuiltins[EShLangFragment].append(
 6948|      0|            "flat in highp uvec2 gl_TileOffsetQCOM;"     // GL_QCOM_tile_shading
 6949|      0|            "flat in highp uvec3 gl_TileDimensionQCOM;"  // GL_QCOM_tile_shading
 6950|      0|            "flat in highp uvec2 gl_TileApronSizeQCOM;"  // GL_QCOM_tile_shading
 6951|      0|            "\n");
 6952|      0|    }
 6953|       |
 6954|       |    // GL_ARB_shader_ballot
 6955|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (6955:9): [True: 99, False: 0]
  |  Branch (6955:34): [True: 10, False: 89]
  ------------------
 6956|     10|        const char* ballotDecls =
 6957|     10|            "uniform uint gl_SubGroupSizeARB;"
 6958|     10|            "in uint     gl_SubGroupInvocationARB;"
 6959|     10|            "in uint64_t gl_SubGroupEqMaskARB;"
 6960|     10|            "in uint64_t gl_SubGroupGeMaskARB;"
 6961|     10|            "in uint64_t gl_SubGroupGtMaskARB;"
 6962|     10|            "in uint64_t gl_SubGroupLeMaskARB;"
 6963|     10|            "in uint64_t gl_SubGroupLtMaskARB;"
 6964|     10|            "\n";
 6965|     10|        const char* rtBallotDecls =
 6966|     10|            "uniform volatile uint gl_SubGroupSizeARB;"
 6967|     10|            "in volatile uint     gl_SubGroupInvocationARB;"
 6968|     10|            "in volatile uint64_t gl_SubGroupEqMaskARB;"
 6969|     10|            "in volatile uint64_t gl_SubGroupGeMaskARB;"
 6970|     10|            "in volatile uint64_t gl_SubGroupGtMaskARB;"
 6971|     10|            "in volatile uint64_t gl_SubGroupLeMaskARB;"
 6972|     10|            "in volatile uint64_t gl_SubGroupLtMaskARB;"
 6973|     10|            "\n";
 6974|     10|        const char* fragmentBallotDecls =
 6975|     10|            "uniform uint gl_SubGroupSizeARB;"
 6976|     10|            "flat in uint     gl_SubGroupInvocationARB;"
 6977|     10|            "flat in uint64_t gl_SubGroupEqMaskARB;"
 6978|     10|            "flat in uint64_t gl_SubGroupGeMaskARB;"
 6979|     10|            "flat in uint64_t gl_SubGroupGtMaskARB;"
 6980|     10|            "flat in uint64_t gl_SubGroupLeMaskARB;"
 6981|     10|            "flat in uint64_t gl_SubGroupLtMaskARB;"
 6982|     10|            "\n";
 6983|     10|        stageBuiltins[EShLangVertex]        .append(ballotDecls);
 6984|     10|        stageBuiltins[EShLangTessControl]   .append(ballotDecls);
 6985|     10|        stageBuiltins[EShLangTessEvaluation].append(ballotDecls);
 6986|     10|        stageBuiltins[EShLangGeometry]      .append(ballotDecls);
 6987|     10|        stageBuiltins[EShLangCompute]       .append(ballotDecls);
 6988|     10|        stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
 6989|     10|        stageBuiltins[EShLangMesh]        .append(ballotDecls);
 6990|     10|        stageBuiltins[EShLangTask]        .append(ballotDecls);
 6991|     10|        stageBuiltins[EShLangRayGen]        .append(rtBallotDecls);
 6992|     10|        stageBuiltins[EShLangIntersect]     .append(rtBallotDecls);
 6993|       |        // No volatile qualifier on these builtins in any-hit
 6994|     10|        stageBuiltins[EShLangAnyHit]        .append(ballotDecls);
 6995|     10|        stageBuiltins[EShLangClosestHit]    .append(rtBallotDecls);
 6996|     10|        stageBuiltins[EShLangMiss]          .append(rtBallotDecls);
 6997|     10|        stageBuiltins[EShLangCallable]      .append(rtBallotDecls);
 6998|     10|    }
 6999|       |
 7000|       |    // GL_KHR_shader_subgroup
 7001|     99|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (7001:10): [True: 0, False: 99]
  |  Branch (7001:35): [True: 0, False: 0]
  ------------------
 7002|     99|        (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (7002:10): [True: 99, False: 0]
  |  Branch (7002:35): [True: 99, False: 0]
  ------------------
 7003|     99|        const char* subgroupDecls =
 7004|     99|            "in mediump uint  gl_SubgroupSize;"
 7005|     99|            "in mediump uint  gl_SubgroupInvocationID;"
 7006|     99|            "in highp   uvec4 gl_SubgroupEqMask;"
 7007|     99|            "in highp   uvec4 gl_SubgroupGeMask;"
 7008|     99|            "in highp   uvec4 gl_SubgroupGtMask;"
 7009|     99|            "in highp   uvec4 gl_SubgroupLeMask;"
 7010|     99|            "in highp   uvec4 gl_SubgroupLtMask;"
 7011|       |            // GL_NV_shader_sm_builtins
 7012|     99|            "in highp   uint  gl_WarpsPerSMNV;"
 7013|     99|            "in highp   uint  gl_SMCountNV;"
 7014|     99|            "in highp   uint  gl_WarpIDNV;"
 7015|     99|            "in highp   uint  gl_SMIDNV;"
 7016|       |            // GL_ARM_shader_core_builtins
 7017|     99|            "in highp   uint  gl_CoreIDARM;"
 7018|     99|            "in highp   uint  gl_CoreCountARM;"
 7019|     99|            "in highp   uint  gl_CoreMaxIDARM;"
 7020|     99|            "in highp   uint  gl_WarpIDARM;"
 7021|     99|            "in highp   uint  gl_WarpMaxIDARM;"
 7022|     99|            "\n";
 7023|     99|        const char* fragmentSubgroupDecls =
 7024|     99|            "flat in mediump uint  gl_SubgroupSize;"
 7025|     99|            "flat in mediump uint  gl_SubgroupInvocationID;"
 7026|     99|            "flat in highp   uvec4 gl_SubgroupEqMask;"
 7027|     99|            "flat in highp   uvec4 gl_SubgroupGeMask;"
 7028|     99|            "flat in highp   uvec4 gl_SubgroupGtMask;"
 7029|     99|            "flat in highp   uvec4 gl_SubgroupLeMask;"
 7030|     99|            "flat in highp   uvec4 gl_SubgroupLtMask;"
 7031|       |            // GL_NV_shader_sm_builtins
 7032|     99|            "flat in highp   uint  gl_WarpsPerSMNV;"
 7033|     99|            "flat in highp   uint  gl_SMCountNV;"
 7034|     99|            "flat in highp   uint  gl_WarpIDNV;"
 7035|     99|            "flat in highp   uint  gl_SMIDNV;"
 7036|       |            // GL_ARM_shader_core_builtins
 7037|     99|            "flat in highp   uint  gl_CoreIDARM;"
 7038|     99|            "flat in highp   uint  gl_CoreCountARM;"
 7039|     99|            "flat in highp   uint  gl_CoreMaxIDARM;"
 7040|     99|            "flat in highp   uint  gl_WarpIDARM;"
 7041|     99|            "flat in highp   uint  gl_WarpMaxIDARM;"
 7042|     99|            "\n";
 7043|     99|        const char* computeSubgroupDecls =
 7044|     99|            "in highp   uint  gl_NumSubgroups;"
 7045|     99|            "in highp   uint  gl_SubgroupID;"
 7046|     99|            "\n";
 7047|       |        // These builtins are volatile for RT stages
 7048|     99|        const char* rtSubgroupDecls =
 7049|     99|            "in mediump volatile uint  gl_SubgroupSize;"
 7050|     99|            "in mediump volatile uint  gl_SubgroupInvocationID;"
 7051|     99|            "in highp   volatile uvec4 gl_SubgroupEqMask;"
 7052|     99|            "in highp   volatile uvec4 gl_SubgroupGeMask;"
 7053|     99|            "in highp   volatile uvec4 gl_SubgroupGtMask;"
 7054|     99|            "in highp   volatile uvec4 gl_SubgroupLeMask;"
 7055|     99|            "in highp   volatile uvec4 gl_SubgroupLtMask;"
 7056|       |            // GL_NV_shader_sm_builtins
 7057|     99|            "in highp    uint  gl_WarpsPerSMNV;"
 7058|     99|            "in highp    uint  gl_SMCountNV;"
 7059|     99|            "in highp volatile uint  gl_WarpIDNV;"
 7060|     99|            "in highp volatile uint  gl_SMIDNV;"
 7061|       |            // GL_ARM_shader_core_builtins
 7062|     99|            "in highp   uint  gl_CoreIDARM;"
 7063|     99|            "in highp   uint  gl_CoreCountARM;"
 7064|     99|            "in highp   uint  gl_CoreMaxIDARM;"
 7065|     99|            "in highp   uint  gl_WarpIDARM;"
 7066|     99|            "in highp   uint  gl_WarpMaxIDARM;"
 7067|     99|            "\n";
 7068|       |
 7069|     99|        stageBuiltins[EShLangVertex]        .append(subgroupDecls);
 7070|     99|        stageBuiltins[EShLangTessControl]   .append(subgroupDecls);
 7071|     99|        stageBuiltins[EShLangTessEvaluation].append(subgroupDecls);
 7072|     99|        stageBuiltins[EShLangGeometry]      .append(subgroupDecls);
 7073|     99|        stageBuiltins[EShLangCompute]       .append(subgroupDecls);
 7074|     99|        stageBuiltins[EShLangCompute]       .append(computeSubgroupDecls);
 7075|     99|        stageBuiltins[EShLangFragment]      .append(fragmentSubgroupDecls);
 7076|     99|        stageBuiltins[EShLangMesh]        .append(subgroupDecls);
 7077|     99|        stageBuiltins[EShLangMesh]        .append(computeSubgroupDecls);
 7078|     99|        stageBuiltins[EShLangTask]        .append(subgroupDecls);
 7079|     99|        stageBuiltins[EShLangTask]        .append(computeSubgroupDecls);
 7080|     99|        stageBuiltins[EShLangRayGen]        .append(rtSubgroupDecls);
 7081|     99|        stageBuiltins[EShLangIntersect]     .append(rtSubgroupDecls);
 7082|       |        // No volatile qualifier on these builtins in any-hit
 7083|     99|        stageBuiltins[EShLangAnyHit]        .append(subgroupDecls);
 7084|     99|        stageBuiltins[EShLangClosestHit]    .append(rtSubgroupDecls);
 7085|     99|        stageBuiltins[EShLangMiss]          .append(rtSubgroupDecls);
 7086|     99|        stageBuiltins[EShLangCallable]      .append(rtSubgroupDecls);
 7087|     99|    }
 7088|       |
 7089|       |    // GL_NV_ray_tracing/GL_EXT_ray_tracing
 7090|     99|    if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (7090:9): [True: 99, False: 0]
  |  Branch (7090:34): [True: 0, False: 99]
  ------------------
 7091|       |
 7092|      0|        const char *constRayFlags =
 7093|      0|            "const uint gl_RayFlagsNoneNV = 0U;"
 7094|      0|            "const uint gl_RayFlagsNoneEXT = 0U;"
 7095|      0|            "const uint gl_RayFlagsOpaqueNV = 1U;"
 7096|      0|            "const uint gl_RayFlagsOpaqueEXT = 1U;"
 7097|      0|            "const uint gl_RayFlagsNoOpaqueNV = 2U;"
 7098|      0|            "const uint gl_RayFlagsNoOpaqueEXT = 2U;"
 7099|      0|            "const uint gl_RayFlagsTerminateOnFirstHitNV = 4U;"
 7100|      0|            "const uint gl_RayFlagsTerminateOnFirstHitEXT = 4U;"
 7101|      0|            "const uint gl_RayFlagsSkipClosestHitShaderNV = 8U;"
 7102|      0|            "const uint gl_RayFlagsSkipClosestHitShaderEXT = 8U;"
 7103|      0|            "const uint gl_RayFlagsCullBackFacingTrianglesNV = 16U;"
 7104|      0|            "const uint gl_RayFlagsCullBackFacingTrianglesEXT = 16U;"
 7105|      0|            "const uint gl_RayFlagsCullFrontFacingTrianglesNV = 32U;"
 7106|      0|            "const uint gl_RayFlagsCullFrontFacingTrianglesEXT = 32U;"
 7107|      0|            "const uint gl_RayFlagsCullOpaqueNV = 64U;"
 7108|      0|            "const uint gl_RayFlagsCullOpaqueEXT = 64U;"
 7109|      0|            "const uint gl_RayFlagsCullNoOpaqueNV = 128U;"
 7110|      0|            "const uint gl_RayFlagsCullNoOpaqueEXT = 128U;"
 7111|      0|            "const uint gl_RayFlagsSkipTrianglesEXT = 256U;"
 7112|      0|            "const uint gl_RayFlagsSkipBuiltinPrimitivesNV = 256U;"
 7113|      0|            "const uint gl_RayFlagsSkipAABBEXT = 512U;"
 7114|      0|            "const uint gl_RayFlagsForceOpacityMicromap2StateEXT = 1024U;"
 7115|      0|            "const uint gl_HitKindFrontFacingTriangleEXT = 254U;"
 7116|      0|            "const uint gl_HitKindBackFacingTriangleEXT = 255U;"
 7117|      0|            "in    uint gl_HitKindFrontFacingMicroTriangleNV;"
 7118|      0|            "in    uint gl_HitKindBackFacingMicroTriangleNV;"
 7119|      0|            "const int  gl_ClusterIDNoneNV = -1;"
 7120|      0|            "\n";
 7121|       |
 7122|      0|        const char *constRayQueryIntersection =
 7123|      0|            "const uint gl_RayQueryCandidateIntersectionEXT = 0U;"
 7124|      0|            "const uint gl_RayQueryCommittedIntersectionEXT = 1U;"
 7125|      0|            "const uint gl_RayQueryCommittedIntersectionNoneEXT = 0U;"
 7126|      0|            "const uint gl_RayQueryCommittedIntersectionTriangleEXT = 1U;"
 7127|      0|            "const uint gl_RayQueryCommittedIntersectionGeneratedEXT = 2U;"
 7128|      0|            "const uint gl_RayQueryCandidateIntersectionTriangleEXT = 0U;"
 7129|      0|            "const uint gl_RayQueryCandidateIntersectionAABBEXT = 1U;"
 7130|      0|            "\n";
 7131|       |
 7132|      0|        const char *rayGenDecls =
 7133|      0|            "in    uvec3  gl_LaunchIDNV;"
 7134|      0|            "in    uvec3  gl_LaunchIDEXT;"
 7135|      0|            "in    uvec3  gl_LaunchSizeNV;"
 7136|      0|            "in    uvec3  gl_LaunchSizeEXT;"
 7137|      0|            "\n";
 7138|      0|        const char *intersectDecls =
 7139|      0|            "in    uvec3  gl_LaunchIDNV;"
 7140|      0|            "in    uvec3  gl_LaunchIDEXT;"
 7141|      0|            "in    uvec3  gl_LaunchSizeNV;"
 7142|      0|            "in    uvec3  gl_LaunchSizeEXT;"
 7143|      0|            "in     int   gl_PrimitiveID;"
 7144|      0|            "in     int   gl_InstanceID;"
 7145|      0|            "in     int   gl_InstanceCustomIndexNV;"
 7146|      0|            "in     int   gl_InstanceCustomIndexEXT;"
 7147|      0|            "in     int   gl_GeometryIndexEXT;"
 7148|      0|            "in    vec3   gl_WorldRayOriginNV;"
 7149|      0|            "in    vec3   gl_WorldRayOriginEXT;"
 7150|      0|            "in    vec3   gl_WorldRayDirectionNV;"
 7151|      0|            "in    vec3   gl_WorldRayDirectionEXT;"
 7152|      0|            "in    vec3   gl_ObjectRayOriginNV;"
 7153|      0|            "in    vec3   gl_ObjectRayOriginEXT;"
 7154|      0|            "in    vec3   gl_ObjectRayDirectionNV;"
 7155|      0|            "in    vec3   gl_ObjectRayDirectionEXT;"
 7156|      0|            "in    float  gl_RayTminNV;"
 7157|      0|            "in    float  gl_RayTminEXT;"
 7158|      0|            "in    float  gl_RayTmaxNV;"
 7159|      0|            "in volatile float gl_RayTmaxEXT;"
 7160|      0|            "in    mat4x3 gl_ObjectToWorldNV;"
 7161|      0|            "in    mat4x3 gl_ObjectToWorldEXT;"
 7162|      0|            "in    mat3x4 gl_ObjectToWorld3x4EXT;"
 7163|      0|            "in    mat4x3 gl_WorldToObjectNV;"
 7164|      0|            "in    mat4x3 gl_WorldToObjectEXT;"
 7165|      0|            "in    mat3x4 gl_WorldToObject3x4EXT;"
 7166|      0|            "in    uint   gl_IncomingRayFlagsNV;"
 7167|      0|            "in    uint   gl_IncomingRayFlagsEXT;"
 7168|      0|            "in    float  gl_CurrentRayTimeNV;"
 7169|      0|            "in    uint   gl_CullMaskEXT;"
 7170|      0|            "\n";
 7171|      0|        const char *hitDecls =
 7172|      0|            "in    uvec3  gl_LaunchIDNV;"
 7173|      0|            "in    uvec3  gl_LaunchIDEXT;"
 7174|      0|            "in    uvec3  gl_LaunchSizeNV;"
 7175|      0|            "in    uvec3  gl_LaunchSizeEXT;"
 7176|      0|            "in     int   gl_PrimitiveID;"
 7177|      0|            "in     int   gl_InstanceID;"
 7178|      0|            "in     int   gl_InstanceCustomIndexNV;"
 7179|      0|            "in     int   gl_InstanceCustomIndexEXT;"
 7180|      0|            "in     int   gl_GeometryIndexEXT;"
 7181|      0|            "in    vec3   gl_WorldRayOriginNV;"
 7182|      0|            "in    vec3   gl_WorldRayOriginEXT;"
 7183|      0|            "in    vec3   gl_WorldRayDirectionNV;"
 7184|      0|            "in    vec3   gl_WorldRayDirectionEXT;"
 7185|      0|            "in    vec3   gl_ObjectRayOriginNV;"
 7186|      0|            "in    vec3   gl_ObjectRayOriginEXT;"
 7187|      0|            "in    vec3   gl_ObjectRayDirectionNV;"
 7188|      0|            "in    vec3   gl_ObjectRayDirectionEXT;"
 7189|      0|            "in    float  gl_RayTminNV;"
 7190|      0|            "in    float  gl_RayTminEXT;"
 7191|      0|            "in    float  gl_RayTmaxNV;"
 7192|      0|            "in    float  gl_RayTmaxEXT;"
 7193|      0|            "in    float  gl_HitTNV;"
 7194|      0|            "in    float  gl_HitTEXT;"
 7195|      0|            "in    uint   gl_HitKindNV;"
 7196|      0|            "in    uint   gl_HitKindEXT;"
 7197|      0|            "in    mat4x3 gl_ObjectToWorldNV;"
 7198|      0|            "in    mat4x3 gl_ObjectToWorldEXT;"
 7199|      0|            "in    mat3x4 gl_ObjectToWorld3x4EXT;"
 7200|      0|            "in    mat4x3 gl_WorldToObjectNV;"
 7201|      0|            "in    mat4x3 gl_WorldToObjectEXT;"
 7202|      0|            "in    mat3x4 gl_WorldToObject3x4EXT;"
 7203|      0|            "in    uint   gl_IncomingRayFlagsNV;"
 7204|      0|            "in    uint   gl_IncomingRayFlagsEXT;"
 7205|      0|            "in    float  gl_CurrentRayTimeNV;"
 7206|      0|            "in    uint   gl_CullMaskEXT;"
 7207|      0|            "in    vec3   gl_HitTriangleVertexPositionsEXT[3];"
 7208|      0|            "in    vec3   gl_HitMicroTriangleVertexPositionsNV[3];"
 7209|      0|            "in    vec2   gl_HitMicroTriangleVertexBarycentricsNV[3];"
 7210|      0|            "in    int    gl_ClusterIDNV;"
 7211|      0|            "in    bool   gl_HitIsSphereNV;"
 7212|      0|            "in    bool   gl_HitIsLSSNV;"
 7213|      0|            "in    vec3   gl_HitSpherePositionNV;"
 7214|      0|            "in    float  gl_HitSphereRadiusNV;"
 7215|      0|            "in    vec3   gl_HitLSSPositionsNV[2];"
 7216|      0|            "in    float  gl_HitLSSRadiiNV[2];"
 7217|      0|            "\n";
 7218|       |
 7219|      0|        const char *missDecls =
 7220|      0|            "in    uvec3  gl_LaunchIDNV;"
 7221|      0|            "in    uvec3  gl_LaunchIDEXT;"
 7222|      0|            "in    uvec3  gl_LaunchSizeNV;"
 7223|      0|            "in    uvec3  gl_LaunchSizeEXT;"
 7224|      0|            "in    vec3   gl_WorldRayOriginNV;"
 7225|      0|            "in    vec3   gl_WorldRayOriginEXT;"
 7226|      0|            "in    vec3   gl_WorldRayDirectionNV;"
 7227|      0|            "in    vec3   gl_WorldRayDirectionEXT;"
 7228|      0|            "in    vec3   gl_ObjectRayOriginNV;"
 7229|      0|            "in    vec3   gl_ObjectRayDirectionNV;"
 7230|      0|            "in    float  gl_RayTminNV;"
 7231|      0|            "in    float  gl_RayTminEXT;"
 7232|      0|            "in    float  gl_RayTmaxNV;"
 7233|      0|            "in    float  gl_RayTmaxEXT;"
 7234|      0|            "in    uint   gl_IncomingRayFlagsNV;"
 7235|      0|            "in    uint   gl_IncomingRayFlagsEXT;"
 7236|      0|            "in    float  gl_CurrentRayTimeNV;"
 7237|      0|            "in    uint   gl_CullMaskEXT;"
 7238|      0|            "\n";
 7239|       |
 7240|      0|        const char *callableDecls =
 7241|      0|            "in    uvec3  gl_LaunchIDNV;"
 7242|      0|            "in    uvec3  gl_LaunchIDEXT;"
 7243|      0|            "in    uvec3  gl_LaunchSizeNV;"
 7244|      0|            "in    uvec3  gl_LaunchSizeEXT;"
 7245|      0|            "\n";
 7246|       |
 7247|       |
 7248|      0|        commonBuiltins.append(constRayQueryIntersection);
 7249|      0|        commonBuiltins.append(constRayFlags);
 7250|       |
 7251|      0|        stageBuiltins[EShLangRayGen].append(rayGenDecls);
 7252|      0|        stageBuiltins[EShLangIntersect].append(intersectDecls);
 7253|      0|        stageBuiltins[EShLangAnyHit].append(hitDecls);
 7254|      0|        stageBuiltins[EShLangClosestHit].append(hitDecls);
 7255|      0|        stageBuiltins[EShLangMiss].append(missDecls);
 7256|      0|        stageBuiltins[EShLangCallable].append(callableDecls);
 7257|       |
 7258|      0|    }
 7259|       |
 7260|     99|    if ((profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (7260:10): [True: 99, False: 0]
  |  Branch (7260:35): [True: 99, False: 0]
  ------------------
 7261|     99|        const char *deviceIndex =
 7262|     99|            "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
 7263|     99|            "\n";
 7264|       |
 7265|     99|        stageBuiltins[EShLangRayGen].append(deviceIndex);
 7266|     99|        stageBuiltins[EShLangIntersect].append(deviceIndex);
 7267|     99|        stageBuiltins[EShLangAnyHit].append(deviceIndex);
 7268|     99|        stageBuiltins[EShLangClosestHit].append(deviceIndex);
 7269|     99|        stageBuiltins[EShLangMiss].append(deviceIndex);
 7270|     99|    }
 7271|       |
 7272|     99|    if ((profile != EEsProfile && version >= 420) ||
  ------------------
  |  Branch (7272:10): [True: 99, False: 0]
  |  Branch (7272:35): [True: 10, False: 89]
  ------------------
 7273|     89|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (7273:10): [True: 0, False: 89]
  |  Branch (7273:35): [True: 0, False: 0]
  ------------------
 7274|     10|        commonBuiltins.append("const int gl_ScopeDevice      = 1;\n");
 7275|     10|        commonBuiltins.append("const int gl_ScopeWorkgroup   = 2;\n");
 7276|     10|        commonBuiltins.append("const int gl_ScopeSubgroup    = 3;\n");
 7277|     10|        commonBuiltins.append("const int gl_ScopeInvocation  = 4;\n");
 7278|     10|        commonBuiltins.append("const int gl_ScopeQueueFamily = 5;\n");
 7279|     10|        commonBuiltins.append("const int gl_ScopeShaderCallEXT = 6;\n");
 7280|       |
 7281|     10|        commonBuiltins.append("const int gl_SemanticsRelaxed         = 0x0;\n");
 7282|     10|        commonBuiltins.append("const int gl_SemanticsAcquire         = 0x2;\n");
 7283|     10|        commonBuiltins.append("const int gl_SemanticsRelease         = 0x4;\n");
 7284|     10|        commonBuiltins.append("const int gl_SemanticsAcquireRelease  = 0x8;\n");
 7285|     10|        commonBuiltins.append("const int gl_SemanticsMakeAvailable   = 0x2000;\n");
 7286|     10|        commonBuiltins.append("const int gl_SemanticsMakeVisible     = 0x4000;\n");
 7287|     10|        commonBuiltins.append("const int gl_SemanticsVolatile        = 0x8000;\n");
 7288|       |
 7289|     10|        commonBuiltins.append("const int gl_StorageSemanticsNone     = 0x0;\n");
 7290|     10|        commonBuiltins.append("const int gl_StorageSemanticsBuffer   = 0x40;\n");
 7291|     10|        commonBuiltins.append("const int gl_StorageSemanticsShared   = 0x100;\n");
 7292|     10|        commonBuiltins.append("const int gl_StorageSemanticsImage    = 0x800;\n");
 7293|     10|        commonBuiltins.append("const int gl_StorageSemanticsOutput   = 0x1000;\n");
 7294|     10|    }
 7295|       |
 7296|       |    // Adding these to common built-ins triggers an assert due to a memory corruption in related code when testing
 7297|       |    // So instead add to each stage individually, avoiding the GLSLang bug
 7298|     99|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (7298:10): [True: 99, False: 0]
  |  Branch (7298:35): [True: 10, False: 89]
  |  Branch (7298:55): [True: 0, False: 89]
  |  Branch (7298:80): [True: 0, False: 0]
  ------------------
 7299|    150|        for (int stage=EShLangVertex; stage<EShLangCount; stage++)
  ------------------
  |  Branch (7299:39): [True: 140, False: 10]
  ------------------
 7300|    140|        {
 7301|    140|            stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag2VerticalPixelsEXT       = 1;\n");
 7302|    140|            stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag4VerticalPixelsEXT       = 2;\n");
 7303|    140|            stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag2HorizontalPixelsEXT     = 4;\n");
 7304|    140|            stageBuiltins[static_cast<EShLanguage>(stage)].append("const highp int gl_ShadingRateFlag4HorizontalPixelsEXT     = 8;\n");
 7305|    140|        }
 7306|     10|    }
 7307|       |    
 7308|       |    // GL_EXT_shader_image_int64
 7309|     99|    if ((profile != EEsProfile && version >= 420) ||
  ------------------
  |  Branch (7309:10): [True: 99, False: 0]
  |  Branch (7309:35): [True: 10, False: 89]
  ------------------
 7310|     89|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (7310:10): [True: 0, False: 89]
  |  Branch (7310:35): [True: 0, False: 0]
  ------------------
 7311|       |            
 7312|     10|        const TBasicType bTypes[] = { EbtInt64, EbtUint64 };
 7313|     30|        for (int ms = 0; ms <= 1; ++ms) { // loop over "bool" multisample or not
  ------------------
  |  Branch (7313:26): [True: 20, False: 10]
  ------------------
 7314|     60|            for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
  ------------------
  |  Branch (7314:35): [True: 40, False: 20]
  ------------------
 7315|    280|                for (int dim = Esd1D; dim < EsdSubpass; ++dim) { // 1D, ..., buffer
  ------------------
  |  Branch (7315:39): [True: 240, False: 40]
  ------------------
 7316|    240|                    if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile)
  ------------------
  |  Branch (7316:26): [True: 40, False: 200]
  |  Branch (7316:42): [True: 40, False: 160]
  |  Branch (7316:61): [True: 0, False: 80]
  ------------------
 7317|      0|                        continue;
 7318|       |                    
 7319|    240|                    if ((dim == Esd3D || dim == EsdRect || dim == EsdBuffer) && arrayed)
  ------------------
  |  Branch (7319:26): [True: 40, False: 200]
  |  Branch (7319:42): [True: 40, False: 160]
  |  Branch (7319:60): [True: 40, False: 120]
  |  Branch (7319:81): [True: 60, False: 60]
  ------------------
 7320|     60|                        continue;
 7321|       |                    
 7322|    180|                    if (dim != Esd2D && ms)
  ------------------
  |  Branch (7322:25): [True: 140, False: 40]
  |  Branch (7322:41): [True: 70, False: 70]
  ------------------
 7323|     70|                        continue;
 7324|       |                    
 7325|       |                    // Loop over the bTypes
 7326|    330|                    for (size_t bType = 0; bType < sizeof(bTypes)/sizeof(TBasicType); ++bType) {
  ------------------
  |  Branch (7326:44): [True: 220, False: 110]
  ------------------
 7327|       |                        //
 7328|       |                        // Now, make all the function prototypes for the type we just built...
 7329|       |                        //
 7330|    220|                        TSampler sampler;
 7331|       |                    
 7332|    220|                        sampler.setImage(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
  ------------------
  |  Branch (7332:75): [True: 80, False: 140]
  ------------------
 7333|    220|                                                                          false,
 7334|    220|                                                                          ms      ? true : false);
  ------------------
  |  Branch (7334:75): [True: 40, False: 180]
  ------------------
 7335|       |
 7336|    220|                        TString typeName = TString{sampler.getString()};
 7337|       |
 7338|    220|                        addQueryFunctions(sampler, typeName, version, profile);
 7339|    220|                        addImageFunctions(sampler, typeName, version, profile);
 7340|    220|                    }
 7341|    110|                }
 7342|     40|            }
 7343|     20|        }
 7344|     10|    }
 7345|       |
 7346|       |    // printf("%s\n", commonBuiltins.c_str());
 7347|       |    // printf("%s\n", stageBuiltins[EShLangFragment].c_str());
 7348|     99|}
_ZN7glslang9TBuiltIns31add2ndGenerationSamplingImagingEi8EProfileRKNS_10SpvVersionE:
 7355|     99|{
 7356|       |    //
 7357|       |    // In this function proper, enumerate the types, then calls the next set of functions
 7358|       |    // to enumerate all the uses for that type.
 7359|       |    //
 7360|       |
 7361|       |    // enumerate all the types
 7362|     99|    const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint,
 7363|     99|         EbtFloat16
 7364|     99|    };
 7365|     99|    bool skipBuffer = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 140);
  ------------------
  |  Branch (7365:24): [True: 0, False: 99]
  |  Branch (7365:49): [True: 0, False: 0]
  |  Branch (7365:68): [True: 99, False: 0]
  |  Branch (7365:93): [True: 0, False: 99]
  ------------------
 7366|     99|    bool skipCubeArrayed = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 130);
  ------------------
  |  Branch (7366:29): [True: 0, False: 99]
  |  Branch (7366:54): [True: 0, False: 0]
  |  Branch (7366:73): [True: 99, False: 0]
  |  Branch (7366:98): [True: 0, False: 99]
  ------------------
 7367|    297|    for (int image = 0; image <= 1; ++image) // loop over "bool" image vs sampler
  ------------------
  |  Branch (7367:25): [True: 198, False: 99]
  ------------------
 7368|    198|    {
 7369|    594|        for (int shadow = 0; shadow <= 1; ++shadow) { // loop over "bool" shadow or not
  ------------------
  |  Branch (7369:30): [True: 396, False: 198]
  ------------------
 7370|  1.18k|            for (int ms = 0; ms <= 1; ++ms) // loop over "bool" multisample or not
  ------------------
  |  Branch (7370:30): [True: 792, False: 396]
  ------------------
 7371|    792|            {
 7372|    792|                if ((ms || image) && shadow)
  ------------------
  |  Branch (7372:22): [True: 396, False: 396]
  |  Branch (7372:28): [True: 198, False: 198]
  |  Branch (7372:38): [True: 297, False: 297]
  ------------------
 7373|    297|                    continue;
 7374|    495|                if (ms && profile != EEsProfile && version < 140)
  ------------------
  |  Branch (7374:21): [True: 198, False: 297]
  |  Branch (7374:27): [True: 198, False: 0]
  |  Branch (7374:52): [True: 0, False: 198]
  ------------------
 7375|      0|                    continue;
 7376|    495|                if (ms && image && profile == EEsProfile)
  ------------------
  |  Branch (7376:21): [True: 198, False: 297]
  |  Branch (7376:27): [True: 99, False: 99]
  |  Branch (7376:36): [True: 0, False: 99]
  ------------------
 7377|      0|                    continue;
 7378|    495|                if (ms && profile == EEsProfile && version < 310)
  ------------------
  |  Branch (7378:21): [True: 198, False: 297]
  |  Branch (7378:27): [True: 0, False: 198]
  |  Branch (7378:52): [True: 0, False: 0]
  ------------------
 7379|      0|                    continue;
 7380|       |
 7381|  1.48k|                for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not
  ------------------
  |  Branch (7381:39): [True: 990, False: 495]
  ------------------
 7382|  8.91k|                    for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, ..., buffer, subpass
  ------------------
  |  Branch (7382:43): [True: 7.92k, False: 990]
  ------------------
 7383|  7.92k|                        if (dim == EsdAttachmentEXT)
  ------------------
  |  Branch (7383:29): [True: 990, False: 6.93k]
  ------------------
 7384|    990|                            continue;
 7385|  6.93k|                        if (dim == EsdSubpass && spvVersion.vulkan == 0)
  ------------------
  |  Branch (7385:29): [True: 990, False: 5.94k]
  |  Branch (7385:50): [True: 0, False: 990]
  ------------------
 7386|      0|                            continue;
 7387|  6.93k|                        if (dim == EsdSubpass && (image || shadow || arrayed))
  ------------------
  |  Branch (7387:29): [True: 990, False: 5.94k]
  |  Branch (7387:51): [True: 396, False: 594]
  |  Branch (7387:60): [True: 198, False: 396]
  |  Branch (7387:70): [True: 198, False: 198]
  ------------------
 7388|    792|                            continue;
 7389|  6.13k|                        if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile)
  ------------------
  |  Branch (7389:30): [True: 990, False: 5.14k]
  |  Branch (7389:46): [True: 990, False: 4.15k]
  |  Branch (7389:65): [True: 0, False: 1.98k]
  ------------------
 7390|      0|                            continue;
 7391|  6.13k|                        if (dim == EsdSubpass && spvVersion.vulkan == 0)
  ------------------
  |  Branch (7391:29): [True: 198, False: 5.94k]
  |  Branch (7391:50): [True: 0, False: 198]
  ------------------
 7392|      0|                            continue;
 7393|  6.13k|                        if (dim == EsdSubpass && (image || shadow || arrayed))
  ------------------
  |  Branch (7393:29): [True: 198, False: 5.94k]
  |  Branch (7393:51): [True: 0, False: 198]
  |  Branch (7393:60): [True: 0, False: 198]
  |  Branch (7393:70): [True: 0, False: 198]
  ------------------
 7394|      0|                            continue;
 7395|  6.13k|                        if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile)
  ------------------
  |  Branch (7395:30): [True: 990, False: 5.14k]
  |  Branch (7395:46): [True: 990, False: 4.15k]
  |  Branch (7395:65): [True: 0, False: 1.98k]
  ------------------
 7396|      0|                            continue;
 7397|  6.13k|                        if (dim != Esd2D && dim != EsdSubpass && ms)
  ------------------
  |  Branch (7397:29): [True: 5.14k, False: 990]
  |  Branch (7397:45): [True: 4.95k, False: 198]
  |  Branch (7397:66): [True: 1.98k, False: 2.97k]
  ------------------
 7398|  1.98k|                            continue;
 7399|  4.15k|                        if (dim == EsdBuffer && skipBuffer)
  ------------------
  |  Branch (7399:29): [True: 594, False: 3.56k]
  |  Branch (7399:49): [True: 0, False: 594]
  ------------------
 7400|      0|                            continue;
 7401|  4.15k|                        if (dim == EsdBuffer && (shadow || arrayed || ms))
  ------------------
  |  Branch (7401:29): [True: 594, False: 3.56k]
  |  Branch (7401:50): [True: 198, False: 396]
  |  Branch (7401:60): [True: 198, False: 198]
  |  Branch (7401:71): [True: 0, False: 198]
  ------------------
 7402|    396|                            continue;
 7403|  3.76k|                        if (ms && arrayed && profile == EEsProfile && version < 310)
  ------------------
  |  Branch (7403:29): [True: 495, False: 3.26k]
  |  Branch (7403:35): [True: 198, False: 297]
  |  Branch (7403:46): [True: 0, False: 198]
  |  Branch (7403:71): [True: 0, False: 0]
  ------------------
 7404|      0|                            continue;
 7405|  3.76k|                        if (dim == Esd3D && shadow)
  ------------------
  |  Branch (7405:29): [True: 594, False: 3.16k]
  |  Branch (7405:45): [True: 198, False: 396]
  ------------------
 7406|    198|                            continue;
 7407|  3.56k|                        if (dim == EsdCube && arrayed && skipCubeArrayed)
  ------------------
  |  Branch (7407:29): [True: 594, False: 2.97k]
  |  Branch (7407:47): [True: 297, False: 297]
  |  Branch (7407:58): [True: 0, False: 297]
  ------------------
 7408|      0|                            continue;
 7409|  3.56k|                        if ((dim == Esd3D || dim == EsdRect) && arrayed)
  ------------------
  |  Branch (7409:30): [True: 396, False: 3.16k]
  |  Branch (7409:46): [True: 594, False: 2.57k]
  |  Branch (7409:65): [True: 495, False: 495]
  ------------------
 7410|    495|                            continue;
 7411|       |
 7412|       |                        // Loop over the bTypes
 7413|  15.3k|                        for (size_t bType = 0; bType < sizeof(bTypes)/sizeof(TBasicType); ++bType) {
  ------------------
  |  Branch (7413:48): [True: 12.2k, False: 3.06k]
  ------------------
 7414|  12.2k|                            if (bTypes[bType] == EbtFloat16 && (profile == EEsProfile || version < 450))
  ------------------
  |  Branch (7414:33): [True: 3.06k, False: 9.20k]
  |  Branch (7414:65): [True: 0, False: 3.06k]
  |  Branch (7414:90): [True: 2.75k, False: 310]
  ------------------
 7415|  2.75k|                                continue;
 7416|  9.51k|                            if (dim == EsdRect && version < 140 && bType > 0)
  ------------------
  |  Branch (7416:33): [True: 921, False: 8.59k]
  |  Branch (7416:51): [True: 0, False: 921]
  |  Branch (7416:68): [True: 0, False: 0]
  ------------------
 7417|      0|                                continue;
 7418|  9.51k|                            if (shadow && (bTypes[bType] == EbtInt || bTypes[bType] == EbtUint))
  ------------------
  |  Branch (7418:33): [True: 2.14k, False: 7.36k]
  |  Branch (7418:44): [True: 693, False: 1.45k]
  |  Branch (7418:71): [True: 693, False: 763]
  ------------------
 7419|  1.38k|                                continue;
 7420|       |                            //
 7421|       |                            // Now, make all the function prototypes for the type we just built...
 7422|       |                            //
 7423|  8.13k|                            TSampler sampler;
 7424|  8.13k|                            if (dim == EsdSubpass) {
  ------------------
  |  Branch (7424:33): [True: 614, False: 7.51k]
  ------------------
 7425|    614|                                sampler.setSubpass(bTypes[bType], ms ? true : false);
  ------------------
  |  Branch (7425:67): [True: 307, False: 307]
  ------------------
 7426|  7.51k|                            } else if (dim == EsdAttachmentEXT) {
  ------------------
  |  Branch (7426:40): [True: 0, False: 7.51k]
  ------------------
 7427|      0|                                sampler.setAttachmentEXT(bTypes[bType]);
 7428|      0|                            } else
 7429|  7.51k|                            if (image) {
  ------------------
  |  Branch (7429:33): [True: 3.37k, False: 4.14k]
  ------------------
 7430|  3.37k|                                sampler.setImage(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
  ------------------
  |  Branch (7430:83): [True: 1.22k, False: 2.14k]
  ------------------
 7431|  3.37k|                                                                                  shadow  ? true : false,
  ------------------
  |  Branch (7431:83): [True: 0, False: 3.37k]
  ------------------
 7432|  3.37k|                                                                                  ms      ? true : false);
  ------------------
  |  Branch (7432:83): [True: 614, False: 2.76k]
  ------------------
 7433|  4.14k|                            } else {
 7434|  4.14k|                                sampler.set(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false,
  ------------------
  |  Branch (7434:78): [True: 1.55k, False: 2.58k]
  ------------------
 7435|  4.14k|                                                                             shadow  ? true : false,
  ------------------
  |  Branch (7435:78): [True: 763, False: 3.37k]
  ------------------
 7436|  4.14k|                                                                             ms      ? true : false);
  ------------------
  |  Branch (7436:78): [True: 614, False: 3.52k]
  ------------------
 7437|  4.14k|                            }
 7438|       |
 7439|  8.13k|                            TString typeName = TString{sampler.getString()};
 7440|       |
 7441|  8.13k|                            if (dim == EsdSubpass) {
  ------------------
  |  Branch (7441:33): [True: 614, False: 7.51k]
  ------------------
 7442|    614|                                addSubpassSampling(sampler, typeName, version, profile);
 7443|    614|                                continue;
 7444|    614|                            }
 7445|       |
 7446|  7.51k|                            addQueryFunctions(sampler, typeName, version, profile);
 7447|       |
 7448|  7.51k|                            if (image)
  ------------------
  |  Branch (7448:33): [True: 3.37k, False: 4.14k]
  ------------------
 7449|  3.37k|                                addImageFunctions(sampler, typeName, version, profile);
 7450|  4.14k|                            else {
 7451|  4.14k|                                addSamplingFunctions(sampler, typeName, version, profile);
 7452|  4.14k|                                addGatherFunctions(sampler, typeName, version, profile);
 7453|  4.14k|                                if (spvVersion.vulkan > 0 && sampler.isCombined() && !sampler.shadow) {
  ------------------
  |  Branch (7453:37): [True: 4.14k, False: 0]
  |  Branch (7453:62): [True: 4.14k, False: 0]
  |  Branch (7453:86): [True: 3.37k, False: 763]
  ------------------
 7454|       |                                    // Base Vulkan allows texelFetch() for
 7455|       |                                    // textureBuffer (i.e. without sampler).
 7456|       |                                    //
 7457|       |                                    // GL_EXT_samplerless_texture_functions
 7458|       |                                    // allows texelFetch() and query functions
 7459|       |                                    // (other than textureQueryLod()) for all
 7460|       |                                    // texture types.
 7461|  3.37k|                                    sampler.setTexture(sampler.type, sampler.dim, sampler.arrayed, sampler.shadow,
 7462|  3.37k|                                                       sampler.ms);
 7463|  3.37k|                                    TString textureTypeName = TString{sampler.getString()};
 7464|  3.37k|                                    addSamplingFunctions(sampler, textureTypeName, version, profile);
 7465|  3.37k|                                    addQueryFunctions(sampler, textureTypeName, version, profile);
 7466|  3.37k|                                }
 7467|  4.14k|                            }
 7468|  7.51k|                        }
 7469|  3.06k|                    }
 7470|    990|                }
 7471|    495|            }
 7472|    396|        }
 7473|    198|    }
 7474|       |
 7475|       |    //
 7476|       |    // sparseTexelsResidentARB()
 7477|       |    //
 7478|     99|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (7478:9): [True: 99, False: 0]
  |  Branch (7478:34): [True: 10, False: 89]
  ------------------
 7479|     10|        commonBuiltins.append("bool sparseTexelsResidentARB(int code);\n");
 7480|     10|    }
 7481|     99|}
_ZN7glslang9TBuiltIns17addQueryFunctionsENS_8TSamplerERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS_14pool_allocatorIcEEEEi8EProfile:
 7490|  11.1k|{
 7491|       |    //
 7492|       |    // textureSize() and imageSize()
 7493|       |    //
 7494|       |
 7495|  11.1k|    int sizeDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0) - (sampler.dim == EsdCube ? 1 : 0);
  ------------------
  |  Branch (7495:43): [True: 4.09k, False: 7.02k]
  |  Branch (7495:71): [True: 2.10k, False: 9.01k]
  ------------------
 7496|       |
 7497|  11.1k|    if (sampler.isImage() && ((profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 420)))
  ------------------
  |  Branch (7497:9): [True: 3.59k, False: 7.51k]
  |  Branch (7497:32): [True: 0, False: 3.59k]
  |  Branch (7497:57): [True: 0, False: 0]
  |  Branch (7497:76): [True: 3.59k, False: 0]
  |  Branch (7497:101): [True: 2.93k, False: 660]
  ------------------
 7498|  2.93k|        return;
 7499|       |
 7500|  8.17k|    if (profile == EEsProfile)
  ------------------
  |  Branch (7500:9): [True: 0, False: 8.17k]
  ------------------
 7501|      0|        commonBuiltins.append("highp ");
 7502|  8.17k|    if (sizeDims == 1)
  ------------------
  |  Branch (7502:9): [True: 1.45k, False: 6.72k]
  ------------------
 7503|  1.45k|        commonBuiltins.append("int");
 7504|  6.72k|    else {
 7505|  6.72k|        commonBuiltins.append("ivec");
 7506|  6.72k|        commonBuiltins.append(postfixes[sizeDims]);
 7507|  6.72k|    }
 7508|  8.17k|    if (sampler.isImage())
  ------------------
  |  Branch (7508:9): [True: 660, False: 7.51k]
  ------------------
 7509|    660|        commonBuiltins.append(" imageSize(readonly writeonly volatile coherent nontemporal ");
 7510|  7.51k|    else
 7511|  7.51k|        commonBuiltins.append(" textureSize(");
 7512|  8.17k|    commonBuiltins.append(typeName);
 7513|  8.17k|    if (! sampler.isImage() && ! sampler.isRect() && ! sampler.isBuffer() && ! sampler.isMultiSample())
  ------------------
  |  Branch (7513:9): [True: 7.51k, False: 660]
  |  Branch (7513:32): [True: 6.79k, False: 723]
  |  Branch (7513:54): [True: 6.18k, False: 614]
  |  Branch (7513:78): [True: 4.95k, False: 1.22k]
  ------------------
 7514|  4.95k|        commonBuiltins.append(",int);\n");
 7515|  3.22k|    else
 7516|  3.22k|        commonBuiltins.append(");\n");
 7517|       |
 7518|       |    //
 7519|       |    // textureSamples() and imageSamples()
 7520|       |    //
 7521|       |
 7522|       |    // GL_ARB_shader_texture_image_samples
 7523|       |    // TODO: spec issue? there are no memory qualifiers; how to query a writeonly/readonly image, etc?
 7524|  8.17k|    if (profile != EEsProfile && version >= 430 && sampler.isMultiSample()) {
  ------------------
  |  Branch (7524:9): [True: 8.17k, False: 0]
  |  Branch (7524:34): [True: 1.68k, False: 6.49k]
  |  Branch (7524:52): [True: 280, False: 1.40k]
  ------------------
 7525|    280|        commonBuiltins.append("int ");
 7526|    280|        if (sampler.isImage())
  ------------------
  |  Branch (7526:13): [True: 120, False: 160]
  ------------------
 7527|    120|            commonBuiltins.append("imageSamples(readonly writeonly volatile coherent nontemporal ");
 7528|    160|        else
 7529|    160|            commonBuiltins.append("textureSamples(");
 7530|    280|        commonBuiltins.append(typeName);
 7531|    280|        commonBuiltins.append(");\n");
 7532|    280|    }
 7533|       |
 7534|       |    //
 7535|       |    // textureQueryLod()
 7536|       |    // Also enabled with extension GL_ARB_texture_query_lod
 7537|       |    // Extension GL_ARB_texture_query_lod says that textureQueryLOD() also exist at extension.
 7538|       |
 7539|  8.17k|    if (profile != EEsProfile && version >= 150 && sampler.isCombined() && sampler.dim != EsdRect &&
  ------------------
  |  Branch (7539:9): [True: 8.17k, False: 0]
  |  Branch (7539:34): [True: 1.89k, False: 6.27k]
  |  Branch (7539:52): [True: 700, False: 1.19k]
  |  Branch (7539:76): [True: 628, False: 72]
  ------------------
 7540|    628|        ! sampler.isMultiSample() && ! sampler.isBuffer()) {
  ------------------
  |  Branch (7540:9): [True: 530, False: 98]
  |  Branch (7540:38): [True: 481, False: 49]
  ------------------
 7541|       |
 7542|    481|        const TString funcName[2] = {"vec2 textureQueryLod(", "vec2 textureQueryLOD("};
 7543|       |
 7544|  1.44k|        for (int i = 0; i < 2; ++i){
  ------------------
  |  Branch (7544:25): [True: 962, False: 481]
  ------------------
 7545|  2.88k|            for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) {
  ------------------
  |  Branch (7545:38): [True: 1.92k, False: 962]
  ------------------
 7546|  1.92k|                if (f16TexAddr && sampler.type != EbtFloat16)
  ------------------
  |  Branch (7546:21): [True: 962, False: 962]
  |  Branch (7546:35): [True: 702, False: 260]
  ------------------
 7547|    702|                    continue;
 7548|  1.22k|                stageBuiltins[EShLangFragment].append(funcName[i]);
 7549|  1.22k|                stageBuiltins[EShLangFragment].append(typeName);
 7550|  1.22k|                if (dimMap[sampler.dim] == 1)
  ------------------
  |  Branch (7550:21): [True: 368, False: 854]
  ------------------
 7551|    368|                    if (f16TexAddr)
  ------------------
  |  Branch (7551:25): [True: 80, False: 288]
  ------------------
 7552|     80|                        stageBuiltins[EShLangFragment].append(", float16_t");
 7553|    288|                    else
 7554|    288|                        stageBuiltins[EShLangFragment].append(", float");
 7555|    854|                else {
 7556|    854|                    if (f16TexAddr)
  ------------------
  |  Branch (7556:25): [True: 180, False: 674]
  ------------------
 7557|    180|                        stageBuiltins[EShLangFragment].append(", f16vec");
 7558|    674|                    else
 7559|    674|                        stageBuiltins[EShLangFragment].append(", vec");
 7560|    854|                    stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]);
 7561|    854|                }
 7562|  1.22k|                stageBuiltins[EShLangFragment].append(");\n");
 7563|  1.22k|            }
 7564|       |
 7565|    962|            stageBuiltins[EShLangCompute].append(funcName[i]);
 7566|    962|            stageBuiltins[EShLangCompute].append(typeName);
 7567|    962|            if (dimMap[sampler.dim] == 1)
  ------------------
  |  Branch (7567:17): [True: 288, False: 674]
  ------------------
 7568|    288|                stageBuiltins[EShLangCompute].append(", float");
 7569|    674|            else {
 7570|    674|                stageBuiltins[EShLangCompute].append(", vec");
 7571|    674|                stageBuiltins[EShLangCompute].append(postfixes[dimMap[sampler.dim]]);
 7572|    674|            }
 7573|    962|            stageBuiltins[EShLangCompute].append(");\n");
 7574|       |
 7575|    962|            stageBuiltins[EShLangTask].append(funcName[i]);
 7576|    962|            stageBuiltins[EShLangTask].append(typeName);
 7577|    962|            if (dimMap[sampler.dim] == 1)
  ------------------
  |  Branch (7577:17): [True: 288, False: 674]
  ------------------
 7578|    288|                stageBuiltins[EShLangTask].append(", float");
 7579|    674|            else {
 7580|    674|                stageBuiltins[EShLangTask].append(", vec");
 7581|    674|                stageBuiltins[EShLangTask].append(postfixes[dimMap[sampler.dim]]);
 7582|    674|            }
 7583|    962|            stageBuiltins[EShLangTask].append(");\n");
 7584|       |
 7585|    962|            stageBuiltins[EShLangMesh].append(funcName[i]);
 7586|    962|            stageBuiltins[EShLangMesh].append(typeName);
 7587|    962|            if (dimMap[sampler.dim] == 1)
  ------------------
  |  Branch (7587:17): [True: 288, False: 674]
  ------------------
 7588|    288|                stageBuiltins[EShLangMesh].append(", float");
 7589|    674|            else {
 7590|    674|                stageBuiltins[EShLangMesh].append(", vec");
 7591|    674|                stageBuiltins[EShLangMesh].append(postfixes[dimMap[sampler.dim]]);
 7592|    674|            }
 7593|    962|            stageBuiltins[EShLangMesh].append(");\n");
 7594|    962|        }
 7595|    481|    }
 7596|       |
 7597|       |    //
 7598|       |    // textureQueryLevels()
 7599|       |    //
 7600|       |
 7601|  8.17k|    if (profile != EEsProfile && version >= 430 && ! sampler.isImage() && sampler.dim != EsdRect &&
  ------------------
  |  Branch (7601:9): [True: 8.17k, False: 0]
  |  Branch (7601:34): [True: 1.68k, False: 6.49k]
  |  Branch (7601:52): [True: 1.02k, False: 660]
  |  Branch (7601:75): [True: 920, False: 100]
  ------------------
 7602|    920|        ! sampler.isMultiSample() && ! sampler.isBuffer()) {
  ------------------
  |  Branch (7602:9): [True: 760, False: 160]
  |  Branch (7602:38): [True: 680, False: 80]
  ------------------
 7603|    680|        commonBuiltins.append("int textureQueryLevels(");
 7604|    680|        commonBuiltins.append(typeName);
 7605|    680|        commonBuiltins.append(");\n");
 7606|    680|    }
 7607|  8.17k|}
_ZN7glslang9TBuiltIns17addImageFunctionsENS_8TSamplerERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS_14pool_allocatorIcEEEEi8EProfile:
 7616|  3.59k|{
 7617|  3.59k|    int dims = dimMap[sampler.dim];
 7618|       |    // most things with an array add a dimension, except for cubemaps
 7619|  3.59k|    if (sampler.arrayed && sampler.dim != EsdCube)
  ------------------
  |  Branch (7619:9): [True: 1.30k, False: 2.28k]
  |  Branch (7619:28): [True: 981, False: 327]
  ------------------
 7620|    981|        ++dims;
 7621|       |
 7622|  3.59k|    TString imageParams = typeName;
 7623|  3.59k|    if (dims == 1)
  ------------------
  |  Branch (7623:9): [True: 654, False: 2.94k]
  ------------------
 7624|    654|        imageParams.append(", int");
 7625|  2.94k|    else {
 7626|  2.94k|        imageParams.append(", ivec");
 7627|  2.94k|        imageParams.append(postfixes[dims]);
 7628|  2.94k|    }
 7629|  3.59k|    if (sampler.isMultiSample())
  ------------------
  |  Branch (7629:9): [True: 654, False: 2.94k]
  ------------------
 7630|    654|        imageParams.append(", int");
 7631|       |
 7632|  3.59k|    if (profile == EEsProfile)
  ------------------
  |  Branch (7632:9): [True: 0, False: 3.59k]
  ------------------
 7633|      0|        commonBuiltins.append("highp ");
 7634|  3.59k|    commonBuiltins.append(prefixes[sampler.type]);
 7635|  3.59k|    commonBuiltins.append("vec4 imageLoad(readonly volatile coherent nontemporal ");
 7636|  3.59k|    commonBuiltins.append(imageParams);
 7637|  3.59k|    commonBuiltins.append(");\n");
 7638|       |
 7639|  3.59k|    commonBuiltins.append("void imageStore(writeonly volatile coherent nontemporal ");
 7640|  3.59k|    commonBuiltins.append(imageParams);
 7641|  3.59k|    commonBuiltins.append(", ");
 7642|  3.59k|    commonBuiltins.append(prefixes[sampler.type]);
 7643|  3.59k|    commonBuiltins.append("vec4);\n");
 7644|       |
 7645|  3.59k|    if (! sampler.is1D() && ! sampler.isBuffer() && profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (7645:9): [True: 2.94k, False: 654]
  |  Branch (7645:29): [True: 2.61k, False: 327]
  |  Branch (7645:53): [True: 2.61k, False: 0]
  |  Branch (7645:78): [True: 480, False: 2.13k]
  ------------------
 7646|    480|        commonBuiltins.append("int sparseImageLoadARB(readonly volatile coherent nontemporal ");
 7647|    480|        commonBuiltins.append(imageParams);
 7648|    480|        commonBuiltins.append(", out ");
 7649|    480|        commonBuiltins.append(prefixes[sampler.type]);
 7650|    480|        commonBuiltins.append("vec4");
 7651|    480|        commonBuiltins.append(");\n");
 7652|    480|    }
 7653|       |
 7654|  3.59k|    if ( profile != EEsProfile ||
  ------------------
  |  Branch (7654:10): [True: 3.59k, False: 0]
  ------------------
 7655|  3.59k|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (7655:10): [True: 0, False: 0]
  |  Branch (7655:35): [True: 0, False: 0]
  ------------------
 7656|  3.59k|        if (sampler.type == EbtInt || sampler.type == EbtUint || sampler.type == EbtInt64 || sampler.type == EbtUint64 ) {
  ------------------
  |  Branch (7656:13): [True: 1.08k, False: 2.50k]
  |  Branch (7656:39): [True: 1.08k, False: 1.41k]
  |  Branch (7656:66): [True: 110, False: 1.30k]
  |  Branch (7656:94): [True: 110, False: 1.19k]
  ------------------
 7657|       |            
 7658|  2.39k|            const char* dataType;
 7659|  2.39k|            switch (sampler.type) {
 7660|  1.08k|                case(EbtInt): dataType = "highp int"; break;
  ------------------
  |  Branch (7660:17): [True: 1.08k, False: 1.30k]
  ------------------
 7661|  1.08k|                case(EbtUint): dataType = "highp uint"; break;
  ------------------
  |  Branch (7661:17): [True: 1.08k, False: 1.30k]
  ------------------
 7662|    110|                case(EbtInt64): dataType = "highp int64_t"; break;
  ------------------
  |  Branch (7662:17): [True: 110, False: 2.28k]
  ------------------
 7663|    110|                case(EbtUint64): dataType = "highp uint64_t"; break;
  ------------------
  |  Branch (7663:17): [True: 110, False: 2.28k]
  ------------------
 7664|      0|                default: dataType = "";
  ------------------
  |  Branch (7664:17): [True: 0, False: 2.39k]
  ------------------
 7665|  2.39k|            }
 7666|       |
 7667|  2.39k|            const int numBuiltins = 7;
 7668|       |
 7669|  2.39k|            static const char* atomicFunc[numBuiltins] = {
 7670|  2.39k|                " imageAtomicAdd(volatile coherent nontemporal ",
 7671|  2.39k|                " imageAtomicMin(volatile coherent nontemporal ",
 7672|  2.39k|                " imageAtomicMax(volatile coherent nontemporal ",
 7673|  2.39k|                " imageAtomicAnd(volatile coherent nontemporal ",
 7674|  2.39k|                " imageAtomicOr(volatile coherent nontemporal ",
 7675|  2.39k|                " imageAtomicXor(volatile coherent nontemporal ",
 7676|  2.39k|                " imageAtomicExchange(volatile coherent nontemporal "
 7677|  2.39k|            };
 7678|       |
 7679|       |            // Loop twice to add prototypes with/without scope/semantics
 7680|  7.19k|            for (int j = 0; j < 2; ++j) {
  ------------------
  |  Branch (7680:29): [True: 4.79k, False: 2.39k]
  ------------------
 7681|  38.3k|                for (size_t i = 0; i < numBuiltins; ++i) {
  ------------------
  |  Branch (7681:36): [True: 33.5k, False: 4.79k]
  ------------------
 7682|  33.5k|                    commonBuiltins.append(dataType);
 7683|  33.5k|                    commonBuiltins.append(atomicFunc[i]);
 7684|  33.5k|                    commonBuiltins.append(imageParams);
 7685|  33.5k|                    commonBuiltins.append(", ");
 7686|  33.5k|                    commonBuiltins.append(dataType);
 7687|  33.5k|                    if (j == 1) {
  ------------------
  |  Branch (7687:25): [True: 16.7k, False: 16.7k]
  ------------------
 7688|  16.7k|                        commonBuiltins.append(", int, int, int");
 7689|  16.7k|                    }
 7690|  33.5k|                    commonBuiltins.append(");\n");
 7691|  33.5k|                }
 7692|       |
 7693|  4.79k|                commonBuiltins.append(dataType);
 7694|  4.79k|                commonBuiltins.append(" imageAtomicCompSwap(volatile coherent nontemporal ");
 7695|  4.79k|                commonBuiltins.append(imageParams);
 7696|  4.79k|                commonBuiltins.append(", ");
 7697|  4.79k|                commonBuiltins.append(dataType);
 7698|  4.79k|                commonBuiltins.append(", ");
 7699|  4.79k|                commonBuiltins.append(dataType);
 7700|  4.79k|                if (j == 1) {
  ------------------
  |  Branch (7700:21): [True: 2.39k, False: 2.39k]
  ------------------
 7701|  2.39k|                    commonBuiltins.append(", int, int, int, int, int");
 7702|  2.39k|                }
 7703|  4.79k|                commonBuiltins.append(");\n");
 7704|  4.79k|            }
 7705|       |
 7706|  2.39k|            commonBuiltins.append(dataType);
 7707|  2.39k|            commonBuiltins.append(" imageAtomicLoad(volatile coherent nontemporal ");
 7708|  2.39k|            commonBuiltins.append(imageParams);
 7709|  2.39k|            commonBuiltins.append(", int, int, int);\n");
 7710|       |
 7711|  2.39k|            commonBuiltins.append("void imageAtomicStore(volatile coherent nontemporal ");
 7712|  2.39k|            commonBuiltins.append(imageParams);
 7713|  2.39k|            commonBuiltins.append(", ");
 7714|  2.39k|            commonBuiltins.append(dataType);
 7715|  2.39k|            commonBuiltins.append(", int, int, int);\n");
 7716|       |
 7717|  2.39k|        } else {
 7718|       |            // not int or uint
 7719|       |            // GL_ARB_ES3_1_compatibility
 7720|       |            // TODO: spec issue: are there restrictions on the kind of layout() that can be used?  what about dropping memory qualifiers?
 7721|  1.19k|            if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (7721:17): [True: 0, False: 1.19k]
  |  Branch (7721:42): [True: 0, False: 0]
  ------------------
 7722|      0|                commonBuiltins.append("float imageAtomicExchange(volatile coherent nontemporal ");
 7723|      0|                commonBuiltins.append(imageParams);
 7724|      0|                commonBuiltins.append(", float);\n");
 7725|      0|            }
 7726|       |
 7727|       |            // GL_NV_shader_atomic_fp16_vector
 7728|  1.19k|            if (profile != EEsProfile && version >= 430) {
  ------------------
  |  Branch (7728:17): [True: 1.19k, False: 0]
  |  Branch (7728:42): [True: 220, False: 979]
  ------------------
 7729|    220|                const int numFp16Builtins = 4;
 7730|    220|                const char* atomicFp16Func[numFp16Builtins] = {
 7731|    220|                    " imageAtomicAdd(volatile coherent nontemporal ",
 7732|    220|                    " imageAtomicMin(volatile coherent nontemporal ",
 7733|    220|                    " imageAtomicMax(volatile coherent nontemporal ",
 7734|    220|                    " imageAtomicExchange(volatile coherent nontemporal "
 7735|    220|                };
 7736|    220|                const int numFp16DataTypes = 2;
 7737|    220|                const char* atomicFp16DataTypes[numFp16DataTypes] = {
 7738|    220|                    "f16vec2",
 7739|    220|                    "f16vec4"
 7740|    220|                };
 7741|       |                // Loop twice to add prototypes with/without scope/semantics
 7742|    660|                for (int j = 0; j < numFp16DataTypes; ++j) {
  ------------------
  |  Branch (7742:33): [True: 440, False: 220]
  ------------------
 7743|  2.20k|                    for (int i = 0; i < numFp16Builtins; ++i) {
  ------------------
  |  Branch (7743:37): [True: 1.76k, False: 440]
  ------------------
 7744|  1.76k|                        commonBuiltins.append(atomicFp16DataTypes[j]);
 7745|  1.76k|                        commonBuiltins.append(atomicFp16Func[i]);
 7746|  1.76k|                        commonBuiltins.append(imageParams);
 7747|  1.76k|                        commonBuiltins.append(", ");
 7748|  1.76k|                        commonBuiltins.append(atomicFp16DataTypes[j]);
 7749|  1.76k|                        commonBuiltins.append(");\n");
 7750|  1.76k|                    }
 7751|    440|                }
 7752|    220|            }
 7753|       |
 7754|  1.19k|            if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (7754:17): [True: 1.19k, False: 0]
  |  Branch (7754:42): [True: 220, False: 979]
  ------------------
 7755|    220|                commonBuiltins.append("float imageAtomicAdd(volatile coherent nontemporal ");
 7756|    220|                commonBuiltins.append(imageParams);
 7757|    220|                commonBuiltins.append(", float);\n");
 7758|       |
 7759|    220|                commonBuiltins.append("float imageAtomicAdd(volatile coherent nontemporal ");
 7760|    220|                commonBuiltins.append(imageParams);
 7761|    220|                commonBuiltins.append(", float");
 7762|    220|                commonBuiltins.append(", int, int, int);\n");
 7763|       |
 7764|    220|                commonBuiltins.append("float imageAtomicExchange(volatile coherent nontemporal ");
 7765|    220|                commonBuiltins.append(imageParams);
 7766|    220|                commonBuiltins.append(", float);\n");
 7767|       |
 7768|    220|                commonBuiltins.append("float imageAtomicExchange(volatile coherent nontemporal ");
 7769|    220|                commonBuiltins.append(imageParams);
 7770|    220|                commonBuiltins.append(", float");
 7771|    220|                commonBuiltins.append(", int, int, int);\n");
 7772|       |
 7773|    220|                commonBuiltins.append("float imageAtomicLoad(readonly volatile coherent nontemporal ");
 7774|    220|                commonBuiltins.append(imageParams);
 7775|    220|                commonBuiltins.append(", int, int, int);\n");
 7776|       |
 7777|    220|                commonBuiltins.append("void imageAtomicStore(writeonly volatile coherent nontemporal ");
 7778|    220|                commonBuiltins.append(imageParams);
 7779|    220|                commonBuiltins.append(", float");
 7780|    220|                commonBuiltins.append(", int, int, int);\n");
 7781|       |
 7782|    220|                commonBuiltins.append("float imageAtomicMin(volatile coherent nontemporal ");
 7783|    220|                commonBuiltins.append(imageParams);
 7784|    220|                commonBuiltins.append(", float);\n");
 7785|       |
 7786|    220|                commonBuiltins.append("float imageAtomicMin(volatile coherent nontemporal ");
 7787|    220|                commonBuiltins.append(imageParams);
 7788|    220|                commonBuiltins.append(", float");
 7789|    220|                commonBuiltins.append(", int, int, int);\n");
 7790|       |
 7791|    220|                commonBuiltins.append("float imageAtomicMax(volatile coherent nontemporal ");
 7792|    220|                commonBuiltins.append(imageParams);
 7793|    220|                commonBuiltins.append(", float);\n");
 7794|       |
 7795|    220|                commonBuiltins.append("float imageAtomicMax(volatile coherent nontemporal ");
 7796|    220|                commonBuiltins.append(imageParams);
 7797|    220|                commonBuiltins.append(", float");
 7798|    220|                commonBuiltins.append(", int, int, int);\n");
 7799|    220|            }
 7800|  1.19k|        }
 7801|  3.59k|    }
 7802|       |
 7803|  3.59k|    if (sampler.dim == EsdRect || sampler.dim == EsdBuffer || sampler.shadow || sampler.isMultiSample())
  ------------------
  |  Branch (7803:9): [True: 327, False: 3.27k]
  |  Branch (7803:35): [True: 327, False: 2.94k]
  |  Branch (7803:63): [True: 0, False: 2.94k]
  |  Branch (7803:81): [True: 654, False: 2.28k]
  ------------------
 7804|  1.30k|        return;
 7805|       |
 7806|  2.28k|    if (profile == EEsProfile || version < 450)
  ------------------
  |  Branch (7806:9): [True: 0, False: 2.28k]
  |  Branch (7806:34): [True: 1.86k, False: 420]
  ------------------
 7807|  1.86k|        return;
 7808|       |
 7809|    420|    TString imageLodParams = typeName;
 7810|    420|    if (dims == 1)
  ------------------
  |  Branch (7810:9): [True: 60, False: 360]
  ------------------
 7811|     60|        imageLodParams.append(", int");
 7812|    360|    else {
 7813|    360|        imageLodParams.append(", ivec");
 7814|    360|        imageLodParams.append(postfixes[dims]);
 7815|    360|    }
 7816|    420|    imageLodParams.append(", int");
 7817|       |
 7818|    420|    commonBuiltins.append(prefixes[sampler.type]);
 7819|    420|    commonBuiltins.append("vec4 imageLoadLodAMD(readonly volatile coherent nontemporal ");
 7820|    420|    commonBuiltins.append(imageLodParams);
 7821|    420|    commonBuiltins.append(");\n");
 7822|       |
 7823|    420|    commonBuiltins.append("void imageStoreLodAMD(writeonly volatile coherent nontemporal ");
 7824|    420|    commonBuiltins.append(imageLodParams);
 7825|    420|    commonBuiltins.append(", ");
 7826|    420|    commonBuiltins.append(prefixes[sampler.type]);
 7827|    420|    commonBuiltins.append("vec4);\n");
 7828|       |
 7829|    420|    if (! sampler.is1D()) {
  ------------------
  |  Branch (7829:9): [True: 300, False: 120]
  ------------------
 7830|    300|        commonBuiltins.append("int sparseImageLoadLodAMD(readonly volatile coherent nontemporal ");
 7831|    300|        commonBuiltins.append(imageLodParams);
 7832|    300|        commonBuiltins.append(", out ");
 7833|    300|        commonBuiltins.append(prefixes[sampler.type]);
 7834|    300|        commonBuiltins.append("vec4");
 7835|    300|        commonBuiltins.append(");\n");
 7836|    300|    }
 7837|    420|}
_ZN7glslang9TBuiltIns18addSubpassSamplingENS_8TSamplerERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS_14pool_allocatorIcEEEEi8EProfile:
 7846|    614|{
 7847|    614|    stageBuiltins[EShLangFragment].append(prefixes[sampler.type]);
 7848|    614|    stageBuiltins[EShLangFragment].append("vec4 subpassLoad");
 7849|    614|    stageBuiltins[EShLangFragment].append("(");
 7850|    614|    stageBuiltins[EShLangFragment].append(typeName.c_str());
 7851|    614|    if (sampler.isMultiSample())
  ------------------
  |  Branch (7851:9): [True: 307, False: 307]
  ------------------
 7852|    307|        stageBuiltins[EShLangFragment].append(", int");
 7853|    614|    stageBuiltins[EShLangFragment].append(");\n");
 7854|    614|}
_ZN7glslang9TBuiltIns20addSamplingFunctionsENS_8TSamplerERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS_14pool_allocatorIcEEEEi8EProfile:
 7863|  7.51k|{
 7864|       |    //
 7865|       |    // texturing
 7866|       |    //
 7867|  22.5k|    for (int proj = 0; proj <= 1; ++proj) { // loop over "bool" projective or not
  ------------------
  |  Branch (7867:24): [True: 15.0k, False: 7.51k]
  ------------------
 7868|       |
 7869|  15.0k|        if (proj && (sampler.dim == EsdCube || sampler.isBuffer() || sampler.arrayed || sampler.isMultiSample()
  ------------------
  |  Branch (7869:13): [True: 7.51k, False: 7.51k]
  |  Branch (7869:22): [True: 1.44k, False: 6.07k]
  |  Branch (7869:48): [True: 614, False: 5.45k]
  |  Branch (7869:70): [True: 2.06k, False: 3.39k]
  |  Branch (7869:89): [True: 614, False: 2.78k]
  ------------------
 7870|  2.78k|            || !sampler.isCombined()))
  ------------------
  |  Branch (7870:16): [True: 1.22k, False: 1.55k]
  ------------------
 7871|  5.96k|            continue;
 7872|       |
 7873|  27.2k|        for (int lod = 0; lod <= 1; ++lod) {
  ------------------
  |  Branch (7873:27): [True: 18.1k, False: 9.07k]
  ------------------
 7874|       |
 7875|  18.1k|            if (lod && (sampler.isBuffer() || sampler.isRect() || sampler.isMultiSample() || !sampler.isCombined()))
  ------------------
  |  Branch (7875:17): [True: 9.07k, False: 9.07k]
  |  Branch (7875:25): [True: 614, False: 8.45k]
  |  Branch (7875:47): [True: 1.13k, False: 7.31k]
  |  Branch (7875:67): [True: 1.22k, False: 6.09k]
  |  Branch (7875:94): [True: 2.14k, False: 3.94k]
  ------------------
 7876|  5.13k|                continue;
 7877|  13.0k|            if (lod && sampler.dim == Esd2D && sampler.arrayed && sampler.shadow)
  ------------------
  |  Branch (7877:17): [True: 3.94k, False: 9.07k]
  |  Branch (7877:24): [True: 1.24k, False: 2.69k]
  |  Branch (7877:48): [True: 416, False: 832]
  |  Branch (7877:67): [True: 109, False: 307]
  ------------------
 7878|    109|                continue;
 7879|  12.9k|            if (lod && sampler.dim == EsdCube && sampler.shadow)
  ------------------
  |  Branch (7879:17): [True: 3.83k, False: 9.07k]
  |  Branch (7879:24): [True: 832, False: 3.00k]
  |  Branch (7879:50): [True: 218, False: 614]
  ------------------
 7880|    218|                continue;
 7881|       |
 7882|  38.0k|            for (int bias = 0; bias <= 1; ++bias) {
  ------------------
  |  Branch (7882:32): [True: 25.3k, False: 12.6k]
  ------------------
 7883|       |
 7884|  25.3k|                if (bias && (lod || sampler.isMultiSample() || !sampler.isCombined()))
  ------------------
  |  Branch (7884:21): [True: 12.6k, False: 12.6k]
  |  Branch (7884:30): [True: 3.61k, False: 9.07k]
  |  Branch (7884:37): [True: 1.22k, False: 7.84k]
  |  Branch (7884:64): [True: 2.76k, False: 5.08k]
  ------------------
 7885|  7.60k|                    continue;
 7886|  17.7k|                if (bias && (sampler.dim == Esd2D || sampler.dim == EsdCube) && sampler.shadow && sampler.arrayed)
  ------------------
  |  Branch (7886:21): [True: 5.08k, False: 12.6k]
  |  Branch (7886:30): [True: 1.24k, False: 3.83k]
  |  Branch (7886:54): [True: 832, False: 3.00k]
  |  Branch (7886:81): [True: 545, False: 1.53k]
  |  Branch (7886:99): [True: 218, False: 327]
  ------------------
 7887|    218|                    continue;
 7888|  17.5k|                if (bias && (sampler.isRect() || sampler.isBuffer()))
  ------------------
  |  Branch (7888:21): [True: 4.86k, False: 12.6k]
  |  Branch (7888:30): [True: 832, False: 4.03k]
  |  Branch (7888:50): [True: 307, False: 3.72k]
  ------------------
 7889|  1.13k|                    continue;
 7890|       |
 7891|  49.2k|                for (int offset = 0; offset <= 1; ++offset) { // loop over "bool" offset or not
  ------------------
  |  Branch (7891:38): [True: 32.8k, False: 16.4k]
  ------------------
 7892|       |
 7893|  32.8k|                    if (proj + offset + bias + lod > 3)
  ------------------
  |  Branch (7893:25): [True: 0, False: 32.8k]
  ------------------
 7894|      0|                        continue;
 7895|  32.8k|                    if (offset && (sampler.dim == EsdCube || sampler.isBuffer() || sampler.isMultiSample()))
  ------------------
  |  Branch (7895:25): [True: 16.4k, False: 16.4k]
  |  Branch (7895:36): [True: 2.78k, False: 13.6k]
  |  Branch (7895:62): [True: 614, False: 13.0k]
  |  Branch (7895:84): [True: 1.22k, False: 11.7k]
  ------------------
 7896|  4.62k|                        continue;
 7897|       |
 7898|  84.5k|                    for (int fetch = 0; fetch <= 1; ++fetch) { // loop over "bool" fetch or not
  ------------------
  |  Branch (7898:41): [True: 56.3k, False: 28.1k]
  ------------------
 7899|       |
 7900|  56.3k|                        if (proj + offset + fetch + bias + lod > 3)
  ------------------
  |  Branch (7900:29): [True: 2.27k, False: 54.1k]
  ------------------
 7901|  2.27k|                            continue;
 7902|  54.1k|                        if (fetch && (lod || bias))
  ------------------
  |  Branch (7902:29): [True: 25.9k, False: 28.1k]
  |  Branch (7902:39): [True: 5.47k, False: 20.4k]
  |  Branch (7902:46): [True: 5.58k, False: 14.8k]
  ------------------
 7903|  11.0k|                            continue;
 7904|  43.0k|                        if (fetch && (sampler.shadow || sampler.dim == EsdCube))
  ------------------
  |  Branch (7904:29): [True: 14.8k, False: 28.1k]
  |  Branch (7904:39): [True: 1.96k, False: 12.8k]
  |  Branch (7904:57): [True: 1.22k, False: 11.6k]
  ------------------
 7905|  3.19k|                            continue;
 7906|  39.8k|                        if (fetch == 0 && (sampler.isMultiSample() || sampler.isBuffer()
  ------------------
  |  Branch (7906:29): [True: 28.1k, False: 11.6k]
  |  Branch (7906:44): [True: 1.22k, False: 26.9k]
  |  Branch (7906:71): [True: 614, False: 26.3k]
  ------------------
 7907|  26.3k|                            || !sampler.isCombined()))
  ------------------
  |  Branch (7907:32): [True: 4.29k, False: 22.0k]
  ------------------
 7908|  6.14k|                            continue;
 7909|       |
 7910|   101k|                        for (int grad = 0; grad <= 1; ++grad) { // loop over "bool" grad or not
  ------------------
  |  Branch (7910:44): [True: 67.4k, False: 33.7k]
  ------------------
 7911|       |
 7912|  67.4k|                            if (grad && (lod || bias || sampler.isMultiSample() || !sampler.isCombined()))
  ------------------
  |  Branch (7912:33): [True: 33.7k, False: 33.7k]
  |  Branch (7912:42): [True: 6.61k, False: 27.1k]
  |  Branch (7912:49): [True: 6.72k, False: 20.3k]
  |  Branch (7912:57): [True: 1.22k, False: 19.1k]
  |  Branch (7912:84): [True: 3.99k, False: 15.1k]
  ------------------
 7913|  18.5k|                                continue;
 7914|  48.8k|                            if (grad && sampler.isBuffer())
  ------------------
  |  Branch (7914:33): [True: 15.1k, False: 33.7k]
  |  Branch (7914:41): [True: 307, False: 14.8k]
  ------------------
 7915|    307|                                continue;
 7916|  48.5k|                            if (proj + offset + fetch + grad + bias + lod > 3)
  ------------------
  |  Branch (7916:33): [True: 1.22k, False: 47.3k]
  ------------------
 7917|  1.22k|                                continue;
 7918|       |
 7919|   142k|                            for (int extraProj = 0; extraProj <= 1; ++extraProj) {
  ------------------
  |  Branch (7919:53): [True: 94.7k, False: 47.3k]
  ------------------
 7920|  94.7k|                                bool compare = false;
 7921|  94.7k|                                int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
  ------------------
  |  Branch (7921:72): [True: 23.9k, False: 70.7k]
  ------------------
 7922|       |                                // skip dummy unused second component for 1D non-array shadows
 7923|  94.7k|                                if (sampler.shadow && totalDims < 2)
  ------------------
  |  Branch (7923:37): [True: 12.4k, False: 82.2k]
  |  Branch (7923:55): [True: 3.48k, False: 8.93k]
  ------------------
 7924|  3.48k|                                    totalDims = 2;
 7925|  94.7k|                                totalDims += (sampler.shadow ? 1 : 0) + proj;
  ------------------
  |  Branch (7925:47): [True: 12.4k, False: 82.2k]
  ------------------
 7926|  94.7k|                                if (totalDims > 4 && sampler.shadow) {
  ------------------
  |  Branch (7926:37): [True: 436, False: 94.2k]
  |  Branch (7926:54): [True: 436, False: 0]
  ------------------
 7927|    436|                                    compare = true;
 7928|    436|                                    totalDims = 4;
 7929|    436|                                }
 7930|  94.7k|                                assert(totalDims <= 4);
 7931|       |
 7932|  94.7k|                                if (extraProj && ! proj)
  ------------------
  |  Branch (7932:37): [True: 47.3k, False: 47.3k]
  |  Branch (7932:50): [True: 32.8k, False: 14.4k]
  ------------------
 7933|  32.8k|                                    continue;
 7934|  61.8k|                                if (extraProj && (sampler.dim == Esd3D || sampler.shadow || !sampler.isCombined()))
  ------------------
  |  Branch (7934:37): [True: 14.4k, False: 47.3k]
  |  Branch (7934:51): [True: 3.37k, False: 11.0k]
  |  Branch (7934:75): [True: 2.18k, False: 8.90k]
  |  Branch (7934:93): [True: 0, False: 8.90k]
  ------------------
 7935|  5.55k|                                    continue;
 7936|       |
 7937|       |                                // loop over 16-bit floating-point texel addressing
 7938|   168k|                                for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr)
  ------------------
  |  Branch (7938:58): [True: 112k, False: 56.2k]
  ------------------
 7939|   112k|                                {
 7940|   112k|                                    if (f16TexAddr && sampler.type != EbtFloat16)
  ------------------
  |  Branch (7940:41): [True: 56.2k, False: 56.2k]
  |  Branch (7940:55): [True: 54.0k, False: 2.20k]
  ------------------
 7941|  54.0k|                                        continue;
 7942|  58.4k|                                    if (f16TexAddr && sampler.shadow && ! compare) {
  ------------------
  |  Branch (7942:41): [True: 2.20k, False: 56.2k]
  |  Branch (7942:55): [True: 570, False: 1.63k]
  |  Branch (7942:73): [True: 550, False: 20]
  ------------------
 7943|    550|                                        compare = true; // compare argument is always present
 7944|    550|                                        totalDims--;
 7945|    550|                                    }
 7946|       |                                    // loop over "bool" lod clamp
 7947|   175k|                                    for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp)
  ------------------
  |  Branch (7947:60): [True: 116k, False: 58.4k]
  ------------------
 7948|   116k|                                    {
 7949|   116k|                                        if (lodClamp && (profile == EEsProfile || version < 450))
  ------------------
  |  Branch (7949:45): [True: 58.4k, False: 58.4k]
  |  Branch (7949:58): [True: 0, False: 58.4k]
  |  Branch (7949:83): [True: 48.5k, False: 9.86k]
  ------------------
 7950|  48.5k|                                            continue;
 7951|  68.3k|                                        if (lodClamp && (proj || lod || fetch))
  ------------------
  |  Branch (7951:45): [True: 9.86k, False: 58.4k]
  |  Branch (7951:58): [True: 4.05k, False: 5.81k]
  |  Branch (7951:66): [True: 780, False: 5.03k]
  |  Branch (7951:73): [True: 2.10k, False: 2.93k]
  ------------------
 7952|  6.93k|                                            continue;
 7953|       |
 7954|       |                                        // loop over "bool" sparse or not
 7955|   184k|                                        for (int sparse = 0; sparse <= 1; ++sparse)
  ------------------
  |  Branch (7955:62): [True: 122k, False: 61.3k]
  ------------------
 7956|   122k|                                        {
 7957|   122k|                                            if (sparse && (profile == EEsProfile || version < 450))
  ------------------
  |  Branch (7957:49): [True: 61.3k, False: 61.3k]
  |  Branch (7957:60): [True: 0, False: 61.3k]
  |  Branch (7957:85): [True: 48.5k, False: 12.7k]
  ------------------
 7958|  48.5k|                                                continue;
 7959|       |                                            // Sparse sampling is not for 1D/1D array texture, buffer texture, and
 7960|       |                                            // projective texture
 7961|  74.1k|                                            if (sparse && (sampler.is1D() || sampler.isBuffer() || proj))
  ------------------
  |  Branch (7961:49): [True: 12.7k, False: 61.3k]
  |  Branch (7961:60): [True: 4.18k, False: 8.61k]
  |  Branch (7961:78): [True: 100, False: 8.51k]
  |  Branch (7961:100): [True: 2.71k, False: 5.80k]
  ------------------
 7962|  6.99k|                                                continue;
 7963|       |
 7964|  67.1k|                                            TString s;
 7965|       |
 7966|       |                                            // return type
 7967|  67.1k|                                            if (sparse)
  ------------------
  |  Branch (7967:49): [True: 5.80k, False: 61.3k]
  ------------------
 7968|  5.80k|                                                s.append("int ");
 7969|  61.3k|                                            else {
 7970|  61.3k|                                                if (sampler.shadow)
  ------------------
  |  Branch (7970:53): [True: 7.71k, False: 53.6k]
  ------------------
 7971|  7.71k|                                                    if (sampler.type == EbtFloat16)
  ------------------
  |  Branch (7971:57): [True: 1.76k, False: 5.95k]
  ------------------
 7972|  1.76k|                                                        s.append("float16_t ");
 7973|  5.95k|                                                    else
 7974|  5.95k|                                                        s.append("float ");
 7975|  53.6k|                                                else {
 7976|  53.6k|                                                    s.append(prefixes[sampler.type]);
 7977|  53.6k|                                                    s.append("vec4 ");
 7978|  53.6k|                                                }
 7979|  61.3k|                                            }
 7980|       |
 7981|       |                                            // name
 7982|  67.1k|                                            if (sparse) {
  ------------------
  |  Branch (7982:49): [True: 5.80k, False: 61.3k]
  ------------------
 7983|  5.80k|                                                if (fetch)
  ------------------
  |  Branch (7983:53): [True: 1.40k, False: 4.40k]
  ------------------
 7984|  1.40k|                                                    s.append("sparseTexel");
 7985|  4.40k|                                                else
 7986|  4.40k|                                                    s.append("sparseTexture");
 7987|  5.80k|                                            }
 7988|  61.3k|                                            else {
 7989|  61.3k|                                                if (fetch)
  ------------------
  |  Branch (7989:53): [True: 19.9k, False: 41.4k]
  ------------------
 7990|  19.9k|                                                    s.append("texel");
 7991|  41.4k|                                                else
 7992|  41.4k|                                                    s.append("texture");
 7993|  61.3k|                                            }
 7994|  67.1k|                                            if (proj)
  ------------------
  |  Branch (7994:49): [True: 24.2k, False: 42.9k]
  ------------------
 7995|  24.2k|                                                s.append("Proj");
 7996|  67.1k|                                            if (lod)
  ------------------
  |  Branch (7996:49): [True: 8.62k, False: 58.5k]
  ------------------
 7997|  8.62k|                                                s.append("Lod");
 7998|  67.1k|                                            if (grad)
  ------------------
  |  Branch (7998:49): [True: 19.9k, False: 47.2k]
  ------------------
 7999|  19.9k|                                                s.append("Grad");
 8000|  67.1k|                                            if (fetch)
  ------------------
  |  Branch (8000:49): [True: 21.3k, False: 45.8k]
  ------------------
 8001|  21.3k|                                                s.append("Fetch");
 8002|  67.1k|                                            if (offset)
  ------------------
  |  Branch (8002:49): [True: 29.1k, False: 38.0k]
  ------------------
 8003|  29.1k|                                                s.append("Offset");
 8004|  67.1k|                                            if (lodClamp)
  ------------------
  |  Branch (8004:49): [True: 4.90k, False: 62.2k]
  ------------------
 8005|  4.90k|                                                s.append("Clamp");
 8006|  67.1k|                                            if (lodClamp != 0 || sparse)
  ------------------
  |  Branch (8006:49): [True: 4.90k, False: 62.2k]
  |  Branch (8006:66): [True: 3.83k, False: 58.4k]
  ------------------
 8007|  8.73k|                                                s.append("ARB");
 8008|  67.1k|                                            s.append("(");
 8009|       |
 8010|       |                                            // sampler type
 8011|  67.1k|                                            s.append(typeName);
 8012|       |                                            // P coordinate
 8013|  67.1k|                                            if (extraProj) {
  ------------------
  |  Branch (8013:49): [True: 9.19k, False: 57.9k]
  ------------------
 8014|  9.19k|                                                if (f16TexAddr)
  ------------------
  |  Branch (8014:53): [True: 290, False: 8.90k]
  ------------------
 8015|    290|                                                    s.append(",f16vec4");
 8016|  8.90k|                                                else
 8017|  8.90k|                                                    s.append(",vec4");
 8018|  57.9k|                                            } else {
 8019|  57.9k|                                                s.append(",");
 8020|  57.9k|                                                TBasicType t = fetch ? EbtInt : (f16TexAddr ? EbtFloat16 : EbtFloat);
  ------------------
  |  Branch (8020:64): [True: 18.5k, False: 39.4k]
  |  Branch (8020:82): [True: 3.12k, False: 36.3k]
  ------------------
 8021|  57.9k|                                                if (totalDims == 1)
  ------------------
  |  Branch (8021:53): [True: 5.37k, False: 52.6k]
  ------------------
 8022|  5.37k|                                                    s.append(TType::getBasicString(t));
 8023|  52.6k|                                                else {
 8024|  52.6k|                                                    s.append(prefixes[t]);
 8025|  52.6k|                                                    s.append("vec");
 8026|  52.6k|                                                    s.append(postfixes[totalDims]);
 8027|  52.6k|                                                }
 8028|  57.9k|                                            }
 8029|       |                                            // non-optional compare
 8030|  67.1k|                                            if (compare)
  ------------------
  |  Branch (8030:49): [True: 1.61k, False: 65.5k]
  ------------------
 8031|  1.61k|                                                s.append(",float");
 8032|       |
 8033|       |                                            // non-optional lod argument (lod that's not driven by lod loop) or sample
 8034|  67.1k|                                            if ((fetch && !sampler.isBuffer() &&
  ------------------
  |  Branch (8034:50): [True: 21.3k, False: 45.8k]
  |  Branch (8034:59): [True: 20.7k, False: 634]
  ------------------
 8035|  20.7k|                                                 !sampler.isRect() && !sampler.isMultiSample())
  ------------------
  |  Branch (8035:50): [True: 16.6k, False: 4.10k]
  |  Branch (8035:71): [True: 15.1k, False: 1.46k]
  ------------------
 8036|  52.0k|                                                 || (sampler.isMultiSample() && fetch))
  ------------------
  |  Branch (8036:54): [True: 1.46k, False: 50.5k]
  |  Branch (8036:81): [True: 1.46k, False: 0]
  ------------------
 8037|  16.6k|                                                s.append(",int");
 8038|       |                                            // non-optional lod
 8039|  67.1k|                                            if (lod) {
  ------------------
  |  Branch (8039:49): [True: 8.62k, False: 58.5k]
  ------------------
 8040|  8.62k|                                                if (f16TexAddr)
  ------------------
  |  Branch (8040:53): [True: 420, False: 8.20k]
  ------------------
 8041|    420|                                                    s.append(",float16_t");
 8042|  8.20k|                                                else
 8043|  8.20k|                                                    s.append(",float");
 8044|  8.62k|                                            }
 8045|       |
 8046|       |                                            // gradient arguments
 8047|  67.1k|                                            if (grad) {
  ------------------
  |  Branch (8047:49): [True: 19.9k, False: 47.2k]
  ------------------
 8048|  19.9k|                                                if (dimMap[sampler.dim] == 1) {
  ------------------
  |  Branch (8048:53): [True: 5.47k, False: 14.5k]
  ------------------
 8049|  5.47k|                                                    if (f16TexAddr)
  ------------------
  |  Branch (8049:57): [True: 280, False: 5.19k]
  ------------------
 8050|    280|                                                        s.append(",float16_t,float16_t");
 8051|  5.19k|                                                    else
 8052|  5.19k|                                                        s.append(",float,float");
 8053|  14.5k|                                                } else {
 8054|  14.5k|                                                    if (f16TexAddr)
  ------------------
  |  Branch (8054:57): [True: 1.07k, False: 13.4k]
  ------------------
 8055|  1.07k|                                                        s.append(",f16vec");
 8056|  13.4k|                                                    else
 8057|  13.4k|                                                        s.append(",vec");
 8058|  14.5k|                                                    s.append(postfixes[dimMap[sampler.dim]]);
 8059|  14.5k|                                                    if (f16TexAddr)
  ------------------
  |  Branch (8059:57): [True: 1.07k, False: 13.4k]
  ------------------
 8060|  1.07k|                                                        s.append(",f16vec");
 8061|  13.4k|                                                    else
 8062|  13.4k|                                                        s.append(",vec");
 8063|  14.5k|                                                    s.append(postfixes[dimMap[sampler.dim]]);
 8064|  14.5k|                                                }
 8065|  19.9k|                                            }
 8066|       |                                            // offset
 8067|  67.1k|                                            if (offset) {
  ------------------
  |  Branch (8067:49): [True: 29.1k, False: 38.0k]
  ------------------
 8068|  29.1k|                                                if (dimMap[sampler.dim] == 1)
  ------------------
  |  Branch (8068:53): [True: 9.51k, False: 19.6k]
  ------------------
 8069|  9.51k|                                                    s.append(",int");
 8070|  19.6k|                                                else {
 8071|  19.6k|                                                    s.append(",ivec");
 8072|  19.6k|                                                    s.append(postfixes[dimMap[sampler.dim]]);
 8073|  19.6k|                                                }
 8074|  29.1k|                                            }
 8075|       |
 8076|       |                                            // lod clamp
 8077|  67.1k|                                            if (lodClamp) {
  ------------------
  |  Branch (8077:49): [True: 4.90k, False: 62.2k]
  ------------------
 8078|  4.90k|                                                if (f16TexAddr)
  ------------------
  |  Branch (8078:53): [True: 1.18k, False: 3.72k]
  ------------------
 8079|  1.18k|                                                    s.append(",float16_t");
 8080|  3.72k|                                                else
 8081|  3.72k|                                                    s.append(",float");
 8082|  4.90k|                                            }
 8083|       |                                            // texel out (for sparse texture)
 8084|  67.1k|                                            if (sparse) {
  ------------------
  |  Branch (8084:49): [True: 5.80k, False: 61.3k]
  ------------------
 8085|  5.80k|                                                s.append(",out ");
 8086|  5.80k|                                                if (sampler.shadow)
  ------------------
  |  Branch (8086:53): [True: 1.20k, False: 4.60k]
  ------------------
 8087|  1.20k|                                                    if (sampler.type == EbtFloat16)
  ------------------
  |  Branch (8087:57): [True: 800, False: 400]
  ------------------
 8088|    800|                                                        s.append("float16_t");
 8089|    400|                                                    else
 8090|    400|                                                        s.append("float");
 8091|  4.60k|                                                else {
 8092|  4.60k|                                                    s.append(prefixes[sampler.type]);
 8093|  4.60k|                                                    s.append("vec4");
 8094|  4.60k|                                                }
 8095|  5.80k|                                            }
 8096|       |                                            // optional bias
 8097|  67.1k|                                            if (bias) {
  ------------------
  |  Branch (8097:49): [True: 10.0k, False: 57.1k]
  ------------------
 8098|  10.0k|                                                if (f16TexAddr)
  ------------------
  |  Branch (8098:53): [True: 740, False: 9.33k]
  ------------------
 8099|    740|                                                    s.append(",float16_t");
 8100|  9.33k|                                                else
 8101|  9.33k|                                                    s.append(",float");
 8102|  10.0k|                                            }
 8103|  67.1k|                                            s.append(");\n");
 8104|       |
 8105|       |                                            // Add to the per-language set of built-ins
 8106|  67.1k|                                            if (!grad && (bias || lodClamp != 0)) {
  ------------------
  |  Branch (8106:49): [True: 47.2k, False: 19.9k]
  |  Branch (8106:59): [True: 10.0k, False: 37.1k]
  |  Branch (8106:67): [True: 1.80k, False: 35.3k]
  ------------------
 8107|  11.8k|                                                stageBuiltins[EShLangFragment].append(s);
 8108|  11.8k|                                                stageBuiltins[EShLangCompute].append(s);
 8109|  11.8k|                                            } else
 8110|  55.3k|                                                commonBuiltins.append(s);
 8111|       |
 8112|  67.1k|                                        }
 8113|  61.3k|                                    }
 8114|  58.4k|                                }
 8115|  56.2k|                            }
 8116|  47.3k|                        }
 8117|  33.7k|                    }
 8118|  28.1k|                }
 8119|  16.4k|            }
 8120|  12.6k|        }
 8121|  9.07k|    }
 8122|  7.51k|}
_ZN7glslang9TBuiltIns18addGatherFunctionsENS_8TSamplerERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS_14pool_allocatorIcEEEEi8EProfile:
 8131|  4.14k|{
 8132|  4.14k|    switch (sampler.dim) {
 8133|  1.44k|    case Esd2D:
  ------------------
  |  Branch (8133:5): [True: 1.44k, False: 2.69k]
  ------------------
 8134|  1.86k|    case EsdRect:
  ------------------
  |  Branch (8134:5): [True: 416, False: 3.72k]
  ------------------
 8135|  2.69k|    case EsdCube:
  ------------------
  |  Branch (8135:5): [True: 832, False: 3.30k]
  ------------------
 8136|  2.69k|        break;
 8137|  1.44k|    default:
  ------------------
  |  Branch (8137:5): [True: 1.44k, False: 2.69k]
  ------------------
 8138|  1.44k|        return;
 8139|  4.14k|    }
 8140|       |
 8141|  2.69k|    if (sampler.isMultiSample())
  ------------------
  |  Branch (8141:9): [True: 614, False: 2.08k]
  ------------------
 8142|    614|        return;
 8143|       |
 8144|  2.08k|    if (version < 140 && sampler.dim == EsdRect && sampler.type != EbtFloat)
  ------------------
  |  Branch (8144:9): [True: 0, False: 2.08k]
  |  Branch (8144:26): [True: 0, False: 0]
  |  Branch (8144:52): [True: 0, False: 0]
  ------------------
 8145|      0|        return;
 8146|       |
 8147|  6.24k|    for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) { // loop over 16-bit floating-point texel addressing
  ------------------
  |  Branch (8147:30): [True: 4.16k, False: 2.08k]
  ------------------
 8148|       |
 8149|  4.16k|        if (f16TexAddr && sampler.type != EbtFloat16)
  ------------------
  |  Branch (8149:13): [True: 2.08k, False: 2.08k]
  |  Branch (8149:27): [True: 1.98k, False: 100]
  ------------------
 8150|  1.98k|            continue;
 8151|  8.72k|        for (int offset = 0; offset < 3; ++offset) { // loop over three forms of offset in the call name:  none, Offset, and Offsets
  ------------------
  |  Branch (8151:30): [True: 6.54k, False: 2.18k]
  ------------------
 8152|       |
 8153|  19.6k|            for (int comp = 0; comp < 2; ++comp) { // loop over presence of comp argument
  ------------------
  |  Branch (8153:32): [True: 13.0k, False: 6.54k]
  ------------------
 8154|       |
 8155|  13.0k|                if (comp > 0 && sampler.shadow)
  ------------------
  |  Branch (8155:21): [True: 6.54k, False: 6.54k]
  |  Branch (8155:33): [True: 1.78k, False: 4.75k]
  ------------------
 8156|  1.78k|                    continue;
 8157|       |
 8158|  11.2k|                if (offset > 0 && sampler.dim == EsdCube)
  ------------------
  |  Branch (8158:21): [True: 7.53k, False: 3.76k]
  |  Branch (8158:35): [True: 3.01k, False: 4.51k]
  ------------------
 8159|  3.01k|                    continue;
 8160|       |
 8161|  24.8k|                for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
  ------------------
  |  Branch (8161:38): [True: 16.5k, False: 8.28k]
  ------------------
 8162|  16.5k|                    if (sparse && (profile == EEsProfile || version < 450))
  ------------------
  |  Branch (8162:25): [True: 8.28k, False: 8.28k]
  |  Branch (8162:36): [True: 0, False: 8.28k]
  |  Branch (8162:61): [True: 6.85k, False: 1.43k]
  ------------------
 8163|  6.85k|                        continue;
 8164|       |
 8165|  9.71k|                    TString s;
 8166|       |
 8167|       |                    // return type
 8168|  9.71k|                    if (sparse)
  ------------------
  |  Branch (8168:25): [True: 1.43k, False: 8.28k]
  ------------------
 8169|  1.43k|                        s.append("int ");
 8170|  8.28k|                    else {
 8171|  8.28k|                        s.append(prefixes[sampler.type]);
 8172|  8.28k|                        s.append("vec4 ");
 8173|  8.28k|                    }
 8174|       |
 8175|       |                    // name
 8176|  9.71k|                    if (sparse)
  ------------------
  |  Branch (8176:25): [True: 1.43k, False: 8.28k]
  ------------------
 8177|  1.43k|                        s.append("sparseTextureGather");
 8178|  8.28k|                    else
 8179|  8.28k|                        s.append("textureGather");
 8180|  9.71k|                    switch (offset) {
 8181|  2.64k|                    case 1:
  ------------------
  |  Branch (8181:21): [True: 2.64k, False: 7.06k]
  ------------------
 8182|  2.64k|                        s.append("Offset");
 8183|  2.64k|                        break;
 8184|  2.64k|                    case 2:
  ------------------
  |  Branch (8184:21): [True: 2.64k, False: 7.06k]
  ------------------
 8185|  2.64k|                        s.append("Offsets");
 8186|  2.64k|                        break;
 8187|  4.41k|                    default:
  ------------------
  |  Branch (8187:21): [True: 4.41k, False: 5.29k]
  ------------------
 8188|  4.41k|                        break;
 8189|  9.71k|                    }
 8190|  9.71k|                    if (sparse)
  ------------------
  |  Branch (8190:25): [True: 1.43k, False: 8.28k]
  ------------------
 8191|  1.43k|                        s.append("ARB");
 8192|  9.71k|                    s.append("(");
 8193|       |
 8194|       |                    // sampler type argument
 8195|  9.71k|                    s.append(typeName);
 8196|       |
 8197|       |                    // P coordinate argument
 8198|  9.71k|                    if (f16TexAddr)
  ------------------
  |  Branch (8198:25): [True: 660, False: 9.05k]
  ------------------
 8199|    660|                        s.append(",f16vec");
 8200|  9.05k|                    else
 8201|  9.05k|                        s.append(",vec");
 8202|  9.71k|                    int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
  ------------------
  |  Branch (8202:60): [True: 3.53k, False: 6.18k]
  ------------------
 8203|  9.71k|                    s.append(postfixes[totalDims]);
 8204|       |
 8205|       |                    // refZ argument
 8206|  9.71k|                    if (sampler.shadow)
  ------------------
  |  Branch (8206:25): [True: 1.63k, False: 8.07k]
  ------------------
 8207|  1.63k|                        s.append(",float");
 8208|       |
 8209|       |                    // offset argument
 8210|  9.71k|                    if (offset > 0) {
  ------------------
  |  Branch (8210:25): [True: 5.29k, False: 4.41k]
  ------------------
 8211|  5.29k|                        s.append(",ivec2");
 8212|  5.29k|                        if (offset == 2)
  ------------------
  |  Branch (8212:29): [True: 2.64k, False: 2.64k]
  ------------------
 8213|  2.64k|                            s.append("[4]");
 8214|  5.29k|                    }
 8215|       |
 8216|       |                    // texel out (for sparse texture)
 8217|  9.71k|                    if (sparse) {
  ------------------
  |  Branch (8217:25): [True: 1.43k, False: 8.28k]
  ------------------
 8218|  1.43k|                        s.append(",out ");
 8219|  1.43k|                        s.append(prefixes[sampler.type]);
 8220|  1.43k|                        s.append("vec4 ");
 8221|  1.43k|                    }
 8222|       |
 8223|       |                    // comp argument
 8224|  9.71k|                    if (comp)
  ------------------
  |  Branch (8224:25): [True: 4.03k, False: 5.67k]
  ------------------
 8225|  4.03k|                        s.append(",int");
 8226|       |
 8227|  9.71k|                    s.append(");\n");
 8228|  9.71k|                    commonBuiltins.append(s);
 8229|  9.71k|                }
 8230|  8.28k|            }
 8231|  6.54k|        }
 8232|  2.18k|    }
 8233|       |
 8234|  2.08k|    if (sampler.dim == EsdRect || sampler.shadow)
  ------------------
  |  Branch (8234:9): [True: 416, False: 1.66k]
  |  Branch (8234:35): [True: 436, False: 1.22k]
  ------------------
 8235|    852|        return;
 8236|       |
 8237|  1.22k|    if (profile == EEsProfile || version < 450)
  ------------------
  |  Branch (8237:9): [True: 0, False: 1.22k]
  |  Branch (8237:34): [True: 1.06k, False: 160]
  ------------------
 8238|  1.06k|        return;
 8239|       |
 8240|    480|    for (int bias = 0; bias < 2; ++bias) { // loop over presence of bias argument
  ------------------
  |  Branch (8240:24): [True: 320, False: 160]
  ------------------
 8241|       |
 8242|    960|        for (int lod = 0; lod < 2; ++lod) { // loop over presence of lod argument
  ------------------
  |  Branch (8242:27): [True: 640, False: 320]
  ------------------
 8243|       |
 8244|    640|            if ((lod && bias) || (lod == 0 && bias == 0))
  ------------------
  |  Branch (8244:18): [True: 320, False: 320]
  |  Branch (8244:25): [True: 160, False: 160]
  |  Branch (8244:35): [True: 320, False: 160]
  |  Branch (8244:47): [True: 160, False: 160]
  ------------------
 8245|    320|                continue;
 8246|       |
 8247|    960|            for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) { // loop over 16-bit floating-point texel addressing
  ------------------
  |  Branch (8247:38): [True: 640, False: 320]
  ------------------
 8248|       |
 8249|    640|                if (f16TexAddr && sampler.type != EbtFloat16)
  ------------------
  |  Branch (8249:21): [True: 320, False: 320]
  |  Branch (8249:35): [True: 240, False: 80]
  ------------------
 8250|    240|                    continue;
 8251|       |
 8252|  1.60k|                for (int offset = 0; offset < 3; ++offset) { // loop over three forms of offset in the call name:  none, Offset, and Offsets
  ------------------
  |  Branch (8252:38): [True: 1.20k, False: 400]
  ------------------
 8253|       |
 8254|  3.60k|                    for (int comp = 0; comp < 2; ++comp) { // loop over presence of comp argument
  ------------------
  |  Branch (8254:40): [True: 2.40k, False: 1.20k]
  ------------------
 8255|       |
 8256|  2.40k|                        if (comp == 0 && bias)
  ------------------
  |  Branch (8256:29): [True: 1.20k, False: 1.20k]
  |  Branch (8256:42): [True: 600, False: 600]
  ------------------
 8257|    600|                            continue;
 8258|       |
 8259|  1.80k|                        if (offset > 0 && sampler.dim == EsdCube)
  ------------------
  |  Branch (8259:29): [True: 1.20k, False: 600]
  |  Branch (8259:43): [True: 600, False: 600]
  ------------------
 8260|    600|                            continue;
 8261|       |
 8262|  3.60k|                        for (int sparse = 0; sparse <= 1; ++sparse) { // loop over "bool" sparse or not
  ------------------
  |  Branch (8262:46): [True: 2.40k, False: 1.20k]
  ------------------
 8263|  2.40k|                            if (sparse && (profile == EEsProfile || version < 450))
  ------------------
  |  Branch (8263:33): [True: 1.20k, False: 1.20k]
  |  Branch (8263:44): [True: 0, False: 1.20k]
  |  Branch (8263:69): [True: 0, False: 1.20k]
  ------------------
 8264|      0|                                continue;
 8265|       |
 8266|  2.40k|                            TString s;
 8267|       |
 8268|       |                            // return type
 8269|  2.40k|                            if (sparse)
  ------------------
  |  Branch (8269:33): [True: 1.20k, False: 1.20k]
  ------------------
 8270|  1.20k|                                s.append("int ");
 8271|  1.20k|                            else {
 8272|  1.20k|                                s.append(prefixes[sampler.type]);
 8273|  1.20k|                                s.append("vec4 ");
 8274|  1.20k|                            }
 8275|       |
 8276|       |                            // name
 8277|  2.40k|                            if (sparse)
  ------------------
  |  Branch (8277:33): [True: 1.20k, False: 1.20k]
  ------------------
 8278|  1.20k|                                s.append("sparseTextureGather");
 8279|  1.20k|                            else
 8280|  1.20k|                                s.append("textureGather");
 8281|       |
 8282|  2.40k|                            if (lod)
  ------------------
  |  Branch (8282:33): [True: 1.60k, False: 800]
  ------------------
 8283|  1.60k|                                s.append("Lod");
 8284|       |
 8285|  2.40k|                            switch (offset) {
 8286|    600|                            case 1:
  ------------------
  |  Branch (8286:29): [True: 600, False: 1.80k]
  ------------------
 8287|    600|                                s.append("Offset");
 8288|    600|                                break;
 8289|    600|                            case 2:
  ------------------
  |  Branch (8289:29): [True: 600, False: 1.80k]
  ------------------
 8290|    600|                                s.append("Offsets");
 8291|    600|                                break;
 8292|  1.20k|                            default:
  ------------------
  |  Branch (8292:29): [True: 1.20k, False: 1.20k]
  ------------------
 8293|  1.20k|                                break;
 8294|  2.40k|                            }
 8295|       |
 8296|  2.40k|                            if (lod)
  ------------------
  |  Branch (8296:33): [True: 1.60k, False: 800]
  ------------------
 8297|  1.60k|                                s.append("AMD");
 8298|    800|                            else if (sparse)
  ------------------
  |  Branch (8298:38): [True: 400, False: 400]
  ------------------
 8299|    400|                                s.append("ARB");
 8300|       |
 8301|  2.40k|                            s.append("(");
 8302|       |
 8303|       |                            // sampler type argument
 8304|  2.40k|                            s.append(typeName);
 8305|       |
 8306|       |                            // P coordinate argument
 8307|  2.40k|                            if (f16TexAddr)
  ------------------
  |  Branch (8307:33): [True: 480, False: 1.92k]
  ------------------
 8308|    480|                                s.append(",f16vec");
 8309|  1.92k|                            else
 8310|  1.92k|                                s.append(",vec");
 8311|  2.40k|                            int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0);
  ------------------
  |  Branch (8311:68): [True: 1.20k, False: 1.20k]
  ------------------
 8312|  2.40k|                            s.append(postfixes[totalDims]);
 8313|       |
 8314|       |                            // lod argument
 8315|  2.40k|                            if (lod) {
  ------------------
  |  Branch (8315:33): [True: 1.60k, False: 800]
  ------------------
 8316|  1.60k|                                if (f16TexAddr)
  ------------------
  |  Branch (8316:37): [True: 320, False: 1.28k]
  ------------------
 8317|    320|                                    s.append(",float16_t");
 8318|  1.28k|                                else
 8319|  1.28k|                                    s.append(",float");
 8320|  1.60k|                            }
 8321|       |
 8322|       |                            // offset argument
 8323|  2.40k|                            if (offset > 0) {
  ------------------
  |  Branch (8323:33): [True: 1.20k, False: 1.20k]
  ------------------
 8324|  1.20k|                                s.append(",ivec2");
 8325|  1.20k|                                if (offset == 2)
  ------------------
  |  Branch (8325:37): [True: 600, False: 600]
  ------------------
 8326|    600|                                    s.append("[4]");
 8327|  1.20k|                            }
 8328|       |
 8329|       |                            // texel out (for sparse texture)
 8330|  2.40k|                            if (sparse) {
  ------------------
  |  Branch (8330:33): [True: 1.20k, False: 1.20k]
  ------------------
 8331|  1.20k|                                s.append(",out ");
 8332|  1.20k|                                s.append(prefixes[sampler.type]);
 8333|  1.20k|                                s.append("vec4 ");
 8334|  1.20k|                            }
 8335|       |
 8336|       |                            // comp argument
 8337|  2.40k|                            if (comp)
  ------------------
  |  Branch (8337:33): [True: 1.60k, False: 800]
  ------------------
 8338|  1.60k|                                s.append(",int");
 8339|       |
 8340|       |                            // bias argument
 8341|  2.40k|                            if (bias) {
  ------------------
  |  Branch (8341:33): [True: 800, False: 1.60k]
  ------------------
 8342|    800|                                if (f16TexAddr)
  ------------------
  |  Branch (8342:37): [True: 160, False: 640]
  ------------------
 8343|    160|                                    s.append(",float16_t");
 8344|    640|                                else
 8345|    640|                                    s.append(",float");
 8346|    800|                            }
 8347|       |
 8348|  2.40k|                            s.append(");\n");
 8349|  2.40k|                            if (bias) {
  ------------------
  |  Branch (8349:33): [True: 800, False: 1.60k]
  ------------------
 8350|    800|                                stageBuiltins[EShLangFragment].append(s);
 8351|    800|                                stageBuiltins[EShLangCompute].append(s);
 8352|    800|                                stageBuiltins[EShLangTask].append(s);
 8353|    800|                                stageBuiltins[EShLangMesh].append(s);
 8354|    800|                            } else
 8355|  1.60k|                                commonBuiltins.append(s);
 8356|  2.40k|                        }
 8357|  1.20k|                    }
 8358|  1.20k|                }
 8359|    400|            }
 8360|    320|        }
 8361|    320|    }
 8362|    160|}
_ZN7glslang9TBuiltIns10initializeERK16TBuiltInResourcei8EProfileRKNS_10SpvVersionE11EShLanguage:
 8372|    100|{
 8373|       |    //
 8374|       |    // Initialize the context-dependent (resource-dependent) built-in strings for parsing.
 8375|       |    //
 8376|       |
 8377|       |    //============================================================================
 8378|       |    //
 8379|       |    // Standard Uniforms
 8380|       |    //
 8381|       |    //============================================================================
 8382|       |
 8383|    100|    TString& s = commonBuiltins;
 8384|    100|    const int maxSize = 200;
 8385|    100|    char builtInConstant[maxSize];
 8386|       |
 8387|       |    //
 8388|       |    // Build string of implementation dependent constants.
 8389|       |    //
 8390|       |
 8391|    100|    if (profile == EEsProfile) {
  ------------------
  |  Branch (8391:9): [True: 0, False: 100]
  ------------------
 8392|      0|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxVertexAttribs = %d;", resources.maxVertexAttribs);
 8393|      0|        s.append(builtInConstant);
 8394|       |
 8395|      0|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxVertexUniformVectors = %d;", resources.maxVertexUniformVectors);
 8396|      0|        s.append(builtInConstant);
 8397|       |
 8398|      0|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxVertexTextureImageUnits = %d;", resources.maxVertexTextureImageUnits);
 8399|      0|        s.append(builtInConstant);
 8400|       |
 8401|      0|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxCombinedTextureImageUnits = %d;", resources.maxCombinedTextureImageUnits);
 8402|      0|        s.append(builtInConstant);
 8403|       |
 8404|      0|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxTextureImageUnits = %d;", resources.maxTextureImageUnits);
 8405|      0|        s.append(builtInConstant);
 8406|       |
 8407|      0|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxFragmentUniformVectors = %d;", resources.maxFragmentUniformVectors);
 8408|      0|        s.append(builtInConstant);
 8409|       |
 8410|      0|        snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxDrawBuffers = %d;", resources.maxDrawBuffers);
 8411|      0|        s.append(builtInConstant);
 8412|       |
 8413|      0|        if (version == 100) {
  ------------------
  |  Branch (8413:13): [True: 0, False: 0]
  ------------------
 8414|      0|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxVaryingVectors = %d;", resources.maxVaryingVectors);
 8415|      0|            s.append(builtInConstant);
 8416|      0|        } else {
 8417|      0|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxVertexOutputVectors = %d;", resources.maxVertexOutputVectors);
 8418|      0|            s.append(builtInConstant);
 8419|       |
 8420|      0|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxFragmentInputVectors = %d;", resources.maxFragmentInputVectors);
 8421|      0|            s.append(builtInConstant);
 8422|       |
 8423|      0|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MinProgramTexelOffset = %d;", resources.minProgramTexelOffset);
 8424|      0|            s.append(builtInConstant);
 8425|       |
 8426|      0|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxProgramTexelOffset = %d;", resources.maxProgramTexelOffset);
 8427|      0|            s.append(builtInConstant);
 8428|      0|        }
 8429|       |
 8430|      0|        if (version >= 310) {
  ------------------
  |  Branch (8430:13): [True: 0, False: 0]
  ------------------
 8431|       |            // geometry
 8432|       |
 8433|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryInputComponents = %d;", resources.maxGeometryInputComponents);
 8434|      0|            s.append(builtInConstant);
 8435|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryOutputComponents = %d;", resources.maxGeometryOutputComponents);
 8436|      0|            s.append(builtInConstant);
 8437|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryImageUniforms = %d;", resources.maxGeometryImageUniforms);
 8438|      0|            s.append(builtInConstant);
 8439|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryTextureImageUnits = %d;", resources.maxGeometryTextureImageUnits);
 8440|      0|            s.append(builtInConstant);
 8441|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryOutputVertices = %d;", resources.maxGeometryOutputVertices);
 8442|      0|            s.append(builtInConstant);
 8443|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryTotalOutputComponents = %d;", resources.maxGeometryTotalOutputComponents);
 8444|      0|            s.append(builtInConstant);
 8445|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryUniformComponents = %d;", resources.maxGeometryUniformComponents);
 8446|      0|            s.append(builtInConstant);
 8447|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryAtomicCounters = %d;", resources.maxGeometryAtomicCounters);
 8448|      0|            s.append(builtInConstant);
 8449|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryAtomicCounterBuffers = %d;", resources.maxGeometryAtomicCounterBuffers);
 8450|      0|            s.append(builtInConstant);
 8451|       |
 8452|       |            // tessellation
 8453|       |
 8454|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlInputComponents = %d;", resources.maxTessControlInputComponents);
 8455|      0|            s.append(builtInConstant);
 8456|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlOutputComponents = %d;", resources.maxTessControlOutputComponents);
 8457|      0|            s.append(builtInConstant);
 8458|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlTextureImageUnits = %d;", resources.maxTessControlTextureImageUnits);
 8459|      0|            s.append(builtInConstant);
 8460|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlUniformComponents = %d;", resources.maxTessControlUniformComponents);
 8461|      0|            s.append(builtInConstant);
 8462|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlTotalOutputComponents = %d;", resources.maxTessControlTotalOutputComponents);
 8463|      0|            s.append(builtInConstant);
 8464|       |
 8465|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationInputComponents = %d;", resources.maxTessEvaluationInputComponents);
 8466|      0|            s.append(builtInConstant);
 8467|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationOutputComponents = %d;", resources.maxTessEvaluationOutputComponents);
 8468|      0|            s.append(builtInConstant);
 8469|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationTextureImageUnits = %d;", resources.maxTessEvaluationTextureImageUnits);
 8470|      0|            s.append(builtInConstant);
 8471|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationUniformComponents = %d;", resources.maxTessEvaluationUniformComponents);
 8472|      0|            s.append(builtInConstant);
 8473|       |
 8474|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessPatchComponents = %d;", resources.maxTessPatchComponents);
 8475|      0|            s.append(builtInConstant);
 8476|       |
 8477|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxPatchVertices = %d;", resources.maxPatchVertices);
 8478|      0|            s.append(builtInConstant);
 8479|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessGenLevel = %d;", resources.maxTessGenLevel);
 8480|      0|            s.append(builtInConstant);
 8481|       |
 8482|       |            // this is here instead of with the others in initialize(version, profile) due to the dependence on gl_MaxPatchVertices
 8483|      0|            if (language == EShLangTessControl || language == EShLangTessEvaluation) {
  ------------------
  |  Branch (8483:17): [True: 0, False: 0]
  |  Branch (8483:51): [True: 0, False: 0]
  ------------------
 8484|      0|                s.append(
 8485|      0|                    "in gl_PerVertex {"
 8486|      0|                        "highp vec4 gl_Position;"
 8487|      0|                        "highp float gl_PointSize;"
 8488|      0|                        "highp vec4 gl_SecondaryPositionNV;"  // GL_NV_stereo_view_rendering
 8489|      0|                        "highp vec4 gl_PositionPerViewNV[];"  // GL_NVX_multiview_per_view_attributes
 8490|      0|                    "} gl_in[gl_MaxPatchVertices];"
 8491|      0|                    "\n");
 8492|      0|            }
 8493|      0|        }
 8494|       |
 8495|      0|        if (version >= 320) {
  ------------------
  |  Branch (8495:13): [True: 0, False: 0]
  ------------------
 8496|       |            // tessellation
 8497|       |
 8498|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlImageUniforms = %d;", resources.maxTessControlImageUniforms);
 8499|      0|            s.append(builtInConstant);
 8500|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationImageUniforms = %d;", resources.maxTessEvaluationImageUniforms);
 8501|      0|            s.append(builtInConstant);
 8502|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounters = %d;", resources.maxTessControlAtomicCounters);
 8503|      0|            s.append(builtInConstant);
 8504|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounters = %d;", resources.maxTessEvaluationAtomicCounters);
 8505|      0|            s.append(builtInConstant);
 8506|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounterBuffers = %d;", resources.maxTessControlAtomicCounterBuffers);
 8507|      0|            s.append(builtInConstant);
 8508|      0|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounterBuffers = %d;", resources.maxTessEvaluationAtomicCounterBuffers);
 8509|      0|            s.append(builtInConstant);
 8510|      0|        }
 8511|       |
 8512|      0|        if (version >= 100) {
  ------------------
  |  Branch (8512:13): [True: 0, False: 0]
  ------------------
 8513|       |            // GL_EXT_blend_func_extended
 8514|      0|            snprintf(builtInConstant, maxSize, "const mediump int gl_MaxDualSourceDrawBuffersEXT = %d;", resources.maxDualSourceDrawBuffersEXT);
 8515|      0|            s.append(builtInConstant);
 8516|       |            // this is here instead of with the others in initialize(version, profile) due to the dependence on gl_MaxDualSourceDrawBuffersEXT
 8517|      0|            if (language == EShLangFragment) {
  ------------------
  |  Branch (8517:17): [True: 0, False: 0]
  ------------------
 8518|      0|                s.append(
 8519|      0|                    "mediump vec4 gl_SecondaryFragColorEXT;"
 8520|      0|                    "mediump vec4 gl_SecondaryFragDataEXT[gl_MaxDualSourceDrawBuffersEXT];"
 8521|      0|                    "\n");
 8522|      0|            }
 8523|      0|        }
 8524|    100|    } else {
 8525|       |        // non-ES profile
 8526|       |
 8527|    100|        if (version > 400) {
  ------------------
  |  Branch (8527:13): [True: 11, False: 89]
  ------------------
 8528|     11|            snprintf(builtInConstant, maxSize, "const int  gl_MaxVertexUniformVectors = %d;", resources.maxVertexUniformVectors);
 8529|     11|            s.append(builtInConstant);
 8530|       |
 8531|     11|            snprintf(builtInConstant, maxSize, "const int  gl_MaxFragmentUniformVectors = %d;", resources.maxFragmentUniformVectors);
 8532|     11|            s.append(builtInConstant);
 8533|       |
 8534|     11|            snprintf(builtInConstant, maxSize, "const int  gl_MaxVaryingVectors = %d;", resources.maxVaryingVectors);
 8535|     11|            s.append(builtInConstant);
 8536|     11|        }
 8537|       |
 8538|    100|        snprintf(builtInConstant, maxSize, "const int  gl_MaxVertexAttribs = %d;", resources.maxVertexAttribs);
 8539|    100|        s.append(builtInConstant);
 8540|       |
 8541|    100|        snprintf(builtInConstant, maxSize, "const int  gl_MaxVertexTextureImageUnits = %d;", resources.maxVertexTextureImageUnits);
 8542|    100|        s.append(builtInConstant);
 8543|       |
 8544|    100|        snprintf(builtInConstant, maxSize, "const int  gl_MaxCombinedTextureImageUnits = %d;", resources.maxCombinedTextureImageUnits);
 8545|    100|        s.append(builtInConstant);
 8546|       |
 8547|    100|        snprintf(builtInConstant, maxSize, "const int  gl_MaxTextureImageUnits = %d;", resources.maxTextureImageUnits);
 8548|    100|        s.append(builtInConstant);
 8549|       |
 8550|    100|        snprintf(builtInConstant, maxSize, "const int  gl_MaxDrawBuffers = %d;", resources.maxDrawBuffers);
 8551|    100|        s.append(builtInConstant);
 8552|       |
 8553|    100|        snprintf(builtInConstant, maxSize, "const int  gl_MaxLights = %d;", resources.maxLights);
 8554|    100|        s.append(builtInConstant);
 8555|       |
 8556|    100|        snprintf(builtInConstant, maxSize, "const int  gl_MaxClipPlanes = %d;", resources.maxClipPlanes);
 8557|    100|        s.append(builtInConstant);
 8558|       |
 8559|    100|        snprintf(builtInConstant, maxSize, "const int  gl_MaxTextureUnits = %d;", resources.maxTextureUnits);
 8560|    100|        s.append(builtInConstant);
 8561|       |
 8562|    100|        snprintf(builtInConstant, maxSize, "const int  gl_MaxTextureCoords = %d;", resources.maxTextureCoords);
 8563|    100|        s.append(builtInConstant);
 8564|       |
 8565|    100|        snprintf(builtInConstant, maxSize, "const int  gl_MaxVertexUniformComponents = %d;", resources.maxVertexUniformComponents);
 8566|    100|        s.append(builtInConstant);
 8567|       |
 8568|       |        // Moved from just being deprecated into compatibility profile only as of 4.20
 8569|    100|        if (version < 420 || profile == ECompatibilityProfile) {
  ------------------
  |  Branch (8569:13): [True: 89, False: 11]
  |  Branch (8569:30): [True: 0, False: 11]
  ------------------
 8570|     89|            snprintf(builtInConstant, maxSize, "const int  gl_MaxVaryingFloats = %d;", resources.maxVaryingFloats);
 8571|     89|            s.append(builtInConstant);
 8572|     89|        }
 8573|       |
 8574|    100|        snprintf(builtInConstant, maxSize, "const int  gl_MaxFragmentUniformComponents = %d;", resources.maxFragmentUniformComponents);
 8575|    100|        s.append(builtInConstant);
 8576|       |
 8577|    100|        if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) {
  ------------------
  |  Branch (8577:13): [True: 0, False: 100]
  |  Branch (8577:36): [True: 0, False: 0]
  ------------------
 8578|       |            //
 8579|       |            // OpenGL'uniform' state.  Page numbers are in reference to version
 8580|       |            // 1.4 of the OpenGL specification.
 8581|       |            //
 8582|       |
 8583|       |            //
 8584|       |            // Matrix state. p. 31, 32, 37, 39, 40.
 8585|       |            //
 8586|      0|            s.append("uniform mat4  gl_TextureMatrix[gl_MaxTextureCoords];"
 8587|       |
 8588|       |            //
 8589|       |            // Derived matrix state that provides inverse and transposed versions
 8590|       |            // of the matrices above.
 8591|       |            //
 8592|      0|                        "uniform mat4  gl_TextureMatrixInverse[gl_MaxTextureCoords];"
 8593|       |
 8594|      0|                        "uniform mat4  gl_TextureMatrixTranspose[gl_MaxTextureCoords];"
 8595|       |
 8596|      0|                        "uniform mat4  gl_TextureMatrixInverseTranspose[gl_MaxTextureCoords];"
 8597|       |
 8598|       |            //
 8599|       |            // Clip planes p. 42.
 8600|       |            //
 8601|      0|                        "uniform vec4  gl_ClipPlane[gl_MaxClipPlanes];"
 8602|       |
 8603|       |            //
 8604|       |            // Light State p 50, 53, 55.
 8605|       |            //
 8606|      0|                        "uniform gl_LightSourceParameters  gl_LightSource[gl_MaxLights];"
 8607|       |
 8608|       |            //
 8609|       |            // Derived state from products of light.
 8610|       |            //
 8611|      0|                        "uniform gl_LightProducts gl_FrontLightProduct[gl_MaxLights];"
 8612|      0|                        "uniform gl_LightProducts gl_BackLightProduct[gl_MaxLights];"
 8613|       |
 8614|       |            //
 8615|       |            // Texture Environment and Generation, p. 152, p. 40-42.
 8616|       |            //
 8617|      0|                        "uniform vec4  gl_TextureEnvColor[gl_MaxTextureImageUnits];"
 8618|      0|                        "uniform vec4  gl_EyePlaneS[gl_MaxTextureCoords];"
 8619|      0|                        "uniform vec4  gl_EyePlaneT[gl_MaxTextureCoords];"
 8620|      0|                        "uniform vec4  gl_EyePlaneR[gl_MaxTextureCoords];"
 8621|      0|                        "uniform vec4  gl_EyePlaneQ[gl_MaxTextureCoords];"
 8622|      0|                        "uniform vec4  gl_ObjectPlaneS[gl_MaxTextureCoords];"
 8623|      0|                        "uniform vec4  gl_ObjectPlaneT[gl_MaxTextureCoords];"
 8624|      0|                        "uniform vec4  gl_ObjectPlaneR[gl_MaxTextureCoords];"
 8625|      0|                        "uniform vec4  gl_ObjectPlaneQ[gl_MaxTextureCoords];");
 8626|      0|        }
 8627|       |
 8628|    100|        if (version >= 130) {
  ------------------
  |  Branch (8628:13): [True: 100, False: 0]
  ------------------
 8629|    100|            snprintf(builtInConstant, maxSize, "const int gl_MaxClipDistances = %d;", resources.maxClipDistances);
 8630|    100|            s.append(builtInConstant);
 8631|    100|            snprintf(builtInConstant, maxSize, "const int gl_MaxVaryingComponents = %d;", resources.maxVaryingComponents);
 8632|    100|            s.append(builtInConstant);
 8633|       |
 8634|       |            // GL_ARB_shading_language_420pack
 8635|    100|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MinProgramTexelOffset = %d;", resources.minProgramTexelOffset);
 8636|    100|            s.append(builtInConstant);
 8637|    100|            snprintf(builtInConstant, maxSize, "const mediump int  gl_MaxProgramTexelOffset = %d;", resources.maxProgramTexelOffset);
 8638|    100|            s.append(builtInConstant);
 8639|    100|        }
 8640|       |
 8641|       |        // geometry
 8642|    100|        if (version >= 150) {
  ------------------
  |  Branch (8642:13): [True: 14, False: 86]
  ------------------
 8643|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryInputComponents = %d;", resources.maxGeometryInputComponents);
 8644|     14|            s.append(builtInConstant);
 8645|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryOutputComponents = %d;", resources.maxGeometryOutputComponents);
 8646|     14|            s.append(builtInConstant);
 8647|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryTextureImageUnits = %d;", resources.maxGeometryTextureImageUnits);
 8648|     14|            s.append(builtInConstant);
 8649|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryOutputVertices = %d;", resources.maxGeometryOutputVertices);
 8650|     14|            s.append(builtInConstant);
 8651|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryTotalOutputComponents = %d;", resources.maxGeometryTotalOutputComponents);
 8652|     14|            s.append(builtInConstant);
 8653|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryUniformComponents = %d;", resources.maxGeometryUniformComponents);
 8654|     14|            s.append(builtInConstant);
 8655|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryVaryingComponents = %d;", resources.maxGeometryVaryingComponents);
 8656|     14|            s.append(builtInConstant);
 8657|       |
 8658|     14|        }
 8659|       |
 8660|    100|        if (version >= 150) {
  ------------------
  |  Branch (8660:13): [True: 14, False: 86]
  ------------------
 8661|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxVertexOutputComponents = %d;", resources.maxVertexOutputComponents);
 8662|     14|            s.append(builtInConstant);
 8663|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentInputComponents = %d;", resources.maxFragmentInputComponents);
 8664|     14|            s.append(builtInConstant);
 8665|     14|        }
 8666|       |
 8667|       |        // tessellation
 8668|    100|        if (version >= 150) {
  ------------------
  |  Branch (8668:13): [True: 14, False: 86]
  ------------------
 8669|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlInputComponents = %d;", resources.maxTessControlInputComponents);
 8670|     14|            s.append(builtInConstant);
 8671|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlOutputComponents = %d;", resources.maxTessControlOutputComponents);
 8672|     14|            s.append(builtInConstant);
 8673|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlTextureImageUnits = %d;", resources.maxTessControlTextureImageUnits);
 8674|     14|            s.append(builtInConstant);
 8675|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlUniformComponents = %d;", resources.maxTessControlUniformComponents);
 8676|     14|            s.append(builtInConstant);
 8677|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlTotalOutputComponents = %d;", resources.maxTessControlTotalOutputComponents);
 8678|     14|            s.append(builtInConstant);
 8679|       |
 8680|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationInputComponents = %d;", resources.maxTessEvaluationInputComponents);
 8681|     14|            s.append(builtInConstant);
 8682|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationOutputComponents = %d;", resources.maxTessEvaluationOutputComponents);
 8683|     14|            s.append(builtInConstant);
 8684|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationTextureImageUnits = %d;", resources.maxTessEvaluationTextureImageUnits);
 8685|     14|            s.append(builtInConstant);
 8686|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationUniformComponents = %d;", resources.maxTessEvaluationUniformComponents);
 8687|     14|            s.append(builtInConstant);
 8688|       |
 8689|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessPatchComponents = %d;", resources.maxTessPatchComponents);
 8690|     14|            s.append(builtInConstant);
 8691|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessGenLevel = %d;", resources.maxTessGenLevel);
 8692|     14|            s.append(builtInConstant);
 8693|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxPatchVertices = %d;", resources.maxPatchVertices);
 8694|     14|            s.append(builtInConstant);
 8695|       |
 8696|       |            // this is here instead of with the others in initialize(version, profile) due to the dependence on gl_MaxPatchVertices
 8697|     14|            if (language == EShLangTessControl || language == EShLangTessEvaluation) {
  ------------------
  |  Branch (8697:17): [True: 7, False: 7]
  |  Branch (8697:51): [True: 1, False: 6]
  ------------------
 8698|      8|                s.append(
 8699|      8|                    "in gl_PerVertex {"
 8700|      8|                        "vec4 gl_Position;"
 8701|      8|                        "float gl_PointSize;"
 8702|      8|                        "float gl_ClipDistance[];"
 8703|      8|                    );
 8704|      8|                if (profile == ECompatibilityProfile)
  ------------------
  |  Branch (8704:21): [True: 0, False: 8]
  ------------------
 8705|      0|                    s.append(
 8706|      0|                        "vec4 gl_ClipVertex;"
 8707|      0|                        "vec4 gl_FrontColor;"
 8708|      0|                        "vec4 gl_BackColor;"
 8709|      0|                        "vec4 gl_FrontSecondaryColor;"
 8710|      0|                        "vec4 gl_BackSecondaryColor;"
 8711|      0|                        "vec4 gl_TexCoord[];"
 8712|      0|                        "float gl_FogFragCoord;"
 8713|      0|                        );
 8714|      8|                if (profile != EEsProfile && version >= 450)
  ------------------
  |  Branch (8714:21): [True: 8, False: 0]
  |  Branch (8714:46): [True: 6, False: 2]
  ------------------
 8715|      6|                    s.append(
 8716|      6|                        "float gl_CullDistance[];"
 8717|      6|                        "vec4 gl_SecondaryPositionNV;"  // GL_NV_stereo_view_rendering
 8718|      6|                        "vec4 gl_PositionPerViewNV[];"  // GL_NVX_multiview_per_view_attributes
 8719|      6|                       );
 8720|      8|                s.append(
 8721|      8|                    "} gl_in[gl_MaxPatchVertices];"
 8722|      8|                    "\n");
 8723|      8|            }
 8724|     14|        }
 8725|       |
 8726|    100|        if (version >= 150) {
  ------------------
  |  Branch (8726:13): [True: 14, False: 86]
  ------------------
 8727|     14|            snprintf(builtInConstant, maxSize, "const int gl_MaxViewports = %d;", resources.maxViewports);
 8728|     14|            s.append(builtInConstant);
 8729|     14|        }
 8730|       |
 8731|       |        // images
 8732|    100|        if (version >= 130) {
  ------------------
  |  Branch (8732:13): [True: 100, False: 0]
  ------------------
 8733|    100|            snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedImageUnitsAndFragmentOutputs = %d;", resources.maxCombinedImageUnitsAndFragmentOutputs);
 8734|    100|            s.append(builtInConstant);
 8735|    100|            snprintf(builtInConstant, maxSize, "const int gl_MaxImageSamples = %d;", resources.maxImageSamples);
 8736|    100|            s.append(builtInConstant);
 8737|    100|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlImageUniforms = %d;", resources.maxTessControlImageUniforms);
 8738|    100|            s.append(builtInConstant);
 8739|    100|            snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationImageUniforms = %d;", resources.maxTessEvaluationImageUniforms);
 8740|    100|            s.append(builtInConstant);
 8741|    100|            snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryImageUniforms = %d;", resources.maxGeometryImageUniforms);
 8742|    100|            s.append(builtInConstant);
 8743|    100|        }
 8744|       |
 8745|       |        // enhanced layouts
 8746|    100|        if (version >= 430) {
  ------------------
  |  Branch (8746:13): [True: 11, False: 89]
  ------------------
 8747|     11|            snprintf(builtInConstant, maxSize, "const int gl_MaxTransformFeedbackBuffers = %d;", resources.maxTransformFeedbackBuffers);
 8748|     11|            s.append(builtInConstant);
 8749|     11|            snprintf(builtInConstant, maxSize, "const int gl_MaxTransformFeedbackInterleavedComponents = %d;", resources.maxTransformFeedbackInterleavedComponents);
 8750|     11|            s.append(builtInConstant);
 8751|     11|        }
 8752|    100|    }
 8753|       |
 8754|       |    // compute
 8755|    100|    if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) {
  ------------------
  |  Branch (8755:10): [True: 0, False: 100]
  |  Branch (8755:35): [True: 0, False: 0]
  |  Branch (8755:55): [True: 100, False: 0]
  |  Branch (8755:80): [True: 11, False: 89]
  ------------------
 8756|     11|        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupCount = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupCountX,
 8757|     11|                                                                                                         resources.maxComputeWorkGroupCountY,
 8758|     11|                                                                                                         resources.maxComputeWorkGroupCountZ);
 8759|     11|        s.append(builtInConstant);
 8760|     11|        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxComputeWorkGroupSize = ivec3(%d,%d,%d);", resources.maxComputeWorkGroupSizeX,
 8761|     11|                                                                                                        resources.maxComputeWorkGroupSizeY,
 8762|     11|                                                                                                        resources.maxComputeWorkGroupSizeZ);
 8763|     11|        s.append(builtInConstant);
 8764|       |
 8765|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeUniformComponents = %d;", resources.maxComputeUniformComponents);
 8766|     11|        s.append(builtInConstant);
 8767|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeTextureImageUnits = %d;", resources.maxComputeTextureImageUnits);
 8768|     11|        s.append(builtInConstant);
 8769|       |
 8770|       |        // GL_ARM_tensors operands.
 8771|     11|        snprintf(builtInConstant, maxSize, "const uint gl_TensorOperandsNonTemporalARM = 0x1U;");
 8772|     11|        s.append(builtInConstant);
 8773|     11|        snprintf(builtInConstant, maxSize, "const uint gl_TensorOperandsOutOfBoundsValueARM = 0x2U;");
 8774|     11|        s.append(builtInConstant);
 8775|       |
 8776|     11|        s.append("\n");
 8777|     11|    }
 8778|       |
 8779|       |    // images (some in compute below)
 8780|    100|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (8780:10): [True: 0, False: 100]
  |  Branch (8780:35): [True: 0, False: 0]
  ------------------
 8781|    100|        (profile != EEsProfile && version >= 130)) {
  ------------------
  |  Branch (8781:10): [True: 100, False: 0]
  |  Branch (8781:35): [True: 100, False: 0]
  ------------------
 8782|    100|        snprintf(builtInConstant, maxSize, "const int gl_MaxImageUnits = %d;", resources.maxImageUnits);
 8783|    100|        s.append(builtInConstant);
 8784|    100|        snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedShaderOutputResources = %d;", resources.maxCombinedShaderOutputResources);
 8785|    100|        s.append(builtInConstant);
 8786|    100|        snprintf(builtInConstant, maxSize, "const int gl_MaxVertexImageUniforms = %d;", resources.maxVertexImageUniforms);
 8787|    100|        s.append(builtInConstant);
 8788|    100|        snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentImageUniforms = %d;", resources.maxFragmentImageUniforms);
 8789|    100|        s.append(builtInConstant);
 8790|    100|        snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedImageUniforms = %d;", resources.maxCombinedImageUniforms);
 8791|    100|        s.append(builtInConstant);
 8792|    100|    }
 8793|       |
 8794|       |    // compute
 8795|    100|    if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) {
  ------------------
  |  Branch (8795:10): [True: 0, False: 100]
  |  Branch (8795:35): [True: 0, False: 0]
  |  Branch (8795:55): [True: 100, False: 0]
  |  Branch (8795:80): [True: 11, False: 89]
  ------------------
 8796|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeImageUniforms = %d;", resources.maxComputeImageUniforms);
 8797|     11|        s.append(builtInConstant);
 8798|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounters = %d;", resources.maxComputeAtomicCounters);
 8799|     11|        s.append(builtInConstant);
 8800|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxComputeAtomicCounterBuffers = %d;", resources.maxComputeAtomicCounterBuffers);
 8801|     11|        s.append(builtInConstant);
 8802|       |
 8803|     11|        s.append("\n");
 8804|     11|    }
 8805|       |
 8806|       |    // atomic counters (some in compute below)
 8807|    100|    if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (8807:10): [True: 0, False: 100]
  |  Branch (8807:35): [True: 0, False: 0]
  ------------------
 8808|    100|        (profile != EEsProfile && version >= 420)) {
  ------------------
  |  Branch (8808:10): [True: 100, False: 0]
  |  Branch (8808:35): [True: 11, False: 89]
  ------------------
 8809|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxVertexAtomicCounters = %d;", resources.               maxVertexAtomicCounters);
 8810|     11|        s.append(builtInConstant);
 8811|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentAtomicCounters = %d;", resources.             maxFragmentAtomicCounters);
 8812|     11|        s.append(builtInConstant);
 8813|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedAtomicCounters = %d;", resources.             maxCombinedAtomicCounters);
 8814|     11|        s.append(builtInConstant);
 8815|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxAtomicCounterBindings = %d;", resources.              maxAtomicCounterBindings);
 8816|     11|        s.append(builtInConstant);
 8817|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxVertexAtomicCounterBuffers = %d;", resources.         maxVertexAtomicCounterBuffers);
 8818|     11|        s.append(builtInConstant);
 8819|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentAtomicCounterBuffers = %d;", resources.       maxFragmentAtomicCounterBuffers);
 8820|     11|        s.append(builtInConstant);
 8821|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedAtomicCounterBuffers = %d;", resources.       maxCombinedAtomicCounterBuffers);
 8822|     11|        s.append(builtInConstant);
 8823|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxAtomicCounterBufferSize = %d;", resources.            maxAtomicCounterBufferSize);
 8824|     11|        s.append(builtInConstant);
 8825|     11|    }
 8826|    100|    if (profile != EEsProfile && version >= 420) {
  ------------------
  |  Branch (8826:9): [True: 100, False: 0]
  |  Branch (8826:34): [True: 11, False: 89]
  ------------------
 8827|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounters = %d;", resources.          maxTessControlAtomicCounters);
 8828|     11|        s.append(builtInConstant);
 8829|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounters = %d;", resources.       maxTessEvaluationAtomicCounters);
 8830|     11|        s.append(builtInConstant);
 8831|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryAtomicCounters = %d;", resources.             maxGeometryAtomicCounters);
 8832|     11|        s.append(builtInConstant);
 8833|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxTessControlAtomicCounterBuffers = %d;", resources.    maxTessControlAtomicCounterBuffers);
 8834|     11|        s.append(builtInConstant);
 8835|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxTessEvaluationAtomicCounterBuffers = %d;", resources. maxTessEvaluationAtomicCounterBuffers);
 8836|     11|        s.append(builtInConstant);
 8837|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxGeometryAtomicCounterBuffers = %d;", resources.       maxGeometryAtomicCounterBuffers);
 8838|     11|        s.append(builtInConstant);
 8839|       |
 8840|     11|        s.append("\n");
 8841|     11|    }
 8842|       |
 8843|       |    // GL_ARB_cull_distance
 8844|    100|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (8844:9): [True: 100, False: 0]
  |  Branch (8844:34): [True: 11, False: 89]
  ------------------
 8845|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxCullDistances = %d;",                resources.maxCullDistances);
 8846|     11|        s.append(builtInConstant);
 8847|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxCombinedClipAndCullDistances = %d;", resources.maxCombinedClipAndCullDistances);
 8848|     11|        s.append(builtInConstant);
 8849|     11|    }
 8850|       |
 8851|       |    // GL_ARB_ES3_1_compatibility
 8852|    100|    if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (8852:10): [True: 100, False: 0]
  |  Branch (8852:35): [True: 11, False: 89]
  ------------------
 8853|     89|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (8853:10): [True: 0, False: 89]
  |  Branch (8853:35): [True: 0, False: 0]
  ------------------
 8854|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxSamples = %d;", resources.maxSamples);
 8855|     11|        s.append(builtInConstant);
 8856|     11|    }
 8857|       |
 8858|       |    // SPV_NV_mesh_shader
 8859|    100|    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (8859:10): [True: 100, False: 0]
  |  Branch (8859:35): [True: 11, False: 89]
  |  Branch (8859:55): [True: 0, False: 89]
  |  Branch (8859:80): [True: 0, False: 0]
  ------------------
 8860|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV);
 8861|     11|        s.append(builtInConstant);
 8862|       |
 8863|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputPrimitivesNV = %d;", resources.maxMeshOutputPrimitivesNV);
 8864|     11|        s.append(builtInConstant);
 8865|       |
 8866|     11|        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxMeshWorkGroupSizeNV = ivec3(%d,%d,%d);", resources.maxMeshWorkGroupSizeX_NV,
 8867|     11|                                                                                                       resources.maxMeshWorkGroupSizeY_NV,
 8868|     11|                                                                                                       resources.maxMeshWorkGroupSizeZ_NV);
 8869|     11|        s.append(builtInConstant);
 8870|     11|        snprintf(builtInConstant, maxSize, "const ivec3 gl_MaxTaskWorkGroupSizeNV = ivec3(%d,%d,%d);", resources.maxTaskWorkGroupSizeX_NV,
 8871|     11|                                                                                                       resources.maxTaskWorkGroupSizeY_NV,
 8872|     11|                                                                                                       resources.maxTaskWorkGroupSizeZ_NV);
 8873|     11|        s.append(builtInConstant);
 8874|       |
 8875|     11|        snprintf(builtInConstant, maxSize, "const int gl_MaxMeshViewCountNV = %d;", resources.maxMeshViewCountNV);
 8876|     11|        s.append(builtInConstant);
 8877|       |
 8878|     11|        s.append("\n");
 8879|     11|    }
 8880|       |
 8881|    100|    s.append("\n");
 8882|    100|}
_ZN7glslang9TBuiltIns16identifyBuiltInsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableE:
 8981|    322|{
 8982|       |    //
 8983|       |    // Tag built-in variables and functions with additional qualifier and extension information
 8984|       |    // that cannot be declared with the text strings.
 8985|       |    //
 8986|       |
 8987|       |    // N.B.: a symbol should only be tagged once, and this function is called multiple times, once
 8988|       |    // per stage that's used for this profile.  So
 8989|       |    //  - generally, stick common ones in the fragment stage to ensure they are tagged exactly once
 8990|       |    //  - for ES, which has different precisions for different stages, the coarsest-grained tagging
 8991|       |    //    for a built-in used in many stages needs to be once for the fragment stage and once for
 8992|       |    //    the vertex stage
 8993|       |
 8994|    322|    switch(language) {
 8995|     99|    case EShLangVertex:
  ------------------
  |  Branch (8995:5): [True: 99, False: 223]
  ------------------
 8996|     99|        if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (8996:13): [True: 99, False: 0]
  ------------------
 8997|     99|            BuiltInVariable("gl_VertexIndex",   EbvVertexIndex,   symbolTable);
 8998|     99|            BuiltInVariable("gl_InstanceIndex", EbvInstanceIndex, symbolTable);
 8999|     99|        }
 9000|       |
 9001|     99|        if (spvVersion.vulkan == 0) {
  ------------------
  |  Branch (9001:13): [True: 0, False: 99]
  ------------------
 9002|      0|            SpecialQualifier("gl_VertexID",   EvqVertexId,   EbvVertexId,   symbolTable);
 9003|      0|            SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable);
 9004|      0|            if (version < 140)
  ------------------
  |  Branch (9004:17): [True: 0, False: 0]
  ------------------
 9005|      0|                symbolTable.setVariableExtensions("gl_InstanceID", 1, &E_GL_EXT_draw_instanced);
 9006|      0|        }
 9007|       |
 9008|     99|        if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (9008:13): [True: 99, False: 0]
  |  Branch (9008:38): [True: 0, False: 99]
  ------------------
 9009|       |            // treat these built-ins as aliases of VertexIndex and InstanceIndex
 9010|      0|            RetargetVariable("gl_InstanceID", "gl_InstanceIndex", symbolTable);
 9011|      0|            RetargetVariable("gl_VertexID", "gl_VertexIndex", symbolTable);
 9012|      0|        }
 9013|       |
 9014|     99|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9014:13): [True: 99, False: 0]
  ------------------
 9015|     99|            if (version >= 440) {
  ------------------
  |  Branch (9015:17): [True: 10, False: 89]
  ------------------
 9016|     10|                symbolTable.setVariableExtensions("gl_BaseVertexARB",   1, &E_GL_ARB_shader_draw_parameters);
 9017|     10|                symbolTable.setVariableExtensions("gl_BaseInstanceARB", 1, &E_GL_ARB_shader_draw_parameters);
 9018|     10|                symbolTable.setVariableExtensions("gl_DrawIDARB",       1, &E_GL_ARB_shader_draw_parameters);
 9019|     10|                BuiltInVariable("gl_BaseVertexARB",   EbvBaseVertex,   symbolTable);
 9020|     10|                BuiltInVariable("gl_BaseInstanceARB", EbvBaseInstance, symbolTable);
 9021|     10|                BuiltInVariable("gl_DrawIDARB",       EbvDrawId,       symbolTable);
 9022|     10|            }
 9023|     99|            if (version >= 460) {
  ------------------
  |  Branch (9023:17): [True: 0, False: 99]
  ------------------
 9024|      0|                BuiltInVariable("gl_BaseVertex",   EbvBaseVertex,   symbolTable);
 9025|      0|                BuiltInVariable("gl_BaseInstance", EbvBaseInstance, symbolTable);
 9026|      0|                BuiltInVariable("gl_DrawID",       EbvDrawId,       symbolTable);
 9027|      0|            }
 9028|     99|            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
 9029|     99|            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
 9030|     99|            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
 9031|     99|            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
 9032|     99|            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
 9033|     99|            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
 9034|     99|            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
 9035|       |
 9036|     99|            symbolTable.setFunctionExtensions("ballotARB",              1, &E_GL_ARB_shader_ballot);
 9037|     99|            symbolTable.setFunctionExtensions("readInvocationARB",      1, &E_GL_ARB_shader_ballot);
 9038|     99|            symbolTable.setFunctionExtensions("readFirstInvocationARB", 1, &E_GL_ARB_shader_ballot);
 9039|       |
 9040|     99|            if (version >= 430) {
  ------------------
  |  Branch (9040:17): [True: 10, False: 89]
  ------------------
 9041|     10|                symbolTable.setFunctionExtensions("anyInvocationARB",       1, &E_GL_ARB_shader_group_vote);
 9042|     10|                symbolTable.setFunctionExtensions("allInvocationsARB",      1, &E_GL_ARB_shader_group_vote);
 9043|     10|                symbolTable.setFunctionExtensions("allInvocationsEqualARB", 1, &E_GL_ARB_shader_group_vote);
 9044|     10|            }
 9045|     99|            if (version >= 150) {
  ------------------
  |  Branch (9045:17): [True: 13, False: 86]
  ------------------
 9046|     13|                symbolTable.setFunctionExtensions("anyThreadNV",       1, &E_GL_NV_gpu_shader5);
 9047|     13|                symbolTable.setFunctionExtensions("allThreadsNV",      1, &E_GL_NV_gpu_shader5);
 9048|     13|                symbolTable.setFunctionExtensions("allThreadsEqualNV", 1, &E_GL_NV_gpu_shader5);
 9049|     13|            }
 9050|     99|        }
 9051|       |
 9052|       |
 9053|     99|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9053:13): [True: 99, False: 0]
  ------------------
 9054|     99|            symbolTable.setFunctionExtensions("minInvocationsAMD",                1, &E_GL_AMD_shader_ballot);
 9055|     99|            symbolTable.setFunctionExtensions("maxInvocationsAMD",                1, &E_GL_AMD_shader_ballot);
 9056|     99|            symbolTable.setFunctionExtensions("addInvocationsAMD",                1, &E_GL_AMD_shader_ballot);
 9057|     99|            symbolTable.setFunctionExtensions("minInvocationsNonUniformAMD",      1, &E_GL_AMD_shader_ballot);
 9058|     99|            symbolTable.setFunctionExtensions("maxInvocationsNonUniformAMD",      1, &E_GL_AMD_shader_ballot);
 9059|     99|            symbolTable.setFunctionExtensions("addInvocationsNonUniformAMD",      1, &E_GL_AMD_shader_ballot);
 9060|     99|            symbolTable.setFunctionExtensions("swizzleInvocationsAMD",            1, &E_GL_AMD_shader_ballot);
 9061|     99|            symbolTable.setFunctionExtensions("swizzleInvocationsWithPatternAMD", 1, &E_GL_AMD_shader_ballot);
 9062|     99|            symbolTable.setFunctionExtensions("writeInvocationAMD",               1, &E_GL_AMD_shader_ballot);
 9063|     99|            symbolTable.setFunctionExtensions("mbcntAMD",                         1, &E_GL_AMD_shader_ballot);
 9064|       |
 9065|     99|            symbolTable.setFunctionExtensions("minInvocationsInclusiveScanAMD",             1, &E_GL_AMD_shader_ballot);
 9066|     99|            symbolTable.setFunctionExtensions("maxInvocationsInclusiveScanAMD",             1, &E_GL_AMD_shader_ballot);
 9067|     99|            symbolTable.setFunctionExtensions("addInvocationsInclusiveScanAMD",             1, &E_GL_AMD_shader_ballot);
 9068|     99|            symbolTable.setFunctionExtensions("minInvocationsInclusiveScanNonUniformAMD",   1, &E_GL_AMD_shader_ballot);
 9069|     99|            symbolTable.setFunctionExtensions("maxInvocationsInclusiveScanNonUniformAMD",   1, &E_GL_AMD_shader_ballot);
 9070|     99|            symbolTable.setFunctionExtensions("addInvocationsInclusiveScanNonUniformAMD",   1, &E_GL_AMD_shader_ballot);
 9071|     99|            symbolTable.setFunctionExtensions("minInvocationsExclusiveScanAMD",             1, &E_GL_AMD_shader_ballot);
 9072|     99|            symbolTable.setFunctionExtensions("maxInvocationsExclusiveScanAMD",             1, &E_GL_AMD_shader_ballot);
 9073|     99|            symbolTable.setFunctionExtensions("addInvocationsExclusiveScanAMD",             1, &E_GL_AMD_shader_ballot);
 9074|     99|            symbolTable.setFunctionExtensions("minInvocationsExclusiveScanNonUniformAMD",   1, &E_GL_AMD_shader_ballot);
 9075|     99|            symbolTable.setFunctionExtensions("maxInvocationsExclusiveScanNonUniformAMD",   1, &E_GL_AMD_shader_ballot);
 9076|     99|            symbolTable.setFunctionExtensions("addInvocationsExclusiveScanNonUniformAMD",   1, &E_GL_AMD_shader_ballot);
 9077|     99|        }
 9078|       |
 9079|     99|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9079:13): [True: 99, False: 0]
  ------------------
 9080|     99|            symbolTable.setFunctionExtensions("min3", 1, &E_GL_AMD_shader_trinary_minmax);
 9081|     99|            symbolTable.setFunctionExtensions("max3", 1, &E_GL_AMD_shader_trinary_minmax);
 9082|     99|            symbolTable.setFunctionExtensions("mid3", 1, &E_GL_AMD_shader_trinary_minmax);
 9083|     99|        }
 9084|       |
 9085|     99|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9085:13): [True: 99, False: 0]
  ------------------
 9086|     99|            symbolTable.setVariableExtensions("gl_SIMDGroupSizeAMD", 1, &E_GL_AMD_gcn_shader);
 9087|     99|            SpecialQualifier("gl_SIMDGroupSizeAMD", EvqVaryingIn, EbvSubGroupSize, symbolTable);
 9088|       |
 9089|     99|            symbolTable.setFunctionExtensions("cubeFaceIndexAMD", 1, &E_GL_AMD_gcn_shader);
 9090|     99|            symbolTable.setFunctionExtensions("cubeFaceCoordAMD", 1, &E_GL_AMD_gcn_shader);
 9091|     99|            symbolTable.setFunctionExtensions("timeAMD",          1, &E_GL_AMD_gcn_shader);
 9092|     99|        }
 9093|       |
 9094|     99|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9094:13): [True: 99, False: 0]
  ------------------
 9095|     99|            symbolTable.setFunctionExtensions("fragmentMaskFetchAMD", 1, &E_GL_AMD_shader_fragment_mask);
 9096|     99|            symbolTable.setFunctionExtensions("fragmentFetchAMD",     1, &E_GL_AMD_shader_fragment_mask);
 9097|     99|        }
 9098|       |
 9099|     99|        symbolTable.setFunctionExtensions("countLeadingZeros",  1, &E_GL_INTEL_shader_integer_functions2);
 9100|     99|        symbolTable.setFunctionExtensions("countTrailingZeros", 1, &E_GL_INTEL_shader_integer_functions2);
 9101|     99|        symbolTable.setFunctionExtensions("absoluteDifference", 1, &E_GL_INTEL_shader_integer_functions2);
 9102|     99|        symbolTable.setFunctionExtensions("addSaturate",        1, &E_GL_INTEL_shader_integer_functions2);
 9103|     99|        symbolTable.setFunctionExtensions("subtractSaturate",   1, &E_GL_INTEL_shader_integer_functions2);
 9104|     99|        symbolTable.setFunctionExtensions("average",            1, &E_GL_INTEL_shader_integer_functions2);
 9105|     99|        symbolTable.setFunctionExtensions("averageRounded",     1, &E_GL_INTEL_shader_integer_functions2);
 9106|     99|        symbolTable.setFunctionExtensions("multiply32x16",      1, &E_GL_INTEL_shader_integer_functions2);
 9107|       |
 9108|     99|        symbolTable.setFunctionExtensions("textureFootprintNV",          1, &E_GL_NV_shader_texture_footprint);
 9109|     99|        symbolTable.setFunctionExtensions("textureFootprintClampNV",     1, &E_GL_NV_shader_texture_footprint);
 9110|     99|        symbolTable.setFunctionExtensions("textureFootprintLodNV",       1, &E_GL_NV_shader_texture_footprint);
 9111|     99|        symbolTable.setFunctionExtensions("textureFootprintGradNV",      1, &E_GL_NV_shader_texture_footprint);
 9112|     99|        symbolTable.setFunctionExtensions("textureFootprintGradClampNV", 1, &E_GL_NV_shader_texture_footprint);
 9113|       |        // Compatibility variables, vertex only
 9114|     99|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (9114:13): [True: 0, False: 99]
  ------------------
 9115|      0|            BuiltInVariable("gl_Color",          EbvColor,          symbolTable);
 9116|      0|            BuiltInVariable("gl_SecondaryColor", EbvSecondaryColor, symbolTable);
 9117|      0|            BuiltInVariable("gl_Normal",         EbvNormal,         symbolTable);
 9118|      0|            BuiltInVariable("gl_Vertex",         EbvVertex,         symbolTable);
 9119|      0|            BuiltInVariable("gl_MultiTexCoord0", EbvMultiTexCoord0, symbolTable);
 9120|      0|            BuiltInVariable("gl_MultiTexCoord1", EbvMultiTexCoord1, symbolTable);
 9121|      0|            BuiltInVariable("gl_MultiTexCoord2", EbvMultiTexCoord2, symbolTable);
 9122|      0|            BuiltInVariable("gl_MultiTexCoord3", EbvMultiTexCoord3, symbolTable);
 9123|      0|            BuiltInVariable("gl_MultiTexCoord4", EbvMultiTexCoord4, symbolTable);
 9124|      0|            BuiltInVariable("gl_MultiTexCoord5", EbvMultiTexCoord5, symbolTable);
 9125|      0|            BuiltInVariable("gl_MultiTexCoord6", EbvMultiTexCoord6, symbolTable);
 9126|      0|            BuiltInVariable("gl_MultiTexCoord7", EbvMultiTexCoord7, symbolTable);
 9127|      0|            BuiltInVariable("gl_FogCoord",       EbvFogFragCoord,   symbolTable);
 9128|      0|        }
 9129|       |
 9130|     99|        if (profile == EEsProfile) {
  ------------------
  |  Branch (9130:13): [True: 0, False: 99]
  ------------------
 9131|      0|            if (spvVersion.spv == 0) {
  ------------------
  |  Branch (9131:17): [True: 0, False: 0]
  ------------------
 9132|      0|                symbolTable.setFunctionExtensions("texture2DGradEXT",     1, &E_GL_EXT_shader_texture_lod);
 9133|      0|                symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
 9134|      0|                symbolTable.setFunctionExtensions("textureCubeGradEXT",   1, &E_GL_EXT_shader_texture_lod);
 9135|      0|                if (version == 310)
  ------------------
  |  Branch (9135:21): [True: 0, False: 0]
  ------------------
 9136|      0|                    symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
 9137|      0|            }
 9138|      0|            if (version == 310) {
  ------------------
  |  Branch (9138:17): [True: 0, False: 0]
  ------------------
 9139|      0|                symbolTable.setFunctionExtensions("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5);
 9140|      0|            } else if (profile != EEsProfile && version >= 150) {
  ------------------
  |  Branch (9140:24): [True: 0, False: 0]
  |  Branch (9140:49): [True: 0, False: 0]
  ------------------
 9141|      0|                symbolTable.setFunctionExtensions("fma", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9142|      0|            }
 9143|      0|        }
 9144|       |
 9145|     99|        if (profile == EEsProfile && version < 320) {
  ------------------
  |  Branch (9145:13): [True: 0, False: 99]
  |  Branch (9145:38): [True: 0, False: 0]
  ------------------
 9146|      0|            symbolTable.setFunctionExtensions("imageAtomicAdd",      1, &E_GL_OES_shader_image_atomic);
 9147|      0|            symbolTable.setFunctionExtensions("imageAtomicMin",      1, &E_GL_OES_shader_image_atomic);
 9148|      0|            symbolTable.setFunctionExtensions("imageAtomicMax",      1, &E_GL_OES_shader_image_atomic);
 9149|      0|            symbolTable.setFunctionExtensions("imageAtomicAnd",      1, &E_GL_OES_shader_image_atomic);
 9150|      0|            symbolTable.setFunctionExtensions("imageAtomicOr",       1, &E_GL_OES_shader_image_atomic);
 9151|      0|            symbolTable.setFunctionExtensions("imageAtomicXor",      1, &E_GL_OES_shader_image_atomic);
 9152|      0|            symbolTable.setFunctionExtensions("imageAtomicExchange", 1, &E_GL_OES_shader_image_atomic);
 9153|      0|            symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic);
 9154|      0|        }
 9155|       |
 9156|     99|        if (version >= 300 /* both ES and non-ES */) {
  ------------------
  |  Branch (9156:13): [True: 12, False: 87]
  ------------------
 9157|     12|            symbolTable.setVariableExtensions("gl_ViewID_OVR", Num_OVR_multiview_EXTs, OVR_multiview_EXTs);
 9158|     12|            BuiltInVariable("gl_ViewID_OVR", EbvViewIndex, symbolTable);
 9159|     12|        }
 9160|       |
 9161|     99|        if (profile == EEsProfile) {
  ------------------
  |  Branch (9161:13): [True: 0, False: 99]
  ------------------
 9162|      0|            symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
 9163|      0|            symbolTable.setFunctionExtensions("shadow2DProjEXT",    1, &E_GL_EXT_shadow_samplers);
 9164|      0|        }
 9165|       |
 9166|       |        // E_GL_EXT_texture_array
 9167|     99|        if (profile != EEsProfile && spvVersion.spv == 0) {
  ------------------
  |  Branch (9167:13): [True: 99, False: 0]
  |  Branch (9167:38): [True: 0, False: 99]
  ------------------
 9168|      0|            symbolTable.setFunctionExtensions("texture1DArray", 1, &E_GL_EXT_texture_array);
 9169|      0|            symbolTable.setFunctionExtensions("texture2DArray", 1, &E_GL_EXT_texture_array);
 9170|      0|            symbolTable.setFunctionExtensions("shadow1DArray", 1, &E_GL_EXT_texture_array);
 9171|      0|            symbolTable.setFunctionExtensions("shadow2DArray", 1, &E_GL_EXT_texture_array);
 9172|       |
 9173|      0|            symbolTable.setFunctionExtensions("texture1DArrayLod", 1, &E_GL_EXT_texture_array);
 9174|      0|            symbolTable.setFunctionExtensions("texture2DArrayLod", 1, &E_GL_EXT_texture_array);
 9175|      0|            symbolTable.setFunctionExtensions("shadow1DArrayLod", 1, &E_GL_EXT_texture_array);
 9176|      0|        }
 9177|     99|        [[fallthrough]];
 9178|       |
 9179|    112|    case EShLangTessControl:
  ------------------
  |  Branch (9179:5): [True: 13, False: 309]
  ------------------
 9180|    112|        if (profile == EEsProfile && version >= 310) {
  ------------------
  |  Branch (9180:13): [True: 0, False: 112]
  |  Branch (9180:38): [True: 0, False: 0]
  ------------------
 9181|      0|            BuiltInVariable("gl_BoundingBoxEXT", EbvBoundingBox, symbolTable);
 9182|      0|            symbolTable.setVariableExtensions("gl_BoundingBoxEXT", 1,
 9183|      0|                                              &E_GL_EXT_primitive_bounding_box);
 9184|      0|            BuiltInVariable("gl_BoundingBoxOES", EbvBoundingBox, symbolTable);
 9185|      0|            symbolTable.setVariableExtensions("gl_BoundingBoxOES", 1,
 9186|      0|                                              &E_GL_OES_primitive_bounding_box);
 9187|       |
 9188|      0|            if (version >= 320) {
  ------------------
  |  Branch (9188:17): [True: 0, False: 0]
  ------------------
 9189|      0|                BuiltInVariable("gl_BoundingBox", EbvBoundingBox, symbolTable);
 9190|      0|            }
 9191|      0|        }
 9192|    112|        [[fallthrough]];
 9193|       |
 9194|    125|    case EShLangTessEvaluation:
  ------------------
  |  Branch (9194:5): [True: 13, False: 309]
  ------------------
 9195|    138|    case EShLangGeometry:
  ------------------
  |  Branch (9195:5): [True: 13, False: 309]
  ------------------
 9196|    138|        SpecialQualifier("gl_Position",   EvqPosition,   EbvPosition,   symbolTable);
 9197|    138|        SpecialQualifier("gl_PointSize",  EvqPointSize,  EbvPointSize,  symbolTable);
 9198|       |
 9199|    138|        BuiltInVariable("gl_in",  "gl_Position",     EbvPosition,     symbolTable);
 9200|    138|        BuiltInVariable("gl_in",  "gl_PointSize",    EbvPointSize,    symbolTable);
 9201|       |
 9202|    138|        BuiltInVariable("gl_out", "gl_Position",     EbvPosition,     symbolTable);
 9203|    138|        BuiltInVariable("gl_out", "gl_PointSize",    EbvPointSize,    symbolTable);
 9204|       |
 9205|    138|        SpecialQualifier("gl_ClipVertex", EvqClipVertex, EbvClipVertex, symbolTable);
 9206|       |
 9207|    138|        BuiltInVariable("gl_in",  "gl_ClipDistance", EbvClipDistance, symbolTable);
 9208|    138|        BuiltInVariable("gl_in",  "gl_CullDistance", EbvCullDistance, symbolTable);
 9209|       |
 9210|    138|        BuiltInVariable("gl_out", "gl_ClipDistance", EbvClipDistance, symbolTable);
 9211|    138|        BuiltInVariable("gl_out", "gl_CullDistance", EbvCullDistance, symbolTable);
 9212|       |
 9213|    138|        BuiltInVariable("gl_ClipDistance",    EbvClipDistance,   symbolTable);
 9214|    138|        BuiltInVariable("gl_CullDistance",    EbvCullDistance,   symbolTable);
 9215|    138|        BuiltInVariable("gl_PrimitiveIDIn",   EbvPrimitiveId,    symbolTable);
 9216|    138|        BuiltInVariable("gl_PrimitiveID",     EbvPrimitiveId,    symbolTable);
 9217|    138|        BuiltInVariable("gl_InvocationID",    EbvInvocationId,   symbolTable);
 9218|    138|        BuiltInVariable("gl_Layer",           EbvLayer,          symbolTable);
 9219|    138|        BuiltInVariable("gl_ViewportIndex",   EbvViewportIndex,  symbolTable);
 9220|       |
 9221|    138|        if (language != EShLangGeometry) {
  ------------------
  |  Branch (9221:13): [True: 125, False: 13]
  ------------------
 9222|    125|            symbolTable.setVariableExtensions("gl_Layer",         Num_viewportEXTs, viewportEXTs);
 9223|    125|            symbolTable.setVariableExtensions("gl_ViewportIndex", Num_viewportEXTs, viewportEXTs);
 9224|    125|        }
 9225|    138|        symbolTable.setVariableExtensions("gl_ViewportMask",            1, &E_GL_NV_viewport_array2);
 9226|    138|        symbolTable.setVariableExtensions("gl_SecondaryPositionNV",     1, &E_GL_NV_stereo_view_rendering);
 9227|    138|        symbolTable.setVariableExtensions("gl_SecondaryViewportMaskNV", 1, &E_GL_NV_stereo_view_rendering);
 9228|    138|        symbolTable.setVariableExtensions("gl_PositionPerViewNV",       1, &E_GL_NVX_multiview_per_view_attributes);
 9229|    138|        symbolTable.setVariableExtensions("gl_ViewportMaskPerViewNV",   1, &E_GL_NVX_multiview_per_view_attributes);
 9230|       |
 9231|    138|        if (profile != EEsProfile && language == EShLangGeometry && version < 400) {
  ------------------
  |  Branch (9231:13): [True: 138, False: 0]
  |  Branch (9231:38): [True: 13, False: 125]
  |  Branch (9231:69): [True: 1, False: 12]
  ------------------
 9232|      1|            symbolTable.setVariableExtensions("gl_InvocationID", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9233|      1|        }
 9234|    138|        BuiltInVariable("gl_ViewportMask",              EbvViewportMaskNV,          symbolTable);
 9235|    138|        BuiltInVariable("gl_SecondaryPositionNV",       EbvSecondaryPositionNV,     symbolTable);
 9236|    138|        BuiltInVariable("gl_SecondaryViewportMaskNV",   EbvSecondaryViewportMaskNV, symbolTable);
 9237|    138|        BuiltInVariable("gl_PositionPerViewNV",         EbvPositionPerViewNV,       symbolTable);
 9238|    138|        BuiltInVariable("gl_ViewportMaskPerViewNV",     EbvViewportMaskPerViewNV,   symbolTable);
 9239|       |
 9240|    138|        if (language == EShLangVertex || language == EShLangGeometry) {
  ------------------
  |  Branch (9240:13): [True: 99, False: 39]
  |  Branch (9240:42): [True: 13, False: 26]
  ------------------
 9241|    112|            symbolTable.setVariableExtensions("gl_in", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
 9242|    112|            symbolTable.setVariableExtensions("gl_in", "gl_PositionPerViewNV",   1, &E_GL_NVX_multiview_per_view_attributes);
 9243|       |
 9244|    112|            BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
 9245|    112|            BuiltInVariable("gl_in", "gl_PositionPerViewNV",   EbvPositionPerViewNV,   symbolTable);
 9246|    112|        }
 9247|    138|        symbolTable.setVariableExtensions("gl_out", "gl_ViewportMask",            1, &E_GL_NV_viewport_array2);
 9248|    138|        symbolTable.setVariableExtensions("gl_out", "gl_SecondaryPositionNV",     1, &E_GL_NV_stereo_view_rendering);
 9249|    138|        symbolTable.setVariableExtensions("gl_out", "gl_SecondaryViewportMaskNV", 1, &E_GL_NV_stereo_view_rendering);
 9250|    138|        symbolTable.setVariableExtensions("gl_out", "gl_PositionPerViewNV",       1, &E_GL_NVX_multiview_per_view_attributes);
 9251|    138|        symbolTable.setVariableExtensions("gl_out", "gl_ViewportMaskPerViewNV",   1, &E_GL_NVX_multiview_per_view_attributes);
 9252|       |
 9253|    138|        BuiltInVariable("gl_out", "gl_ViewportMask",            EbvViewportMaskNV,          symbolTable);
 9254|    138|        BuiltInVariable("gl_out", "gl_SecondaryPositionNV",     EbvSecondaryPositionNV,     symbolTable);
 9255|    138|        BuiltInVariable("gl_out", "gl_SecondaryViewportMaskNV", EbvSecondaryViewportMaskNV, symbolTable);
 9256|    138|        BuiltInVariable("gl_out", "gl_PositionPerViewNV",       EbvPositionPerViewNV,       symbolTable);
 9257|    138|        BuiltInVariable("gl_out", "gl_ViewportMaskPerViewNV",   EbvViewportMaskPerViewNV,   symbolTable);
 9258|       |
 9259|    138|        BuiltInVariable("gl_PatchVerticesIn", EbvPatchVertices,  symbolTable);
 9260|    138|        BuiltInVariable("gl_TessLevelOuter",  EbvTessLevelOuter, symbolTable);
 9261|    138|        BuiltInVariable("gl_TessLevelInner",  EbvTessLevelInner, symbolTable);
 9262|    138|        BuiltInVariable("gl_TessCoord",       EbvTessCoord,      symbolTable);
 9263|       |
 9264|    138|        if (version < 410)
  ------------------
  |  Branch (9264:13): [True: 98, False: 40]
  ------------------
 9265|     98|            symbolTable.setVariableExtensions("gl_ViewportIndex", 1, &E_GL_ARB_viewport_array);
 9266|       |
 9267|       |        // Compatibility variables
 9268|       |
 9269|    138|        BuiltInVariable("gl_in", "gl_ClipVertex",          EbvClipVertex,          symbolTable);
 9270|    138|        BuiltInVariable("gl_in", "gl_FrontColor",          EbvFrontColor,          symbolTable);
 9271|    138|        BuiltInVariable("gl_in", "gl_BackColor",           EbvBackColor,           symbolTable);
 9272|    138|        BuiltInVariable("gl_in", "gl_FrontSecondaryColor", EbvFrontSecondaryColor, symbolTable);
 9273|    138|        BuiltInVariable("gl_in", "gl_BackSecondaryColor",  EbvBackSecondaryColor,  symbolTable);
 9274|    138|        BuiltInVariable("gl_in", "gl_TexCoord",            EbvTexCoord,            symbolTable);
 9275|    138|        BuiltInVariable("gl_in", "gl_FogFragCoord",        EbvFogFragCoord,        symbolTable);
 9276|       |
 9277|    138|        BuiltInVariable("gl_out", "gl_ClipVertex",          EbvClipVertex,          symbolTable);
 9278|    138|        BuiltInVariable("gl_out", "gl_FrontColor",          EbvFrontColor,          symbolTable);
 9279|    138|        BuiltInVariable("gl_out", "gl_BackColor",           EbvBackColor,           symbolTable);
 9280|    138|        BuiltInVariable("gl_out", "gl_FrontSecondaryColor", EbvFrontSecondaryColor, symbolTable);
 9281|    138|        BuiltInVariable("gl_out", "gl_BackSecondaryColor",  EbvBackSecondaryColor,  symbolTable);
 9282|    138|        BuiltInVariable("gl_out", "gl_TexCoord",            EbvTexCoord,            symbolTable);
 9283|    138|        BuiltInVariable("gl_out", "gl_FogFragCoord",        EbvFogFragCoord,        symbolTable);
 9284|       |
 9285|    138|        BuiltInVariable("gl_ClipVertex",          EbvClipVertex,          symbolTable);
 9286|    138|        BuiltInVariable("gl_FrontColor",          EbvFrontColor,          symbolTable);
 9287|    138|        BuiltInVariable("gl_BackColor",           EbvBackColor,           symbolTable);
 9288|    138|        BuiltInVariable("gl_FrontSecondaryColor", EbvFrontSecondaryColor, symbolTable);
 9289|    138|        BuiltInVariable("gl_BackSecondaryColor",  EbvBackSecondaryColor,  symbolTable);
 9290|    138|        BuiltInVariable("gl_TexCoord",            EbvTexCoord,            symbolTable);
 9291|    138|        BuiltInVariable("gl_FogFragCoord",        EbvFogFragCoord,        symbolTable);
 9292|       |
 9293|       |        // gl_PointSize, when it needs to be tied to an extension, is always a member of a block.
 9294|       |        // (Sometimes with an instance name, sometimes anonymous).
 9295|    138|        if (profile == EEsProfile) {
  ------------------
  |  Branch (9295:13): [True: 0, False: 138]
  ------------------
 9296|      0|            if (language == EShLangGeometry) {
  ------------------
  |  Branch (9296:17): [True: 0, False: 0]
  ------------------
 9297|      0|                symbolTable.setVariableExtensions("gl_PointSize", Num_AEP_geometry_point_size, AEP_geometry_point_size);
 9298|      0|                symbolTable.setVariableExtensions("gl_in", "gl_PointSize", Num_AEP_geometry_point_size, AEP_geometry_point_size);
 9299|      0|            } else if (language == EShLangTessEvaluation || language == EShLangTessControl) {
  ------------------
  |  Branch (9299:24): [True: 0, False: 0]
  |  Branch (9299:61): [True: 0, False: 0]
  ------------------
 9300|       |                // gl_in tessellation settings of gl_PointSize are in the context-dependent paths
 9301|      0|                symbolTable.setVariableExtensions("gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
 9302|      0|                symbolTable.setVariableExtensions("gl_out", "gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
 9303|      0|            }
 9304|      0|        }
 9305|       |
 9306|    138|        if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (9306:14): [True: 138, False: 0]
  |  Branch (9306:39): [True: 138, False: 0]
  ------------------
 9307|    138|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (9307:14): [True: 0, False: 0]
  |  Branch (9307:39): [True: 0, False: 0]
  ------------------
 9308|    138|            symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
 9309|    138|            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
 9310|    138|            symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
 9311|    138|            BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
 9312|    138|        }
 9313|       |
 9314|    138|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9314:13): [True: 138, False: 0]
  ------------------
 9315|    138|            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
 9316|    138|            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
 9317|    138|            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
 9318|    138|            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
 9319|    138|            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
 9320|    138|            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
 9321|       |
 9322|    138|            if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (9322:17): [True: 138, False: 0]
  ------------------
 9323|       |                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
 9324|    138|                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
 9325|    138|                if (language == EShLangFragment)
  ------------------
  |  Branch (9325:21): [True: 0, False: 138]
  ------------------
 9326|      0|                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
 9327|    138|            }
 9328|      0|            else
 9329|      0|                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
 9330|    138|        }
 9331|       |
 9332|       |        // GL_ARB_gpu_shader5/GL_NV_gpu_shader5
 9333|    138|        if (profile != EEsProfile && version < 400 && language == EShLangGeometry) {
  ------------------
  |  Branch (9333:13): [True: 138, False: 0]
  |  Branch (9333:38): [True: 90, False: 48]
  |  Branch (9333:55): [True: 1, False: 89]
  ------------------
 9334|      1|            symbolTable.setFunctionExtensions("EmitStreamVertex", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9335|      1|            symbolTable.setFunctionExtensions("EndStreamPrimitive", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9336|      1|        }
 9337|       |        // GL_KHR_shader_subgroup
 9338|    138|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (9338:14): [True: 0, False: 138]
  |  Branch (9338:39): [True: 0, False: 0]
  ------------------
 9339|    138|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (9339:14): [True: 138, False: 0]
  |  Branch (9339:39): [True: 138, False: 0]
  ------------------
 9340|    138|            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
 9341|    138|            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
 9342|    138|            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9343|    138|            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9344|    138|            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9345|    138|            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9346|    138|            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9347|       |
 9348|    138|            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
 9349|    138|            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
 9350|    138|            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
 9351|    138|            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
 9352|    138|            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
 9353|    138|            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
 9354|    138|            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
 9355|       |
 9356|       |            // GL_NV_shader_sm_builtins
 9357|    138|            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
 9358|    138|            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
 9359|    138|            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
 9360|    138|            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
 9361|    138|            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
 9362|    138|            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
 9363|    138|            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
 9364|    138|            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
 9365|       |
 9366|       |            // GL_ARM_shader_core_builtins
 9367|    138|            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
 9368|    138|            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
 9369|    138|            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
 9370|    138|            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
 9371|    138|            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
 9372|       |
 9373|    138|            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
 9374|    138|            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
 9375|    138|            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
 9376|    138|            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
 9377|    138|            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
 9378|    138|        }
 9379|       |
 9380|    138|        if (language == EShLangGeometry || language == EShLangVertex) {
  ------------------
  |  Branch (9380:13): [True: 13, False: 125]
  |  Branch (9380:44): [True: 99, False: 26]
  ------------------
 9381|    112|            if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (9381:18): [True: 0, False: 112]
  |  Branch (9381:43): [True: 0, False: 0]
  ------------------
 9382|    112|                (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (9382:18): [True: 112, False: 0]
  |  Branch (9382:43): [True: 20, False: 92]
  ------------------
 9383|     20|                symbolTable.setVariableExtensions("gl_PrimitiveShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate);
 9384|     20|                BuiltInVariable("gl_PrimitiveShadingRateEXT", EbvPrimitiveShadingRateKHR, symbolTable);
 9385|       |
 9386|     20|                symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
 9387|     20|                symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
 9388|     20|                symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
 9389|     20|                symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
 9390|     20|            }
 9391|    112|        }
 9392|    138|        break;
 9393|       |
 9394|     99|    case EShLangFragment:
  ------------------
  |  Branch (9394:5): [True: 99, False: 223]
  ------------------
 9395|     99|        SpecialQualifier("gl_FrontFacing",      EvqFace,       EbvFace,             symbolTable);
 9396|     99|        SpecialQualifier("gl_FragCoord",        EvqFragCoord,  EbvFragCoord,        symbolTable);
 9397|     99|        SpecialQualifier("gl_PointCoord",       EvqPointCoord, EbvPointCoord,       symbolTable);
 9398|     99|        if (spvVersion.spv == 0)
  ------------------
  |  Branch (9398:13): [True: 0, False: 99]
  ------------------
 9399|      0|            SpecialQualifier("gl_FragColor",    EvqFragColor,  EbvFragColor,        symbolTable);
 9400|     99|        else {
 9401|     99|            TSymbol* symbol = symbolTable.find("gl_FragColor");
 9402|     99|            if (symbol) {
  ------------------
  |  Branch (9402:17): [True: 89, False: 10]
  ------------------
 9403|     89|                symbol->getWritableType().getQualifier().storage = EvqVaryingOut;
 9404|     89|                symbol->getWritableType().getQualifier().layoutLocation = 0;
 9405|     89|            }
 9406|     99|        }
 9407|     99|        SpecialQualifier("gl_FragDepth",        EvqFragDepth,  EbvFragDepth,        symbolTable);
 9408|     99|        SpecialQualifier("gl_FragDepthEXT",     EvqFragDepth,  EbvFragDepth,        symbolTable);
 9409|     99|        SpecialQualifier("gl_FragStencilRefARB", EvqFragStencil, EbvFragStencilRef, symbolTable);
 9410|     99|        SpecialQualifier("gl_HelperInvocation", EvqVaryingIn,  EbvHelperInvocation, symbolTable);
 9411|       |
 9412|     99|        BuiltInVariable("gl_ClipDistance",    EbvClipDistance,   symbolTable);
 9413|     99|        BuiltInVariable("gl_CullDistance",    EbvCullDistance,   symbolTable);
 9414|     99|        BuiltInVariable("gl_PrimitiveID",     EbvPrimitiveId,    symbolTable);
 9415|       |
 9416|     99|        if (profile != EEsProfile && version >= 140) {
  ------------------
  |  Branch (9416:13): [True: 99, False: 0]
  |  Branch (9416:38): [True: 99, False: 0]
  ------------------
 9417|     99|            symbolTable.setVariableExtensions("gl_FragStencilRefARB", 1, &E_GL_ARB_shader_stencil_export);
 9418|     99|            BuiltInVariable("gl_FragStencilRefARB", EbvFragStencilRef, symbolTable);
 9419|     99|        }
 9420|       |
 9421|     99|        if (profile != EEsProfile && version < 400) {
  ------------------
  |  Branch (9421:13): [True: 99, False: 0]
  |  Branch (9421:38): [True: 87, False: 12]
  ------------------
 9422|     87|            symbolTable.setFunctionExtensions("textureQueryLOD", 1, &E_GL_ARB_texture_query_lod);
 9423|     87|        }
 9424|       |
 9425|     99|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (9425:13): [True: 99, False: 0]
  |  Branch (9425:38): [True: 0, False: 99]
  ------------------
 9426|      0|            symbolTable.setFunctionExtensions("rayQueryInitializeEXT",                                            1, &E_GL_EXT_ray_query);
 9427|      0|            symbolTable.setFunctionExtensions("rayQueryTerminateEXT",                                             1, &E_GL_EXT_ray_query);
 9428|      0|            symbolTable.setFunctionExtensions("rayQueryGenerateIntersectionEXT",                                  1, &E_GL_EXT_ray_query);
 9429|      0|            symbolTable.setFunctionExtensions("rayQueryConfirmIntersectionEXT",                                   1, &E_GL_EXT_ray_query);
 9430|      0|            symbolTable.setFunctionExtensions("rayQueryProceedEXT",                                               1, &E_GL_EXT_ray_query);
 9431|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionTypeEXT",                                   1, &E_GL_EXT_ray_query);
 9432|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionTEXT",                                      1, &E_GL_EXT_ray_query);
 9433|      0|            symbolTable.setFunctionExtensions("rayQueryGetRayFlagsEXT",                                           1, &E_GL_EXT_ray_query);
 9434|      0|            symbolTable.setFunctionExtensions("rayQueryGetRayTMinEXT",                                            1, &E_GL_EXT_ray_query);
 9435|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceCustomIndexEXT",                    1, &E_GL_EXT_ray_query);
 9436|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceIdEXT",                             1, &E_GL_EXT_ray_query);
 9437|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT", 1, &E_GL_EXT_ray_query);
 9438|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionGeometryIndexEXT",                          1, &E_GL_EXT_ray_query);
 9439|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionPrimitiveIndexEXT",                         1, &E_GL_EXT_ray_query);
 9440|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionBarycentricsEXT",                           1, &E_GL_EXT_ray_query);
 9441|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionFrontFaceEXT",                              1, &E_GL_EXT_ray_query);
 9442|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionCandidateAABBOpaqueEXT",                    1, &E_GL_EXT_ray_query);
 9443|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectRayDirectionEXT",                     1, &E_GL_EXT_ray_query);
 9444|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectRayOriginEXT",                        1, &E_GL_EXT_ray_query);
 9445|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionObjectToWorldEXT",                          1, &E_GL_EXT_ray_query);
 9446|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionWorldToObjectEXT",                          1, &E_GL_EXT_ray_query);
 9447|      0|            symbolTable.setFunctionExtensions("rayQueryGetWorldRayOriginEXT",                                     1, &E_GL_EXT_ray_query);
 9448|      0|            symbolTable.setFunctionExtensions("rayQueryGetWorldRayDirectionEXT",                                  1, &E_GL_EXT_ray_query);
 9449|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionTriangleVertexPositionsEXT",                1, &E_GL_EXT_ray_tracing_position_fetch);
 9450|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionClusterIdNV",                               1, &E_GL_NV_cluster_acceleration_structure);
 9451|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionSpherePositionNV",                          1, &E_GL_NV_linear_swept_spheres);
 9452|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionSphereRadiusNV",                            1, &E_GL_NV_linear_swept_spheres);
 9453|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionLSSHitValueNV",                             1, &E_GL_NV_linear_swept_spheres);
 9454|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionLSSPositionsNV",                            1, &E_GL_NV_linear_swept_spheres);
 9455|      0|            symbolTable.setFunctionExtensions("rayQueryGetIntersectionLSSRadiiNV",                                1, &E_GL_NV_linear_swept_spheres);
 9456|      0|            symbolTable.setFunctionExtensions("rayQueryIsSphereHitNV",                                            1, &E_GL_NV_linear_swept_spheres);
 9457|      0|            symbolTable.setFunctionExtensions("rayQueryIsLSSHitNV",                                               1, &E_GL_NV_linear_swept_spheres);
 9458|      0|            symbolTable.setVariableExtensions("gl_RayFlagsSkipAABBEXT",                         1, &E_GL_EXT_ray_flags_primitive_culling);
 9459|      0|            symbolTable.setVariableExtensions("gl_RayFlagsSkipTrianglesEXT",                    1, &E_GL_EXT_ray_flags_primitive_culling);
 9460|      0|            symbolTable.setVariableExtensions("gl_RayFlagsForceOpacityMicromap2StateEXT",                  1, &E_GL_EXT_opacity_micromap);
 9461|      0|        }
 9462|       |
 9463|     99|        if ((profile != EEsProfile && version >= 130) ||
  ------------------
  |  Branch (9463:14): [True: 99, False: 0]
  |  Branch (9463:39): [True: 99, False: 0]
  ------------------
 9464|     99|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (9464:14): [True: 0, False: 0]
  |  Branch (9464:39): [True: 0, False: 0]
  ------------------
 9465|     99|            BuiltInVariable("gl_SampleID",           EbvSampleId,       symbolTable);
 9466|     99|            BuiltInVariable("gl_SamplePosition",     EbvSamplePosition, symbolTable);
 9467|     99|            BuiltInVariable("gl_SampleMask",         EbvSampleMask,     symbolTable);
 9468|       |
 9469|     99|            if (profile != EEsProfile && version < 400) {
  ------------------
  |  Branch (9469:17): [True: 99, False: 0]
  |  Branch (9469:42): [True: 87, False: 12]
  ------------------
 9470|     87|                BuiltInVariable("gl_SampleMaskIn",    EbvSampleMask,     symbolTable);
 9471|     87|                symbolTable.setVariableExtensions("gl_SampleMaskIn", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9472|       |
 9473|     87|                BuiltInVariable("gl_NumSamples",     EbvSampleMask,     symbolTable);
 9474|       |
 9475|     87|                symbolTable.setVariableExtensions("gl_SampleMask",     1, &E_GL_ARB_sample_shading);
 9476|     87|                symbolTable.setVariableExtensions("gl_SampleID",       1, &E_GL_ARB_sample_shading);
 9477|     87|                symbolTable.setVariableExtensions("gl_SamplePosition", 1, &E_GL_ARB_sample_shading);
 9478|     87|                symbolTable.setVariableExtensions("gl_NumSamples",     1, &E_GL_ARB_sample_shading);
 9479|     87|            } else {
 9480|     12|                BuiltInVariable("gl_SampleMaskIn",    EbvSampleMask,     symbolTable);
 9481|       |
 9482|     12|                if (profile == EEsProfile && version < 320) {
  ------------------
  |  Branch (9482:21): [True: 0, False: 12]
  |  Branch (9482:46): [True: 0, False: 0]
  ------------------
 9483|      0|                    symbolTable.setVariableExtensions("gl_SampleID", 1, &E_GL_OES_sample_variables);
 9484|      0|                    symbolTable.setVariableExtensions("gl_SamplePosition", 1, &E_GL_OES_sample_variables);
 9485|      0|                    symbolTable.setVariableExtensions("gl_SampleMaskIn", 1, &E_GL_OES_sample_variables);
 9486|      0|                    symbolTable.setVariableExtensions("gl_SampleMask", 1, &E_GL_OES_sample_variables);
 9487|      0|                    symbolTable.setVariableExtensions("gl_NumSamples", 1, &E_GL_OES_sample_variables);
 9488|      0|                }
 9489|     12|            }
 9490|     99|        }
 9491|       |
 9492|     99|        BuiltInVariable("gl_Layer",           EbvLayer,          symbolTable);
 9493|     99|        BuiltInVariable("gl_ViewportIndex",   EbvViewportIndex,  symbolTable);
 9494|       |
 9495|       |        // Compatibility variables
 9496|       |
 9497|     99|        BuiltInVariable("gl_in", "gl_FogFragCoord",   EbvFogFragCoord,   symbolTable);
 9498|     99|        BuiltInVariable("gl_in", "gl_TexCoord",       EbvTexCoord,       symbolTable);
 9499|     99|        BuiltInVariable("gl_in", "gl_Color",          EbvColor,          symbolTable);
 9500|     99|        BuiltInVariable("gl_in", "gl_SecondaryColor", EbvSecondaryColor, symbolTable);
 9501|       |
 9502|     99|        BuiltInVariable("gl_FogFragCoord",   EbvFogFragCoord,   symbolTable);
 9503|     99|        BuiltInVariable("gl_TexCoord",       EbvTexCoord,       symbolTable);
 9504|     99|        BuiltInVariable("gl_Color",          EbvColor,          symbolTable);
 9505|     99|        BuiltInVariable("gl_SecondaryColor", EbvSecondaryColor, symbolTable);
 9506|       |
 9507|       |        // built-in functions
 9508|       |
 9509|     99|        if (profile == EEsProfile) {
  ------------------
  |  Branch (9509:13): [True: 0, False: 99]
  ------------------
 9510|      0|            if (spvVersion.spv == 0) {
  ------------------
  |  Branch (9510:17): [True: 0, False: 0]
  ------------------
 9511|      0|                symbolTable.setFunctionExtensions("texture2DLodEXT",      1, &E_GL_EXT_shader_texture_lod);
 9512|      0|                symbolTable.setFunctionExtensions("texture2DProjLodEXT",  1, &E_GL_EXT_shader_texture_lod);
 9513|      0|                symbolTable.setFunctionExtensions("textureCubeLodEXT",    1, &E_GL_EXT_shader_texture_lod);
 9514|      0|                symbolTable.setFunctionExtensions("texture2DGradEXT",     1, &E_GL_EXT_shader_texture_lod);
 9515|      0|                symbolTable.setFunctionExtensions("texture2DProjGradEXT", 1, &E_GL_EXT_shader_texture_lod);
 9516|      0|                symbolTable.setFunctionExtensions("textureCubeGradEXT",   1, &E_GL_EXT_shader_texture_lod);
 9517|      0|                if (version < 320)
  ------------------
  |  Branch (9517:21): [True: 0, False: 0]
  ------------------
 9518|      0|                    symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5);
 9519|      0|            }
 9520|      0|            if (version == 100) {
  ------------------
  |  Branch (9520:17): [True: 0, False: 0]
  ------------------
 9521|      0|                symbolTable.setFunctionExtensions("dFdx",   1, &E_GL_OES_standard_derivatives);
 9522|      0|                symbolTable.setFunctionExtensions("dFdy",   1, &E_GL_OES_standard_derivatives);
 9523|      0|                symbolTable.setFunctionExtensions("fwidth", 1, &E_GL_OES_standard_derivatives);
 9524|      0|            }
 9525|      0|            if (version == 310) {
  ------------------
  |  Branch (9525:17): [True: 0, False: 0]
  ------------------
 9526|      0|                symbolTable.setFunctionExtensions("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5);
 9527|      0|                symbolTable.setFunctionExtensions("interpolateAtCentroid", 1, &E_GL_OES_shader_multisample_interpolation);
 9528|      0|                symbolTable.setFunctionExtensions("interpolateAtSample",   1, &E_GL_OES_shader_multisample_interpolation);
 9529|      0|                symbolTable.setFunctionExtensions("interpolateAtOffset",   1, &E_GL_OES_shader_multisample_interpolation);
 9530|      0|            }
 9531|     99|        } else if (version < 130) {
  ------------------
  |  Branch (9531:20): [True: 0, False: 99]
  ------------------
 9532|      0|            if (spvVersion.spv == 0) {
  ------------------
  |  Branch (9532:17): [True: 0, False: 0]
  ------------------
 9533|      0|                symbolTable.setFunctionExtensions("texture1DLod",        1, &E_GL_ARB_shader_texture_lod);
 9534|      0|                symbolTable.setFunctionExtensions("texture2DLod",        1, &E_GL_ARB_shader_texture_lod);
 9535|      0|                symbolTable.setFunctionExtensions("texture3DLod",        1, &E_GL_ARB_shader_texture_lod);
 9536|      0|                symbolTable.setFunctionExtensions("textureCubeLod",      1, &E_GL_ARB_shader_texture_lod);
 9537|      0|                symbolTable.setFunctionExtensions("texture1DProjLod",    1, &E_GL_ARB_shader_texture_lod);
 9538|      0|                symbolTable.setFunctionExtensions("texture2DProjLod",    1, &E_GL_ARB_shader_texture_lod);
 9539|      0|                symbolTable.setFunctionExtensions("texture3DProjLod",    1, &E_GL_ARB_shader_texture_lod);
 9540|      0|                symbolTable.setFunctionExtensions("shadow1DLod",         1, &E_GL_ARB_shader_texture_lod);
 9541|      0|                symbolTable.setFunctionExtensions("shadow2DLod",         1, &E_GL_ARB_shader_texture_lod);
 9542|      0|                symbolTable.setFunctionExtensions("shadow1DProjLod",     1, &E_GL_ARB_shader_texture_lod);
 9543|      0|                symbolTable.setFunctionExtensions("shadow2DProjLod",     1, &E_GL_ARB_shader_texture_lod);
 9544|      0|            }
 9545|      0|        }
 9546|       |
 9547|       |        // E_GL_ARB_shader_texture_lod functions usable only with the extension enabled
 9548|     99|        if (profile != EEsProfile && spvVersion.spv == 0) {
  ------------------
  |  Branch (9548:13): [True: 99, False: 0]
  |  Branch (9548:38): [True: 0, False: 99]
  ------------------
 9549|      0|            symbolTable.setFunctionExtensions("texture1DGradARB",         1, &E_GL_ARB_shader_texture_lod);
 9550|      0|            symbolTable.setFunctionExtensions("texture1DProjGradARB",     1, &E_GL_ARB_shader_texture_lod);
 9551|      0|            symbolTable.setFunctionExtensions("texture2DGradARB",         1, &E_GL_ARB_shader_texture_lod);
 9552|      0|            symbolTable.setFunctionExtensions("texture2DProjGradARB",     1, &E_GL_ARB_shader_texture_lod);
 9553|      0|            symbolTable.setFunctionExtensions("texture3DGradARB",         1, &E_GL_ARB_shader_texture_lod);
 9554|      0|            symbolTable.setFunctionExtensions("texture3DProjGradARB",     1, &E_GL_ARB_shader_texture_lod);
 9555|      0|            symbolTable.setFunctionExtensions("textureCubeGradARB",       1, &E_GL_ARB_shader_texture_lod);
 9556|      0|            symbolTable.setFunctionExtensions("shadow1DGradARB",          1, &E_GL_ARB_shader_texture_lod);
 9557|      0|            symbolTable.setFunctionExtensions("shadow1DProjGradARB",      1, &E_GL_ARB_shader_texture_lod);
 9558|      0|            symbolTable.setFunctionExtensions("shadow2DGradARB",          1, &E_GL_ARB_shader_texture_lod);
 9559|      0|            symbolTable.setFunctionExtensions("shadow2DProjGradARB",      1, &E_GL_ARB_shader_texture_lod);
 9560|      0|            symbolTable.setFunctionExtensions("texture2DRectGradARB",     1, &E_GL_ARB_shader_texture_lod);
 9561|      0|            symbolTable.setFunctionExtensions("texture2DRectProjGradARB", 1, &E_GL_ARB_shader_texture_lod);
 9562|      0|            symbolTable.setFunctionExtensions("shadow2DRectGradARB",      1, &E_GL_ARB_shader_texture_lod);
 9563|      0|            symbolTable.setFunctionExtensions("shadow2DRectProjGradARB",  1, &E_GL_ARB_shader_texture_lod);
 9564|      0|        }
 9565|       |
 9566|       |        // E_GL_ARB_shader_image_load_store
 9567|     99|        if (profile != EEsProfile && version < 420)
  ------------------
  |  Branch (9567:13): [True: 99, False: 0]
  |  Branch (9567:38): [True: 89, False: 10]
  ------------------
 9568|     89|            symbolTable.setFunctionExtensions("memoryBarrier", 1, &E_GL_ARB_shader_image_load_store);
 9569|       |        // All the image access functions are protected by checks on the type of the first argument.
 9570|       |
 9571|       |        // E_GL_ARB_shader_atomic_counters
 9572|     99|        if (profile != EEsProfile && version < 420) {
  ------------------
  |  Branch (9572:13): [True: 99, False: 0]
  |  Branch (9572:38): [True: 89, False: 10]
  ------------------
 9573|     89|            symbolTable.setFunctionExtensions("atomicCounterIncrement", 1, &E_GL_ARB_shader_atomic_counters);
 9574|     89|            symbolTable.setFunctionExtensions("atomicCounterDecrement", 1, &E_GL_ARB_shader_atomic_counters);
 9575|     89|            symbolTable.setFunctionExtensions("atomicCounter"         , 1, &E_GL_ARB_shader_atomic_counters);
 9576|     89|        }
 9577|       |
 9578|       |        // E_GL_ARB_gpu_shader5/E_GL_NV_gpu_shader5 
 9579|     99|        if (profile != EEsProfile && version < 400) {
  ------------------
  |  Branch (9579:13): [True: 99, False: 0]
  |  Branch (9579:38): [True: 87, False: 12]
  ------------------
 9580|     87|            symbolTable.setFunctionExtensions("bitfieldExtract", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9581|     87|            symbolTable.setFunctionExtensions("bitfieldInsert", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9582|     87|            symbolTable.setFunctionExtensions("bitfieldReverse", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9583|     87|            symbolTable.setFunctionExtensions("bitCount", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9584|     87|            symbolTable.setFunctionExtensions("findLSB", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9585|     87|            symbolTable.setFunctionExtensions("findMSB", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9586|     87|            symbolTable.setFunctionExtensions("uaddCarry", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9587|     87|            symbolTable.setFunctionExtensions("usubBorrow", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9588|     87|            symbolTable.setFunctionExtensions("umulExtended", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9589|     87|            symbolTable.setFunctionExtensions("imulExtended", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9590|     87|            symbolTable.setFunctionExtensions("interpolateAtCentroid", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9591|     87|            symbolTable.setFunctionExtensions("interpolateAtSample", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9592|     87|            symbolTable.setFunctionExtensions("interpolateAtOffset", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5);
 9593|     87|        }
 9594|       |
 9595|       |        // E_GL_NV_gpu_shader5
 9596|     99|        if (profile != EEsProfile && version < 450) {
  ------------------
  |  Branch (9596:13): [True: 99, False: 0]
  |  Branch (9596:38): [True: 89, False: 10]
  ------------------
 9597|     89|            symbolTable.setFunctionExtensions("packInt2x32",     1, &E_GL_NV_gpu_shader5);
 9598|     89|            symbolTable.setFunctionExtensions("packUint2x32",     1, &E_GL_NV_gpu_shader5);
 9599|     89|            symbolTable.setFunctionExtensions("unpackInt2x32",     1, &E_GL_NV_gpu_shader5);
 9600|     89|            symbolTable.setFunctionExtensions("unpackUint2x32",     1, &E_GL_NV_gpu_shader5);
 9601|     89|            symbolTable.setFunctionExtensions("packFloat2x16",     1, &E_GL_NV_gpu_shader5);
 9602|     89|            symbolTable.setFunctionExtensions("unpackFloat2x16",     1, &E_GL_NV_gpu_shader5);
 9603|     89|            symbolTable.setFunctionExtensions("doubleBitsToInt64",     1, &E_GL_NV_gpu_shader5);
 9604|     89|            symbolTable.setFunctionExtensions("doubleBitsToUint64",     1, &E_GL_NV_gpu_shader5);
 9605|     89|            symbolTable.setFunctionExtensions("int64BitsToDouble",     1, &E_GL_NV_gpu_shader5);
 9606|     89|            symbolTable.setFunctionExtensions("uint64BitsToDouble",     1, &E_GL_NV_gpu_shader5);
 9607|     89|        }
 9608|       |
 9609|       |        // E_GL_ARB_shader_atomic_counter_ops
 9610|     99|        if (profile != EEsProfile && version == 450) {
  ------------------
  |  Branch (9610:13): [True: 99, False: 0]
  |  Branch (9610:38): [True: 10, False: 89]
  ------------------
 9611|     10|            symbolTable.setFunctionExtensions("atomicCounterAddARB"     , 1, &E_GL_ARB_shader_atomic_counter_ops);
 9612|     10|            symbolTable.setFunctionExtensions("atomicCounterSubtractARB", 1, &E_GL_ARB_shader_atomic_counter_ops);
 9613|     10|            symbolTable.setFunctionExtensions("atomicCounterMinARB"     , 1, &E_GL_ARB_shader_atomic_counter_ops);
 9614|     10|            symbolTable.setFunctionExtensions("atomicCounterMaxARB"     , 1, &E_GL_ARB_shader_atomic_counter_ops);
 9615|     10|            symbolTable.setFunctionExtensions("atomicCounterAndARB"     , 1, &E_GL_ARB_shader_atomic_counter_ops);
 9616|     10|            symbolTable.setFunctionExtensions("atomicCounterOrARB"      , 1, &E_GL_ARB_shader_atomic_counter_ops);
 9617|     10|            symbolTable.setFunctionExtensions("atomicCounterXorARB"     , 1, &E_GL_ARB_shader_atomic_counter_ops);
 9618|     10|            symbolTable.setFunctionExtensions("atomicCounterExchangeARB", 1, &E_GL_ARB_shader_atomic_counter_ops);
 9619|     10|            symbolTable.setFunctionExtensions("atomicCounterCompSwapARB", 1, &E_GL_ARB_shader_atomic_counter_ops);
 9620|     10|        }
 9621|       |
 9622|       |        // E_GL_ARB_derivative_control
 9623|     99|        if (profile != EEsProfile && version < 450) {
  ------------------
  |  Branch (9623:13): [True: 99, False: 0]
  |  Branch (9623:38): [True: 89, False: 10]
  ------------------
 9624|     89|            symbolTable.setFunctionExtensions("dFdxFine",     1, &E_GL_ARB_derivative_control);
 9625|     89|            symbolTable.setFunctionExtensions("dFdyFine",     1, &E_GL_ARB_derivative_control);
 9626|     89|            symbolTable.setFunctionExtensions("fwidthFine",   1, &E_GL_ARB_derivative_control);
 9627|     89|            symbolTable.setFunctionExtensions("dFdxCoarse",   1, &E_GL_ARB_derivative_control);
 9628|     89|            symbolTable.setFunctionExtensions("dFdyCoarse",   1, &E_GL_ARB_derivative_control);
 9629|     89|            symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_ARB_derivative_control);
 9630|     89|        }
 9631|       |
 9632|       |        // E_GL_ARB_sparse_texture2
 9633|     99|        if (profile != EEsProfile)
  ------------------
  |  Branch (9633:13): [True: 99, False: 0]
  ------------------
 9634|     99|        {
 9635|     99|            symbolTable.setFunctionExtensions("sparseTextureARB",              1, &E_GL_ARB_sparse_texture2);
 9636|     99|            symbolTable.setFunctionExtensions("sparseTextureLodARB",           1, &E_GL_ARB_sparse_texture2);
 9637|     99|            symbolTable.setFunctionExtensions("sparseTextureOffsetARB",        1, &E_GL_ARB_sparse_texture2);
 9638|     99|            symbolTable.setFunctionExtensions("sparseTexelFetchARB",           1, &E_GL_ARB_sparse_texture2);
 9639|     99|            symbolTable.setFunctionExtensions("sparseTexelFetchOffsetARB",     1, &E_GL_ARB_sparse_texture2);
 9640|     99|            symbolTable.setFunctionExtensions("sparseTextureLodOffsetARB",     1, &E_GL_ARB_sparse_texture2);
 9641|     99|            symbolTable.setFunctionExtensions("sparseTextureGradARB",          1, &E_GL_ARB_sparse_texture2);
 9642|     99|            symbolTable.setFunctionExtensions("sparseTextureGradOffsetARB",    1, &E_GL_ARB_sparse_texture2);
 9643|     99|            symbolTable.setFunctionExtensions("sparseTextureGatherARB",        1, &E_GL_ARB_sparse_texture2);
 9644|     99|            symbolTable.setFunctionExtensions("sparseTextureGatherOffsetARB",  1, &E_GL_ARB_sparse_texture2);
 9645|     99|            symbolTable.setFunctionExtensions("sparseTextureGatherOffsetsARB", 1, &E_GL_ARB_sparse_texture2);
 9646|     99|            symbolTable.setFunctionExtensions("sparseImageLoadARB",            1, &E_GL_ARB_sparse_texture2);
 9647|     99|            symbolTable.setFunctionExtensions("sparseTexelsResident",          1, &E_GL_ARB_sparse_texture2);
 9648|     99|        }
 9649|       |
 9650|       |        // E_GL_ARB_sparse_texture_clamp
 9651|     99|        if (profile != EEsProfile)
  ------------------
  |  Branch (9651:13): [True: 99, False: 0]
  ------------------
 9652|     99|        {
 9653|     99|            symbolTable.setFunctionExtensions("sparseTextureClampARB",              1, &E_GL_ARB_sparse_texture_clamp);
 9654|     99|            symbolTable.setFunctionExtensions("sparseTextureOffsetClampARB",        1, &E_GL_ARB_sparse_texture_clamp);
 9655|     99|            symbolTable.setFunctionExtensions("sparseTextureGradClampARB",          1, &E_GL_ARB_sparse_texture_clamp);
 9656|     99|            symbolTable.setFunctionExtensions("sparseTextureGradOffsetClampARB",    1, &E_GL_ARB_sparse_texture_clamp);
 9657|     99|            symbolTable.setFunctionExtensions("textureClampARB",                    1, &E_GL_ARB_sparse_texture_clamp);
 9658|     99|            symbolTable.setFunctionExtensions("textureOffsetClampARB",              1, &E_GL_ARB_sparse_texture_clamp);
 9659|     99|            symbolTable.setFunctionExtensions("textureGradClampARB",                1, &E_GL_ARB_sparse_texture_clamp);
 9660|     99|            symbolTable.setFunctionExtensions("textureGradOffsetClampARB",          1, &E_GL_ARB_sparse_texture_clamp);
 9661|     99|        }
 9662|       |
 9663|       |        // E_GL_AMD_shader_explicit_vertex_parameter
 9664|     99|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9664:13): [True: 99, False: 0]
  ------------------
 9665|     99|            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspAMD",         1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9666|     99|            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspCentroidAMD", 1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9667|     99|            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspSampleAMD",   1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9668|     99|            symbolTable.setVariableExtensions("gl_BaryCoordSmoothAMD",          1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9669|     99|            symbolTable.setVariableExtensions("gl_BaryCoordSmoothCentroidAMD",  1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9670|     99|            symbolTable.setVariableExtensions("gl_BaryCoordSmoothSampleAMD",    1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9671|     99|            symbolTable.setVariableExtensions("gl_BaryCoordPullModelAMD",       1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9672|       |
 9673|     99|            symbolTable.setFunctionExtensions("interpolateAtVertexAMD",         1, &E_GL_AMD_shader_explicit_vertex_parameter);
 9674|       |
 9675|     99|            BuiltInVariable("gl_BaryCoordNoPerspAMD",           EbvBaryCoordNoPersp,         symbolTable);
 9676|     99|            BuiltInVariable("gl_BaryCoordNoPerspCentroidAMD",   EbvBaryCoordNoPerspCentroid, symbolTable);
 9677|     99|            BuiltInVariable("gl_BaryCoordNoPerspSampleAMD",     EbvBaryCoordNoPerspSample,   symbolTable);
 9678|     99|            BuiltInVariable("gl_BaryCoordSmoothAMD",            EbvBaryCoordSmooth,          symbolTable);
 9679|     99|            BuiltInVariable("gl_BaryCoordSmoothCentroidAMD",    EbvBaryCoordSmoothCentroid,  symbolTable);
 9680|     99|            BuiltInVariable("gl_BaryCoordSmoothSampleAMD",      EbvBaryCoordSmoothSample,    symbolTable);
 9681|     99|            BuiltInVariable("gl_BaryCoordPullModelAMD",         EbvBaryCoordPullModel,       symbolTable);
 9682|     99|        }
 9683|       |
 9684|       |        // E_GL_AMD_texture_gather_bias_lod
 9685|     99|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9685:13): [True: 99, False: 0]
  ------------------
 9686|     99|            symbolTable.setFunctionExtensions("textureGatherLodAMD",                1, &E_GL_AMD_texture_gather_bias_lod);
 9687|     99|            symbolTable.setFunctionExtensions("textureGatherLodOffsetAMD",          1, &E_GL_AMD_texture_gather_bias_lod);
 9688|     99|            symbolTable.setFunctionExtensions("textureGatherLodOffsetsAMD",         1, &E_GL_AMD_texture_gather_bias_lod);
 9689|     99|            symbolTable.setFunctionExtensions("sparseTextureGatherLodAMD",          1, &E_GL_AMD_texture_gather_bias_lod);
 9690|     99|            symbolTable.setFunctionExtensions("sparseTextureGatherLodOffsetAMD",    1, &E_GL_AMD_texture_gather_bias_lod);
 9691|     99|            symbolTable.setFunctionExtensions("sparseTextureGatherLodOffsetsAMD",   1, &E_GL_AMD_texture_gather_bias_lod);
 9692|     99|        }
 9693|       |
 9694|       |        // E_GL_AMD_shader_image_load_store_lod
 9695|     99|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9695:13): [True: 99, False: 0]
  ------------------
 9696|     99|            symbolTable.setFunctionExtensions("imageLoadLodAMD",        1, &E_GL_AMD_shader_image_load_store_lod);
 9697|     99|            symbolTable.setFunctionExtensions("imageStoreLodAMD",       1, &E_GL_AMD_shader_image_load_store_lod);
 9698|     99|            symbolTable.setFunctionExtensions("sparseImageLoadLodAMD",  1, &E_GL_AMD_shader_image_load_store_lod);
 9699|     99|        }
 9700|     99|        if (profile != EEsProfile && version >= 430) {
  ------------------
  |  Branch (9700:13): [True: 99, False: 0]
  |  Branch (9700:38): [True: 10, False: 89]
  ------------------
 9701|     10|            symbolTable.setVariableExtensions("gl_FragFullyCoveredNV", 1, &E_GL_NV_conservative_raster_underestimation);
 9702|     10|            BuiltInVariable("gl_FragFullyCoveredNV", EbvFragFullyCoveredNV, symbolTable);
 9703|     10|        }
 9704|     99|        if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (9704:14): [True: 99, False: 0]
  |  Branch (9704:39): [True: 10, False: 89]
  ------------------
 9705|     89|            (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (9705:14): [True: 0, False: 89]
  |  Branch (9705:39): [True: 0, False: 0]
  ------------------
 9706|     10|            symbolTable.setVariableExtensions("gl_FragmentSizeNV",        1, &E_GL_NV_shading_rate_image);
 9707|     10|            symbolTable.setVariableExtensions("gl_InvocationsPerPixelNV", 1, &E_GL_NV_shading_rate_image);
 9708|     10|            BuiltInVariable("gl_FragmentSizeNV",        EbvFragmentSizeNV, symbolTable);
 9709|     10|            BuiltInVariable("gl_InvocationsPerPixelNV", EbvInvocationsPerPixelNV, symbolTable);
 9710|     10|            symbolTable.setVariableExtensions("gl_BaryCoordNV",        1, &E_GL_NV_fragment_shader_barycentric);
 9711|     10|            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspNV", 1, &E_GL_NV_fragment_shader_barycentric);
 9712|     10|            BuiltInVariable("gl_BaryCoordNV",        EbvBaryCoordNV,        symbolTable);
 9713|     10|            BuiltInVariable("gl_BaryCoordNoPerspNV", EbvBaryCoordNoPerspNV, symbolTable);
 9714|     10|            symbolTable.setVariableExtensions("gl_BaryCoordEXT",        1, &E_GL_EXT_fragment_shader_barycentric);
 9715|     10|            symbolTable.setVariableExtensions("gl_BaryCoordNoPerspEXT", 1, &E_GL_EXT_fragment_shader_barycentric);
 9716|     10|            BuiltInVariable("gl_BaryCoordEXT",        EbvBaryCoordEXT,        symbolTable);
 9717|     10|            BuiltInVariable("gl_BaryCoordNoPerspEXT", EbvBaryCoordNoPerspEXT, symbolTable);
 9718|     10|        }
 9719|       |
 9720|     99|        if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (9720:14): [True: 99, False: 0]
  |  Branch (9720:39): [True: 10, False: 89]
  ------------------
 9721|     89|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (9721:14): [True: 0, False: 89]
  |  Branch (9721:39): [True: 0, False: 0]
  ------------------
 9722|     10|            symbolTable.setVariableExtensions("gl_FragSizeEXT",            1, &E_GL_EXT_fragment_invocation_density);
 9723|     10|            symbolTable.setVariableExtensions("gl_FragInvocationCountEXT", 1, &E_GL_EXT_fragment_invocation_density);
 9724|     10|            BuiltInVariable("gl_FragSizeEXT",            EbvFragSizeEXT, symbolTable);
 9725|     10|            BuiltInVariable("gl_FragInvocationCountEXT", EbvFragInvocationCountEXT, symbolTable);
 9726|     10|        }
 9727|       |
 9728|     99|        symbolTable.setVariableExtensions("gl_FragDepthEXT", 1, &E_GL_EXT_frag_depth);
 9729|       |
 9730|     99|        symbolTable.setFunctionExtensions("clockARB",     1, &E_GL_ARB_shader_clock);
 9731|     99|        symbolTable.setFunctionExtensions("clock2x32ARB", 1, &E_GL_ARB_shader_clock);
 9732|       |
 9733|     99|        symbolTable.setFunctionExtensions("clockRealtimeEXT", 1, &E_GL_EXT_shader_realtime_clock);
 9734|     99|        symbolTable.setFunctionExtensions("clockRealtime2x32EXT", 1, &E_GL_EXT_shader_realtime_clock);
 9735|       |
 9736|     99|        if (profile == EEsProfile && version < 320) {
  ------------------
  |  Branch (9736:13): [True: 0, False: 99]
  |  Branch (9736:38): [True: 0, False: 0]
  ------------------
 9737|      0|            symbolTable.setVariableExtensions("gl_PrimitiveID",  Num_AEP_geometry_shader, AEP_geometry_shader);
 9738|      0|            symbolTable.setVariableExtensions("gl_Layer",        Num_AEP_geometry_shader, AEP_geometry_shader);
 9739|      0|        }
 9740|       |
 9741|     99|        if (profile == EEsProfile && version < 320) {
  ------------------
  |  Branch (9741:13): [True: 0, False: 99]
  |  Branch (9741:38): [True: 0, False: 0]
  ------------------
 9742|      0|            symbolTable.setFunctionExtensions("imageAtomicAdd",      1, &E_GL_OES_shader_image_atomic);
 9743|      0|            symbolTable.setFunctionExtensions("imageAtomicMin",      1, &E_GL_OES_shader_image_atomic);
 9744|      0|            symbolTable.setFunctionExtensions("imageAtomicMax",      1, &E_GL_OES_shader_image_atomic);
 9745|      0|            symbolTable.setFunctionExtensions("imageAtomicAnd",      1, &E_GL_OES_shader_image_atomic);
 9746|      0|            symbolTable.setFunctionExtensions("imageAtomicOr",       1, &E_GL_OES_shader_image_atomic);
 9747|      0|            symbolTable.setFunctionExtensions("imageAtomicXor",      1, &E_GL_OES_shader_image_atomic);
 9748|      0|            symbolTable.setFunctionExtensions("imageAtomicExchange", 1, &E_GL_OES_shader_image_atomic);
 9749|      0|            symbolTable.setFunctionExtensions("imageAtomicCompSwap", 1, &E_GL_OES_shader_image_atomic);
 9750|      0|        }
 9751|       |
 9752|     99|        if (profile != EEsProfile && version < 330 ) {
  ------------------
  |  Branch (9752:13): [True: 99, False: 0]
  |  Branch (9752:38): [True: 87, False: 12]
  ------------------
 9753|     87|            const int numBitEncodingExts = 3;
 9754|     87|            const char* bitEncodingExts[numBitEncodingExts] = { E_GL_ARB_shader_bit_encoding,
 9755|     87|                                                                E_GL_ARB_gpu_shader5,
 9756|     87|                                                                E_GL_NV_gpu_shader5};
 9757|     87|            symbolTable.setFunctionExtensions("floatBitsToInt", numBitEncodingExts, bitEncodingExts);
 9758|     87|            symbolTable.setFunctionExtensions("floatBitsToUint", numBitEncodingExts, bitEncodingExts);
 9759|     87|            symbolTable.setFunctionExtensions("intBitsToFloat", numBitEncodingExts, bitEncodingExts);
 9760|     87|            symbolTable.setFunctionExtensions("uintBitsToFloat", numBitEncodingExts, bitEncodingExts);
 9761|       |
 9762|     87|        }
 9763|       |
 9764|     99|        if (profile != EEsProfile && version < 430 ) {
  ------------------
  |  Branch (9764:13): [True: 99, False: 0]
  |  Branch (9764:38): [True: 89, False: 10]
  ------------------
 9765|     89|            symbolTable.setFunctionExtensions("imageSize", 1, &E_GL_ARB_shader_image_size);
 9766|     89|        }
 9767|       |
 9768|       |        // GL_ARB_shader_storage_buffer_object
 9769|     99|        if (profile != EEsProfile && version < 430 ) {
  ------------------
  |  Branch (9769:13): [True: 99, False: 0]
  |  Branch (9769:38): [True: 89, False: 10]
  ------------------
 9770|     89|            symbolTable.setFunctionExtensions("atomicAdd", 1, &E_GL_ARB_shader_storage_buffer_object);
 9771|     89|            symbolTable.setFunctionExtensions("atomicMin", 1, &E_GL_ARB_shader_storage_buffer_object);
 9772|     89|            symbolTable.setFunctionExtensions("atomicMax", 1, &E_GL_ARB_shader_storage_buffer_object);
 9773|     89|            symbolTable.setFunctionExtensions("atomicAnd", 1, &E_GL_ARB_shader_storage_buffer_object);
 9774|     89|            symbolTable.setFunctionExtensions("atomicOr", 1, &E_GL_ARB_shader_storage_buffer_object);
 9775|     89|            symbolTable.setFunctionExtensions("atomicXor", 1, &E_GL_ARB_shader_storage_buffer_object);
 9776|     89|            symbolTable.setFunctionExtensions("atomicExchange", 1, &E_GL_ARB_shader_storage_buffer_object);
 9777|     89|            symbolTable.setFunctionExtensions("atomicCompSwap", 1, &E_GL_ARB_shader_storage_buffer_object);
 9778|     89|        }
 9779|       |
 9780|       |        // GL_ARB_shading_language_packing
 9781|     99|        if (profile != EEsProfile && version < 400 ) {
  ------------------
  |  Branch (9781:13): [True: 99, False: 0]
  |  Branch (9781:38): [True: 87, False: 12]
  ------------------
 9782|     87|            const int numPackingExts = 3;
 9783|     87|            const char* packingExts[numPackingExts] = { E_GL_ARB_shading_language_packing,
 9784|     87|                                                                E_GL_ARB_gpu_shader5,
 9785|     87|                                                                E_GL_NV_gpu_shader5};
 9786|     87|            symbolTable.setFunctionExtensions("packUnorm2x16", numPackingExts, packingExts);
 9787|     87|            symbolTable.setFunctionExtensions("unpackUnorm2x16", numPackingExts, packingExts);
 9788|     87|            symbolTable.setFunctionExtensions("packSnorm4x8", numPackingExts, packingExts);
 9789|     87|            symbolTable.setFunctionExtensions("packUnorm4x8", numPackingExts, packingExts);
 9790|     87|            symbolTable.setFunctionExtensions("unpackSnorm4x8", numPackingExts, packingExts);
 9791|     87|            symbolTable.setFunctionExtensions("unpackUnorm4x8", numPackingExts, packingExts);
 9792|     87|        }
 9793|     99|        if (profile != EEsProfile && version < 420 ) {
  ------------------
  |  Branch (9793:13): [True: 99, False: 0]
  |  Branch (9793:38): [True: 89, False: 10]
  ------------------
 9794|     89|            symbolTable.setFunctionExtensions("packSnorm2x16", 1, &E_GL_ARB_shading_language_packing);
 9795|     89|            symbolTable.setFunctionExtensions("unpackSnorm2x16", 1, &E_GL_ARB_shading_language_packing);
 9796|     89|            symbolTable.setFunctionExtensions("unpackHalf2x16", 1, &E_GL_ARB_shading_language_packing);
 9797|     89|            symbolTable.setFunctionExtensions("packHalf2x16", 1, &E_GL_ARB_shading_language_packing);
 9798|     89|        }
 9799|       |
 9800|     99|        symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
 9801|     99|        BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
 9802|     99|        symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
 9803|     99|        BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
 9804|     99|        if (version >= 300 /* both ES and non-ES */) {
  ------------------
  |  Branch (9804:13): [True: 12, False: 87]
  ------------------
 9805|     12|            symbolTable.setVariableExtensions("gl_ViewID_OVR", Num_OVR_multiview_EXTs, OVR_multiview_EXTs);
 9806|     12|            BuiltInVariable("gl_ViewID_OVR", EbvViewIndex, symbolTable);
 9807|     12|        }
 9808|       |
 9809|       |        // GL_ARB_shader_ballot
 9810|     99|        if (profile != EEsProfile) {
  ------------------
  |  Branch (9810:13): [True: 99, False: 0]
  ------------------
 9811|     99|            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
 9812|     99|            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
 9813|     99|            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
 9814|     99|            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
 9815|     99|            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
 9816|     99|            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
 9817|     99|            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
 9818|       |
 9819|     99|            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
 9820|     99|            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
 9821|     99|            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
 9822|     99|            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
 9823|     99|            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
 9824|     99|            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
 9825|       |
 9826|     99|            if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (9826:17): [True: 99, False: 0]
  ------------------
 9827|       |                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
 9828|     99|                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
 9829|     99|                if (language == EShLangFragment)
  ------------------
  |  Branch (9829:21): [True: 99, False: 0]
  ------------------
 9830|     99|                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
 9831|     99|            }
 9832|      0|            else
 9833|      0|                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
 9834|     99|        }
 9835|       |
 9836|       |        // GL_EXT_expect_assume
 9837|     99|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (9837:14): [True: 0, False: 99]
  |  Branch (9837:39): [True: 0, False: 0]
  ------------------
 9838|     99|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (9838:14): [True: 99, False: 0]
  |  Branch (9838:39): [True: 99, False: 0]
  ------------------
 9839|     99|            symbolTable.setFunctionExtensions("assumeEXT", 1, &E_GL_EXT_expect_assume);
 9840|     99|            symbolTable.setFunctionExtensions("expectEXT", 1, &E_GL_EXT_expect_assume);
 9841|     99|        }
 9842|       |
 9843|       |        // GL_KHR_shader_subgroup
 9844|     99|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (9844:14): [True: 0, False: 99]
  |  Branch (9844:39): [True: 0, False: 0]
  ------------------
 9845|     99|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (9845:14): [True: 99, False: 0]
  |  Branch (9845:39): [True: 99, False: 0]
  ------------------
 9846|     99|            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
 9847|     99|            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
 9848|     99|            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9849|     99|            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9850|     99|            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9851|     99|            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9852|     99|            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
 9853|       |
 9854|     99|            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
 9855|     99|            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
 9856|     99|            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
 9857|     99|            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
 9858|     99|            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
 9859|     99|            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
 9860|     99|            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
 9861|       |
 9862|     99|            symbolTable.setFunctionExtensions("subgroupBarrier",                 1, &E_GL_KHR_shader_subgroup_basic);
 9863|     99|            symbolTable.setFunctionExtensions("subgroupMemoryBarrier",           1, &E_GL_KHR_shader_subgroup_basic);
 9864|     99|            symbolTable.setFunctionExtensions("subgroupMemoryBarrierBuffer",     1, &E_GL_KHR_shader_subgroup_basic);
 9865|     99|            symbolTable.setFunctionExtensions("subgroupMemoryBarrierImage",      1, &E_GL_KHR_shader_subgroup_basic);
 9866|     99|            symbolTable.setFunctionExtensions("subgroupElect",                   1, &E_GL_KHR_shader_subgroup_basic);
 9867|     99|            symbolTable.setFunctionExtensions("subgroupAll",                     1, &E_GL_KHR_shader_subgroup_vote);
 9868|     99|            symbolTable.setFunctionExtensions("subgroupAny",                     1, &E_GL_KHR_shader_subgroup_vote);
 9869|     99|            symbolTable.setFunctionExtensions("subgroupAllEqual",                1, &E_GL_KHR_shader_subgroup_vote);
 9870|     99|            symbolTable.setFunctionExtensions("subgroupBroadcast",               1, &E_GL_KHR_shader_subgroup_ballot);
 9871|     99|            symbolTable.setFunctionExtensions("subgroupBroadcastFirst",          1, &E_GL_KHR_shader_subgroup_ballot);
 9872|     99|            symbolTable.setFunctionExtensions("subgroupBallot",                  1, &E_GL_KHR_shader_subgroup_ballot);
 9873|     99|            symbolTable.setFunctionExtensions("subgroupInverseBallot",           1, &E_GL_KHR_shader_subgroup_ballot);
 9874|     99|            symbolTable.setFunctionExtensions("subgroupBallotBitExtract",        1, &E_GL_KHR_shader_subgroup_ballot);
 9875|     99|            symbolTable.setFunctionExtensions("subgroupBallotBitCount",          1, &E_GL_KHR_shader_subgroup_ballot);
 9876|     99|            symbolTable.setFunctionExtensions("subgroupBallotInclusiveBitCount", 1, &E_GL_KHR_shader_subgroup_ballot);
 9877|     99|            symbolTable.setFunctionExtensions("subgroupBallotExclusiveBitCount", 1, &E_GL_KHR_shader_subgroup_ballot);
 9878|     99|            symbolTable.setFunctionExtensions("subgroupBallotFindLSB",           1, &E_GL_KHR_shader_subgroup_ballot);
 9879|     99|            symbolTable.setFunctionExtensions("subgroupBallotFindMSB",           1, &E_GL_KHR_shader_subgroup_ballot);
 9880|     99|            symbolTable.setFunctionExtensions("subgroupShuffle",                 1, &E_GL_KHR_shader_subgroup_shuffle);
 9881|     99|            symbolTable.setFunctionExtensions("subgroupShuffleXor",              1, &E_GL_KHR_shader_subgroup_shuffle);
 9882|     99|            symbolTable.setFunctionExtensions("subgroupShuffleUp",               1, &E_GL_KHR_shader_subgroup_shuffle_relative);
 9883|     99|            symbolTable.setFunctionExtensions("subgroupShuffleDown",             1, &E_GL_KHR_shader_subgroup_shuffle_relative);
 9884|     99|            symbolTable.setFunctionExtensions("subgroupRotate",                  1, &E_GL_KHR_shader_subgroup_rotate);
 9885|     99|            symbolTable.setFunctionExtensions("subgroupClusteredRotate",         1, &E_GL_KHR_shader_subgroup_rotate);
 9886|     99|            symbolTable.setFunctionExtensions("subgroupAdd",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
 9887|     99|            symbolTable.setFunctionExtensions("subgroupMul",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
 9888|     99|            symbolTable.setFunctionExtensions("subgroupMin",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
 9889|     99|            symbolTable.setFunctionExtensions("subgroupMax",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
 9890|     99|            symbolTable.setFunctionExtensions("subgroupAnd",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
 9891|     99|            symbolTable.setFunctionExtensions("subgroupOr",                      1, &E_GL_KHR_shader_subgroup_arithmetic);
 9892|     99|            symbolTable.setFunctionExtensions("subgroupXor",                     1, &E_GL_KHR_shader_subgroup_arithmetic);
 9893|     99|            symbolTable.setFunctionExtensions("subgroupInclusiveAdd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
 9894|     99|            symbolTable.setFunctionExtensions("subgroupInclusiveMul",            1, &E_GL_KHR_shader_subgroup_arithmetic);
 9895|     99|            symbolTable.setFunctionExtensions("subgroupInclusiveMin",            1, &E_GL_KHR_shader_subgroup_arithmetic);
 9896|     99|            symbolTable.setFunctionExtensions("subgroupInclusiveMax",            1, &E_GL_KHR_shader_subgroup_arithmetic);
 9897|     99|            symbolTable.setFunctionExtensions("subgroupInclusiveAnd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
 9898|     99|            symbolTable.setFunctionExtensions("subgroupInclusiveOr",             1, &E_GL_KHR_shader_subgroup_arithmetic);
 9899|     99|            symbolTable.setFunctionExtensions("subgroupInclusiveXor",            1, &E_GL_KHR_shader_subgroup_arithmetic);
 9900|     99|            symbolTable.setFunctionExtensions("subgroupExclusiveAdd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
 9901|     99|            symbolTable.setFunctionExtensions("subgroupExclusiveMul",            1, &E_GL_KHR_shader_subgroup_arithmetic);
 9902|     99|            symbolTable.setFunctionExtensions("subgroupExclusiveMin",            1, &E_GL_KHR_shader_subgroup_arithmetic);
 9903|     99|            symbolTable.setFunctionExtensions("subgroupExclusiveMax",            1, &E_GL_KHR_shader_subgroup_arithmetic);
 9904|     99|            symbolTable.setFunctionExtensions("subgroupExclusiveAnd",            1, &E_GL_KHR_shader_subgroup_arithmetic);
 9905|     99|            symbolTable.setFunctionExtensions("subgroupExclusiveOr",             1, &E_GL_KHR_shader_subgroup_arithmetic);
 9906|     99|            symbolTable.setFunctionExtensions("subgroupExclusiveXor",            1, &E_GL_KHR_shader_subgroup_arithmetic);
 9907|     99|            symbolTable.setFunctionExtensions("subgroupClusteredAdd",            1, &E_GL_KHR_shader_subgroup_clustered);
 9908|     99|            symbolTable.setFunctionExtensions("subgroupClusteredMul",            1, &E_GL_KHR_shader_subgroup_clustered);
 9909|     99|            symbolTable.setFunctionExtensions("subgroupClusteredMin",            1, &E_GL_KHR_shader_subgroup_clustered);
 9910|     99|            symbolTable.setFunctionExtensions("subgroupClusteredMax",            1, &E_GL_KHR_shader_subgroup_clustered);
 9911|     99|            symbolTable.setFunctionExtensions("subgroupClusteredAnd",            1, &E_GL_KHR_shader_subgroup_clustered);
 9912|     99|            symbolTable.setFunctionExtensions("subgroupClusteredOr",             1, &E_GL_KHR_shader_subgroup_clustered);
 9913|     99|            symbolTable.setFunctionExtensions("subgroupClusteredXor",            1, &E_GL_KHR_shader_subgroup_clustered);
 9914|     99|            symbolTable.setFunctionExtensions("subgroupQuadBroadcast",           1, &E_GL_KHR_shader_subgroup_quad);
 9915|     99|            symbolTable.setFunctionExtensions("subgroupQuadSwapHorizontal",      1, &E_GL_KHR_shader_subgroup_quad);
 9916|     99|            symbolTable.setFunctionExtensions("subgroupQuadSwapVertical",        1, &E_GL_KHR_shader_subgroup_quad);
 9917|     99|            symbolTable.setFunctionExtensions("subgroupQuadSwapDiagonal",        1, &E_GL_KHR_shader_subgroup_quad);
 9918|     99|            symbolTable.setFunctionExtensions("subgroupPartitionNV",                          1, &E_GL_NV_shader_subgroup_partitioned);
 9919|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedAddNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
 9920|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedMulNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
 9921|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedMinNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
 9922|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedMaxNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
 9923|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedAndNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
 9924|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedOrNV",                      1, &E_GL_NV_shader_subgroup_partitioned);
 9925|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedXorNV",                     1, &E_GL_NV_shader_subgroup_partitioned);
 9926|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveAddNV",            1, &E_GL_NV_shader_subgroup_partitioned);
 9927|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveMulNV",            1, &E_GL_NV_shader_subgroup_partitioned);
 9928|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveMinNV",            1, &E_GL_NV_shader_subgroup_partitioned);
 9929|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveMaxNV",            1, &E_GL_NV_shader_subgroup_partitioned);
 9930|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveAndNV",            1, &E_GL_NV_shader_subgroup_partitioned);
 9931|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveOrNV",             1, &E_GL_NV_shader_subgroup_partitioned);
 9932|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedInclusiveXorNV",            1, &E_GL_NV_shader_subgroup_partitioned);
 9933|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveAddNV",            1, &E_GL_NV_shader_subgroup_partitioned);
 9934|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveMulNV",            1, &E_GL_NV_shader_subgroup_partitioned);
 9935|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveMinNV",            1, &E_GL_NV_shader_subgroup_partitioned);
 9936|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveMaxNV",            1, &E_GL_NV_shader_subgroup_partitioned);
 9937|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveAndNV",            1, &E_GL_NV_shader_subgroup_partitioned);
 9938|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveOrNV",             1, &E_GL_NV_shader_subgroup_partitioned);
 9939|     99|            symbolTable.setFunctionExtensions("subgroupPartitionedExclusiveXorNV",            1, &E_GL_NV_shader_subgroup_partitioned);
 9940|       |
 9941|       |            // GL_NV_shader_sm_builtins
 9942|     99|            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
 9943|     99|            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
 9944|     99|            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
 9945|     99|            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
 9946|     99|            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
 9947|     99|            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
 9948|     99|            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
 9949|     99|            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
 9950|       |
 9951|       |            // GL_ARM_shader_core_builtins
 9952|     99|            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
 9953|     99|            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
 9954|     99|            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
 9955|     99|            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
 9956|     99|            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
 9957|       |
 9958|     99|            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
 9959|     99|            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
 9960|     99|            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
 9961|     99|            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
 9962|     99|            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
 9963|     99|        }
 9964|       |
 9965|     99|        if (profile == EEsProfile) {
  ------------------
  |  Branch (9965:13): [True: 0, False: 99]
  ------------------
 9966|      0|            symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
 9967|      0|            symbolTable.setFunctionExtensions("shadow2DProjEXT",    1, &E_GL_EXT_shadow_samplers);
 9968|      0|        }
 9969|       |
 9970|     99|        if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (9970:13): [True: 99, False: 0]
  ------------------
 9971|     99|            symbolTable.setVariableExtensions("gl_ScopeDevice",             1, &E_GL_KHR_memory_scope_semantics);
 9972|     99|            symbolTable.setVariableExtensions("gl_ScopeWorkgroup",          1, &E_GL_KHR_memory_scope_semantics);
 9973|     99|            symbolTable.setVariableExtensions("gl_ScopeSubgroup",           1, &E_GL_KHR_memory_scope_semantics);
 9974|     99|            symbolTable.setVariableExtensions("gl_ScopeInvocation",         1, &E_GL_KHR_memory_scope_semantics);
 9975|       |
 9976|     99|            symbolTable.setVariableExtensions("gl_SemanticsRelaxed",        1, &E_GL_KHR_memory_scope_semantics);
 9977|     99|            symbolTable.setVariableExtensions("gl_SemanticsAcquire",        1, &E_GL_KHR_memory_scope_semantics);
 9978|     99|            symbolTable.setVariableExtensions("gl_SemanticsRelease",        1, &E_GL_KHR_memory_scope_semantics);
 9979|     99|            symbolTable.setVariableExtensions("gl_SemanticsAcquireRelease", 1, &E_GL_KHR_memory_scope_semantics);
 9980|     99|            symbolTable.setVariableExtensions("gl_SemanticsMakeAvailable",  1, &E_GL_KHR_memory_scope_semantics);
 9981|     99|            symbolTable.setVariableExtensions("gl_SemanticsMakeVisible",    1, &E_GL_KHR_memory_scope_semantics);
 9982|     99|            symbolTable.setVariableExtensions("gl_SemanticsVolatile",       1, &E_GL_KHR_memory_scope_semantics);
 9983|       |
 9984|     99|            symbolTable.setVariableExtensions("gl_StorageSemanticsNone",    1, &E_GL_KHR_memory_scope_semantics);
 9985|     99|            symbolTable.setVariableExtensions("gl_StorageSemanticsBuffer",  1, &E_GL_KHR_memory_scope_semantics);
 9986|     99|            symbolTable.setVariableExtensions("gl_StorageSemanticsShared",  1, &E_GL_KHR_memory_scope_semantics);
 9987|     99|            symbolTable.setVariableExtensions("gl_StorageSemanticsImage",   1, &E_GL_KHR_memory_scope_semantics);
 9988|     99|            symbolTable.setVariableExtensions("gl_StorageSemanticsOutput",  1, &E_GL_KHR_memory_scope_semantics);
 9989|     99|        }
 9990|       |
 9991|     99|        symbolTable.setFunctionExtensions("helperInvocationEXT",            1, &E_GL_EXT_demote_to_helper_invocation);
 9992|       |
 9993|     99|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (9993:14): [True: 0, False: 99]
  |  Branch (9993:39): [True: 0, False: 0]
  ------------------
 9994|     99|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (9994:14): [True: 99, False: 0]
  |  Branch (9994:39): [True: 10, False: 89]
  ------------------
 9995|     10|            symbolTable.setVariableExtensions("gl_ShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate);
 9996|     10|            BuiltInVariable("gl_ShadingRateEXT", EbvShadingRateKHR, symbolTable);
 9997|       |
 9998|     10|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
 9999|     10|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10000|     10|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10001|     10|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10002|     10|        }
10003|       |
10004|       |        // GL_EXT_shader_quad_control
10005|     99|        if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (10005:14): [True: 99, False: 0]
  |  Branch (10005:39): [True: 99, False: 0]
  ------------------
10006|     99|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (10006:14): [True: 0, False: 0]
  |  Branch (10006:39): [True: 0, False: 0]
  ------------------
10007|     99|            symbolTable.setFunctionExtensions("subgroupQuadAll",                     1,  &E_GL_KHR_shader_subgroup_vote);
10008|     99|            symbolTable.setFunctionExtensions("subgroupQuadAny",                     1,  &E_GL_KHR_shader_subgroup_vote);
10009|     99|        }
10010|       |
10011|       |        // GL_EXT_shader_tile_image
10012|     99|        symbolTable.setFunctionExtensions("stencilAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image);
10013|     99|        symbolTable.setFunctionExtensions("depthAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image);
10014|     99|        symbolTable.setFunctionExtensions("colorAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image);
10015|       |
10016|     99|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10016:14): [True: 0, False: 99]
  |  Branch (10016:39): [True: 0, False: 0]
  ------------------
10017|     99|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (10017:14): [True: 99, False: 0]
  |  Branch (10017:39): [True: 99, False: 0]
  ------------------
10018|       |
10019|     99|            symbolTable.setFunctionExtensions("textureWeightedQCOM",      1, &E_GL_QCOM_image_processing);
10020|     99|            symbolTable.setFunctionExtensions("textureBoxFilterQCOM",     1, &E_GL_QCOM_image_processing);
10021|     99|            symbolTable.setFunctionExtensions("textureBlockMatchSADQCOM", 1, &E_GL_QCOM_image_processing);
10022|     99|            symbolTable.setFunctionExtensions("textureBlockMatchSSDQCOM", 1, &E_GL_QCOM_image_processing);
10023|       |
10024|     99|            symbolTable.setFunctionExtensions("textureBlockMatchWindowSSDQCOM", 1, &E_GL_QCOM_image_processing2);
10025|     99|            symbolTable.setFunctionExtensions("textureBlockMatchWindowSADQCOM", 1, &E_GL_QCOM_image_processing2);
10026|     99|            symbolTable.setFunctionExtensions("textureBlockMatchGatherSSDQCOM", 1, &E_GL_QCOM_image_processing2);
10027|     99|            symbolTable.setFunctionExtensions("textureBlockMatchGatherSADQCOM", 1, &E_GL_QCOM_image_processing2);
10028|     99|        }
10029|       |
10030|     99|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10030:14): [True: 0, False: 99]
  |  Branch (10030:39): [True: 0, False: 0]
  ------------------
10031|     99|            (profile != EEsProfile && version >= 460)) {
  ------------------
  |  Branch (10031:14): [True: 99, False: 0]
  |  Branch (10031:39): [True: 0, False: 99]
  ------------------
10032|      0|            BuiltInVariable("gl_TileOffsetQCOM",    EbvTileOffsetQCOM,      symbolTable);
10033|      0|            BuiltInVariable("gl_TileDimensionQCOM", EbvTileDimensionQCOM,   symbolTable);
10034|      0|            BuiltInVariable("gl_TileApronSizeQCOM", EbvTileApronSizeQCOM,   symbolTable);
10035|       |
10036|      0|            symbolTable.setVariableExtensions("gl_TileOffsetQCOM",        1, &E_GL_QCOM_tile_shading);
10037|      0|            symbolTable.setVariableExtensions("gl_TileDimensionQCOM",     1, &E_GL_QCOM_tile_shading);
10038|      0|            symbolTable.setVariableExtensions("gl_TileApronSizeQCOM",     1, &E_GL_QCOM_tile_shading);
10039|      0|        }
10040|     99|        break;
10041|       |
10042|     10|    case EShLangCompute:
  ------------------
  |  Branch (10042:5): [True: 10, False: 312]
  ------------------
10043|     10|        BuiltInVariable("gl_NumWorkGroups",         EbvNumWorkGroups,        symbolTable);
10044|     10|        BuiltInVariable("gl_WorkGroupSize",         EbvWorkGroupSize,        symbolTable);
10045|     10|        BuiltInVariable("gl_WorkGroupID",           EbvWorkGroupId,          symbolTable);
10046|     10|        BuiltInVariable("gl_LocalInvocationID",     EbvLocalInvocationId,    symbolTable);
10047|     10|        BuiltInVariable("gl_GlobalInvocationID",    EbvGlobalInvocationId,   symbolTable);
10048|     10|        BuiltInVariable("gl_LocalInvocationIndex",  EbvLocalInvocationIndex, symbolTable);
10049|     10|        BuiltInVariable("gl_DeviceIndex",           EbvDeviceIndex,          symbolTable);
10050|     10|        BuiltInVariable("gl_ViewIndex",             EbvViewIndex,            symbolTable);
10051|       |
10052|     10|        if ((profile != EEsProfile && version >= 140) ||
  ------------------
  |  Branch (10052:14): [True: 10, False: 0]
  |  Branch (10052:39): [True: 10, False: 0]
  ------------------
10053|     10|            (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (10053:14): [True: 0, False: 0]
  |  Branch (10053:39): [True: 0, False: 0]
  ------------------
10054|     10|            symbolTable.setVariableExtensions("gl_DeviceIndex",  1, &E_GL_EXT_device_group);
10055|     10|            symbolTable.setVariableExtensions("gl_ViewIndex",    1, &E_GL_EXT_multiview);
10056|     10|        }
10057|       |
10058|     10|        if (profile != EEsProfile && version < 430) {
  ------------------
  |  Branch (10058:13): [True: 10, False: 0]
  |  Branch (10058:38): [True: 0, False: 10]
  ------------------
10059|      0|            symbolTable.setVariableExtensions("gl_NumWorkGroups",        1, &E_GL_ARB_compute_shader);
10060|      0|            symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_ARB_compute_shader);
10061|      0|            symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_ARB_compute_shader);
10062|      0|            symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_ARB_compute_shader);
10063|      0|            symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_ARB_compute_shader);
10064|      0|            symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_ARB_compute_shader);
10065|       |
10066|      0|            symbolTable.setVariableExtensions("gl_MaxComputeWorkGroupCount",       1, &E_GL_ARB_compute_shader);
10067|      0|            symbolTable.setVariableExtensions("gl_MaxComputeWorkGroupSize",        1, &E_GL_ARB_compute_shader);
10068|      0|            symbolTable.setVariableExtensions("gl_MaxComputeUniformComponents",    1, &E_GL_ARB_compute_shader);
10069|      0|            symbolTable.setVariableExtensions("gl_MaxComputeTextureImageUnits",    1, &E_GL_ARB_compute_shader);
10070|      0|            symbolTable.setVariableExtensions("gl_MaxComputeImageUniforms",        1, &E_GL_ARB_compute_shader);
10071|      0|            symbolTable.setVariableExtensions("gl_MaxComputeAtomicCounters",       1, &E_GL_ARB_compute_shader);
10072|      0|            symbolTable.setVariableExtensions("gl_MaxComputeAtomicCounterBuffers", 1, &E_GL_ARB_compute_shader);
10073|       |
10074|      0|            symbolTable.setFunctionExtensions("barrier",                    1, &E_GL_ARB_compute_shader);
10075|      0|            symbolTable.setFunctionExtensions("memoryBarrierAtomicCounter", 1, &E_GL_ARB_compute_shader);
10076|      0|            symbolTable.setFunctionExtensions("memoryBarrierBuffer",        1, &E_GL_ARB_compute_shader);
10077|      0|            symbolTable.setFunctionExtensions("memoryBarrierImage",         1, &E_GL_ARB_compute_shader);
10078|      0|            symbolTable.setFunctionExtensions("memoryBarrierShared",        1, &E_GL_ARB_compute_shader);
10079|      0|            symbolTable.setFunctionExtensions("groupMemoryBarrier",         1, &E_GL_ARB_compute_shader);
10080|      0|        }
10081|       |
10082|       |
10083|     10|        symbolTable.setFunctionExtensions("controlBarrier",                 1, &E_GL_KHR_memory_scope_semantics);
10084|     10|        symbolTable.setFunctionExtensions("debugPrintfEXT",                 1, &E_GL_EXT_debug_printf);
10085|     10|        symbolTable.setFunctionExtensions("abortEXT",                       1, &E_GL_EXT_abort);
10086|       |
10087|       |        // GL_ARB_shader_ballot
10088|     10|        if (profile != EEsProfile) {
  ------------------
  |  Branch (10088:13): [True: 10, False: 0]
  ------------------
10089|     10|            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
10090|     10|            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
10091|     10|            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
10092|     10|            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
10093|     10|            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
10094|     10|            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
10095|     10|            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
10096|       |
10097|     10|            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
10098|     10|            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
10099|     10|            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
10100|     10|            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
10101|     10|            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
10102|     10|            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
10103|       |
10104|     10|            if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (10104:17): [True: 10, False: 0]
  ------------------
10105|       |                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
10106|     10|                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
10107|     10|                if (language == EShLangFragment)
  ------------------
  |  Branch (10107:21): [True: 0, False: 10]
  ------------------
10108|      0|                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
10109|     10|            }
10110|      0|            else
10111|      0|                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
10112|     10|        }
10113|       |
10114|       |        // GL_KHR_shader_subgroup
10115|     10|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10115:14): [True: 0, False: 10]
  |  Branch (10115:39): [True: 0, False: 0]
  ------------------
10116|     10|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (10116:14): [True: 10, False: 0]
  |  Branch (10116:39): [True: 10, False: 0]
  ------------------
10117|     10|            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
10118|     10|            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
10119|     10|            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10120|     10|            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10121|     10|            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10122|     10|            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10123|     10|            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10124|       |
10125|     10|            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
10126|     10|            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
10127|     10|            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
10128|     10|            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
10129|     10|            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
10130|     10|            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
10131|     10|            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
10132|       |
10133|       |            // GL_NV_shader_sm_builtins
10134|     10|            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
10135|     10|            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
10136|     10|            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
10137|     10|            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
10138|     10|            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
10139|     10|            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
10140|     10|            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
10141|     10|            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
10142|       |
10143|       |            // GL_ARM_shader_core_builtins
10144|     10|            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
10145|     10|            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
10146|     10|            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10147|     10|            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
10148|     10|            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10149|       |
10150|     10|            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
10151|     10|            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
10152|     10|            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
10153|     10|            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
10154|     10|            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
10155|     10|        }
10156|       |
10157|       |        // GL_KHR_shader_subgroup
10158|     10|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10158:14): [True: 0, False: 10]
  |  Branch (10158:39): [True: 0, False: 0]
  ------------------
10159|     10|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (10159:14): [True: 10, False: 0]
  |  Branch (10159:39): [True: 10, False: 0]
  ------------------
10160|     10|            symbolTable.setVariableExtensions("gl_NumSubgroups", 1, &E_GL_KHR_shader_subgroup_basic);
10161|     10|            symbolTable.setVariableExtensions("gl_SubgroupID",   1, &E_GL_KHR_shader_subgroup_basic);
10162|       |
10163|     10|            BuiltInVariable("gl_NumSubgroups", EbvNumSubgroups, symbolTable);
10164|     10|            BuiltInVariable("gl_SubgroupID",   EbvSubgroupID,   symbolTable);
10165|       |
10166|     10|            symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
10167|     10|        }
10168|       |
10169|     10|        {
10170|     10|            const char *coopExt[2] = { E_GL_NV_cooperative_matrix, E_GL_NV_integer_cooperative_matrix };
10171|     10|            symbolTable.setFunctionExtensions("coopMatLoadNV",   2, coopExt);
10172|     10|            symbolTable.setFunctionExtensions("coopMatStoreNV",  2, coopExt);
10173|     10|            symbolTable.setFunctionExtensions("coopMatMulAddNV", 2, coopExt);
10174|     10|        }
10175|       |
10176|     10|        {
10177|     10|            auto coopMatKHRCallback = [](const char *name) -> std::vector<const char *> {
10178|     10|                std::vector<const char *> ret;
10179|     10|                if (strstr(name, "u64") != nullptr) {
10180|     10|                    ret.push_back(E_GL_EXT_shader_64bit_indexing);
10181|     10|                } else {
10182|     10|                    ret.push_back(E_GL_KHR_cooperative_matrix);
10183|     10|                }
10184|     10|                return ret;
10185|     10|            };
10186|     10|            auto coopMat2NVCallback = [](const char *name) -> std::vector<const char *> {
10187|     10|                std::vector<const char *> ret;
10188|     10|                if (strstr(name, "u64") != nullptr) {
10189|     10|                    ret.push_back(E_GL_EXT_shader_64bit_indexing);
10190|     10|                } else {
10191|     10|                    ret.push_back(E_GL_NV_cooperative_matrix2);
10192|     10|                }
10193|     10|                return ret;
10194|     10|            };
10195|       |
10196|     10|            symbolTable.setFunctionExtensionsCallback("coopMatLoad",   coopMatKHRCallback);
10197|     10|            symbolTable.setFunctionExtensionsCallback("coopMatStore",  coopMatKHRCallback);
10198|     10|            symbolTable.setFunctionExtensions("coopMatMulAdd", 1, &E_GL_KHR_cooperative_matrix);
10199|       |
10200|     10|            symbolTable.setFunctionExtensionsCallback("coopMatLoadTensorNV",   coopMat2NVCallback);
10201|     10|            symbolTable.setFunctionExtensionsCallback("coopMatStoreTensorNV",   coopMat2NVCallback);
10202|       |
10203|     10|            symbolTable.setFunctionExtensions("coopMatReduceNV",   1, &E_GL_NV_cooperative_matrix2);
10204|     10|            symbolTable.setFunctionExtensions("coopMatPerElementNV",  1, &E_GL_NV_cooperative_matrix2);
10205|     10|            symbolTable.setFunctionExtensions("coopMatTransposeNV",   1, &E_GL_NV_cooperative_matrix2);
10206|       |            
10207|     10|            symbolTable.setFunctionExtensions("createTensorLayoutNV",           1, &E_GL_NV_cooperative_matrix2);
10208|     10|            symbolTable.setFunctionExtensions("setTensorLayoutBlockSizeNV",     1, &E_GL_NV_cooperative_matrix2);
10209|     10|            symbolTable.setFunctionExtensions("setTensorLayoutDimensionNV",     1, &E_GL_NV_cooperative_matrix2);
10210|     10|            symbolTable.setFunctionExtensions("setTensorLayoutStrideNV",        1, &E_GL_NV_cooperative_matrix2);
10211|     10|            symbolTable.setFunctionExtensions("sliceTensorLayoutNV",            1, &E_GL_NV_cooperative_matrix2);
10212|     10|            symbolTable.setFunctionExtensions("setTensorLayoutClampValueNV",    1, &E_GL_NV_cooperative_matrix2);
10213|       |
10214|     10|            symbolTable.setFunctionExtensions("createTensorViewNV",             1, &E_GL_NV_cooperative_matrix2);
10215|     10|            symbolTable.setFunctionExtensions("setTensorViewDimensionsNV",      1, &E_GL_NV_cooperative_matrix2);
10216|     10|            symbolTable.setFunctionExtensions("setTensorViewStrideNV",          1, &E_GL_NV_cooperative_matrix2);
10217|     10|            symbolTable.setFunctionExtensions("setTensorViewClipNV",            1, &E_GL_NV_cooperative_matrix2);
10218|     10|        }
10219|       |
10220|     10|        {
10221|     10|            symbolTable.setFunctionExtensions("tensorReadARM",   1, &E_GL_ARM_tensors);
10222|     10|            symbolTable.setFunctionExtensions("tensorWriteARM",  1, &E_GL_ARM_tensors);
10223|     10|            symbolTable.setFunctionExtensions("tensorSizeARM",   1, &E_GL_ARM_tensors);
10224|     10|        }
10225|     10|        {
10226|     10|            auto coopVecCallback = [](const char *name) -> std::vector<const char *> {
10227|     10|                std::vector<const char *> ret;
10228|       |                // This looks for u64 as the last parameter (the offset)
10229|     10|                if (strstr(name, "u641;") != nullptr) {
10230|     10|                    ret.push_back(E_GL_EXT_shader_64bit_indexing);
10231|     10|                } else {
10232|     10|                    ret.push_back(E_GL_NV_cooperative_vector);
10233|     10|                }
10234|     10|                return ret;
10235|     10|            };
10236|     10|            symbolTable.setFunctionExtensionsCallback("coopVecMatMulNV", coopVecCallback);
10237|     10|            symbolTable.setFunctionExtensionsCallback("coopVecMatMulAddNV", coopVecCallback);
10238|     10|            symbolTable.setFunctionExtensionsCallback("coopVecLoadNV", coopVecCallback);
10239|     10|            symbolTable.setFunctionExtensionsCallback("coopVecStoreNV", coopVecCallback);
10240|     10|            symbolTable.setFunctionExtensionsCallback("coopVecOuterProductAccumulateNV", coopVecCallback);
10241|     10|            symbolTable.setFunctionExtensionsCallback("coopVecReduceSumAccumulateNV", coopVecCallback);
10242|     10|        }
10243|       |
10244|     10|        {
10245|     10|          symbolTable.setFunctionExtensions("bitcastQCOM", 1, &E_GL_QCOM_cooperative_matrix_conversion);
10246|     10|          symbolTable.setFunctionExtensions("extractSubArrayQCOM", 1, &E_GL_QCOM_cooperative_matrix_conversion);
10247|     10|          symbolTable.setFunctionExtensions("vectorToCoopmatQCOM", 1, &E_GL_QCOM_cooperative_matrix_conversion);
10248|     10|          symbolTable.setFunctionExtensions("coopmatToVectorQCOM", 1, &E_GL_QCOM_cooperative_matrix_conversion);
10249|     10|        }
10250|       |
10251|     10|        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (10251:14): [True: 10, False: 0]
  |  Branch (10251:39): [True: 10, False: 0]
  |  Branch (10251:59): [True: 0, False: 0]
  |  Branch (10251:84): [True: 0, False: 0]
  ------------------
10252|     10|            const char* const derivativeExts[] = { E_GL_NV_compute_shader_derivatives, E_GL_KHR_compute_shader_derivatives };
10253|     10|            if (language == EShLangCompute) {
  ------------------
  |  Branch (10253:17): [True: 10, False: 0]
  ------------------
10254|     10|                symbolTable.setFunctionExtensions("dFdx",                   2, derivativeExts);
10255|     10|                symbolTable.setFunctionExtensions("dFdy",                   2, derivativeExts);
10256|     10|                symbolTable.setFunctionExtensions("fwidth",                 2, derivativeExts);
10257|     10|                symbolTable.setFunctionExtensions("dFdxFine",               2, derivativeExts);
10258|     10|                symbolTable.setFunctionExtensions("dFdyFine",               2, derivativeExts);
10259|     10|                symbolTable.setFunctionExtensions("fwidthFine",             2, derivativeExts);
10260|     10|                symbolTable.setFunctionExtensions("dFdxCoarse",             2, derivativeExts);
10261|     10|                symbolTable.setFunctionExtensions("dFdyCoarse",             2, derivativeExts);
10262|     10|                symbolTable.setFunctionExtensions("fwidthCoarse",           2, derivativeExts);
10263|     10|            } else if (language == EShLangTask || language == EShLangMesh) {
  ------------------
  |  Branch (10263:24): [True: 0, False: 0]
  |  Branch (10263:51): [True: 0, False: 0]
  ------------------
10264|      0|                symbolTable.setFunctionExtensions("dFdx",                   1, &E_GL_KHR_compute_shader_derivatives);
10265|      0|                symbolTable.setFunctionExtensions("dFdy",                   1, &E_GL_KHR_compute_shader_derivatives);
10266|      0|                symbolTable.setFunctionExtensions("fwidth",                 1, &E_GL_KHR_compute_shader_derivatives);
10267|      0|                symbolTable.setFunctionExtensions("dFdxFine",               1, &E_GL_KHR_compute_shader_derivatives);
10268|      0|                symbolTable.setFunctionExtensions("dFdyFine",               1, &E_GL_KHR_compute_shader_derivatives);
10269|      0|                symbolTable.setFunctionExtensions("fwidthFine",             1, &E_GL_KHR_compute_shader_derivatives);
10270|      0|                symbolTable.setFunctionExtensions("dFdxCoarse",             1, &E_GL_KHR_compute_shader_derivatives);
10271|      0|                symbolTable.setFunctionExtensions("dFdyCoarse",             1, &E_GL_KHR_compute_shader_derivatives);
10272|      0|                symbolTable.setFunctionExtensions("fwidthCoarse",           1, &E_GL_KHR_compute_shader_derivatives);
10273|      0|            }
10274|     10|        }
10275|       |
10276|     10|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10276:14): [True: 0, False: 10]
  |  Branch (10276:39): [True: 0, False: 0]
  ------------------
10277|     10|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (10277:14): [True: 10, False: 0]
  |  Branch (10277:39): [True: 10, False: 0]
  ------------------
10278|     10|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10279|     10|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10280|     10|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10281|     10|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10282|     10|        }
10283|       |
10284|     10|        if ((profile != EEsProfile && version >= 460)) {
  ------------------
  |  Branch (10284:14): [True: 10, False: 0]
  |  Branch (10284:39): [True: 0, False: 10]
  ------------------
10285|      0|            symbolTable.setFunctionExtensions("fetchMicroTriangleVertexPositionNV", 1, &E_GL_NV_displacement_micromap);
10286|      0|            symbolTable.setFunctionExtensions("fetchMicroTriangleVertexBarycentricNV", 1, &E_GL_NV_displacement_micromap);
10287|      0|        }
10288|       |
10289|       |        // GL_EXT_integer_dot_product
10290|     10|        if ((profile == EEsProfile && version >= 300) ||
  ------------------
  |  Branch (10290:14): [True: 0, False: 10]
  |  Branch (10290:39): [True: 0, False: 0]
  ------------------
10291|     10|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (10291:14): [True: 10, False: 0]
  |  Branch (10291:39): [True: 10, False: 0]
  ------------------
10292|     10|            symbolTable.setFunctionExtensions("dotEXT", 1, &E_GL_EXT_integer_dot_product);
10293|     10|            symbolTable.setFunctionExtensions("dotPacked4x8EXT", 1, &E_GL_EXT_integer_dot_product);
10294|     10|            symbolTable.setFunctionExtensions("dotAccSatEXT", 1, &E_GL_EXT_integer_dot_product);
10295|     10|            symbolTable.setFunctionExtensions("dotPacked4x8AccSatEXT", 1, &E_GL_EXT_integer_dot_product);
10296|     10|        }
10297|       |
10298|     10|        {
10299|     10|            symbolTable.setFunctionExtensions("bfloat16BitsToIntEXT", 1, &E_GL_EXT_bfloat16);
10300|     10|            symbolTable.setFunctionExtensions("bfloat16BitsToUintEXT", 1, &E_GL_EXT_bfloat16);
10301|     10|            symbolTable.setFunctionExtensions("intBitsToBFloat16EXT", 1, &E_GL_EXT_bfloat16);
10302|     10|            symbolTable.setFunctionExtensions("uintBitsToBFloat16EXT", 1, &E_GL_EXT_bfloat16);
10303|       |
10304|     10|            symbolTable.setFunctionExtensions("floate5m2BitsToIntEXT", 1, &E_GL_EXT_float_e5m2);
10305|     10|            symbolTable.setFunctionExtensions("floate5m2BitsToUintEXT", 1, &E_GL_EXT_float_e5m2);
10306|     10|            symbolTable.setFunctionExtensions("intBitsToFloate5m2EXT", 1, &E_GL_EXT_float_e5m2);
10307|     10|            symbolTable.setFunctionExtensions("uintBitsToFloate5m2EXT", 1, &E_GL_EXT_float_e5m2);
10308|       |
10309|     10|            symbolTable.setFunctionExtensions("floate4m3BitsToIntEXT", 1, &E_GL_EXT_float_e4m3);
10310|     10|            symbolTable.setFunctionExtensions("floate4m3BitsToUintEXT", 1, &E_GL_EXT_float_e4m3);
10311|     10|            symbolTable.setFunctionExtensions("intBitsToFloate4m3EXT", 1, &E_GL_EXT_float_e4m3);
10312|     10|            symbolTable.setFunctionExtensions("uintBitsToFloate4m3EXT", 1, &E_GL_EXT_float_e4m3);
10313|       |
10314|     10|            const char *float8exts[] = {E_GL_EXT_float_e5m2, E_GL_EXT_float_e4m3};
10315|     10|            symbolTable.setFunctionExtensions("saturatedConvertEXT", 2, float8exts);
10316|     10|        }
10317|       |
10318|       |        // E_SPV_QCOM_tile_shading
10319|     10|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10319:14): [True: 0, False: 10]
  |  Branch (10319:39): [True: 0, False: 0]
  ------------------
10320|     10|            (profile != EEsProfile && version >= 460)) {
  ------------------
  |  Branch (10320:14): [True: 10, False: 0]
  |  Branch (10320:39): [True: 0, False: 10]
  ------------------
10321|      0|            BuiltInVariable("gl_TileOffsetQCOM",        EbvTileOffsetQCOM,      symbolTable);
10322|      0|            BuiltInVariable("gl_TileDimensionQCOM",     EbvTileDimensionQCOM,   symbolTable);
10323|      0|            BuiltInVariable("gl_TileApronSizeQCOM",     EbvTileApronSizeQCOM,   symbolTable);
10324|       |
10325|      0|            symbolTable.setVariableExtensions("gl_TileOffsetQCOM",        1, &E_GL_QCOM_tile_shading);
10326|      0|            symbolTable.setVariableExtensions("gl_TileDimensionQCOM",     1, &E_GL_QCOM_tile_shading);
10327|      0|            symbolTable.setVariableExtensions("gl_TileApronSizeQCOM",     1, &E_GL_QCOM_tile_shading);
10328|      0|        }
10329|     10|        break;
10330|       |
10331|     10|    case EShLangRayGen:
  ------------------
  |  Branch (10331:5): [True: 10, False: 312]
  ------------------
10332|     20|    case EShLangIntersect:
  ------------------
  |  Branch (10332:5): [True: 10, False: 312]
  ------------------
10333|     30|    case EShLangAnyHit:
  ------------------
  |  Branch (10333:5): [True: 10, False: 312]
  ------------------
10334|     40|    case EShLangClosestHit:
  ------------------
  |  Branch (10334:5): [True: 10, False: 312]
  ------------------
10335|     50|    case EShLangMiss:
  ------------------
  |  Branch (10335:5): [True: 10, False: 312]
  ------------------
10336|     60|    case EShLangCallable:
  ------------------
  |  Branch (10336:5): [True: 10, False: 312]
  ------------------
10337|     60|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (10337:13): [True: 60, False: 0]
  |  Branch (10337:38): [True: 0, False: 60]
  ------------------
10338|      0|            const char *rtexts[] = { E_GL_NV_ray_tracing, E_GL_EXT_ray_tracing };
10339|      0|            symbolTable.setVariableExtensions("gl_LaunchIDNV", 1, &E_GL_NV_ray_tracing);
10340|      0|            symbolTable.setVariableExtensions("gl_LaunchIDEXT", 1, &E_GL_EXT_ray_tracing);
10341|      0|            symbolTable.setVariableExtensions("gl_LaunchSizeNV", 1, &E_GL_NV_ray_tracing);
10342|      0|            symbolTable.setVariableExtensions("gl_LaunchSizeEXT", 1, &E_GL_EXT_ray_tracing);
10343|      0|            symbolTable.setVariableExtensions("gl_PrimitiveID", 2, rtexts);
10344|      0|            symbolTable.setVariableExtensions("gl_InstanceID", 2, rtexts);
10345|      0|            symbolTable.setVariableExtensions("gl_InstanceCustomIndexNV", 1, &E_GL_NV_ray_tracing);
10346|      0|            symbolTable.setVariableExtensions("gl_InstanceCustomIndexEXT", 1, &E_GL_EXT_ray_tracing);
10347|      0|            symbolTable.setVariableExtensions("gl_GeometryIndexEXT", 1, &E_GL_EXT_ray_tracing);
10348|      0|            symbolTable.setVariableExtensions("gl_WorldRayOriginNV", 1, &E_GL_NV_ray_tracing);
10349|      0|            symbolTable.setVariableExtensions("gl_WorldRayOriginEXT", 1, &E_GL_EXT_ray_tracing);
10350|      0|            symbolTable.setVariableExtensions("gl_WorldRayDirectionNV", 1, &E_GL_NV_ray_tracing);
10351|      0|            symbolTable.setVariableExtensions("gl_WorldRayDirectionEXT", 1, &E_GL_EXT_ray_tracing);
10352|      0|            symbolTable.setVariableExtensions("gl_ObjectRayOriginNV", 1, &E_GL_NV_ray_tracing);
10353|      0|            symbolTable.setVariableExtensions("gl_ObjectRayOriginEXT", 1, &E_GL_EXT_ray_tracing);
10354|      0|            symbolTable.setVariableExtensions("gl_ObjectRayDirectionNV", 1, &E_GL_NV_ray_tracing);
10355|      0|            symbolTable.setVariableExtensions("gl_ObjectRayDirectionEXT", 1, &E_GL_EXT_ray_tracing);
10356|      0|            symbolTable.setVariableExtensions("gl_RayTminNV", 1, &E_GL_NV_ray_tracing);
10357|      0|            symbolTable.setVariableExtensions("gl_RayTminEXT", 1, &E_GL_EXT_ray_tracing);
10358|      0|            symbolTable.setVariableExtensions("gl_RayTmaxNV", 1, &E_GL_NV_ray_tracing);
10359|      0|            symbolTable.setVariableExtensions("gl_RayTmaxEXT", 1, &E_GL_EXT_ray_tracing);
10360|      0|            symbolTable.setVariableExtensions("gl_CullMaskEXT", 1, &E_GL_EXT_ray_cull_mask);
10361|      0|            symbolTable.setVariableExtensions("gl_HitTNV", 1, &E_GL_NV_ray_tracing);
10362|      0|            symbolTable.setVariableExtensions("gl_HitTEXT", 1, &E_GL_EXT_ray_tracing);
10363|      0|            symbolTable.setVariableExtensions("gl_HitKindNV", 1, &E_GL_NV_ray_tracing);
10364|      0|            symbolTable.setVariableExtensions("gl_HitKindEXT", 1, &E_GL_EXT_ray_tracing);
10365|      0|            symbolTable.setVariableExtensions("gl_ObjectToWorldNV", 1, &E_GL_NV_ray_tracing);
10366|      0|            symbolTable.setVariableExtensions("gl_ObjectToWorldEXT", 1, &E_GL_EXT_ray_tracing);
10367|      0|            symbolTable.setVariableExtensions("gl_ObjectToWorld3x4EXT", 1, &E_GL_EXT_ray_tracing);
10368|      0|            symbolTable.setVariableExtensions("gl_WorldToObjectNV", 1, &E_GL_NV_ray_tracing);
10369|      0|            symbolTable.setVariableExtensions("gl_WorldToObjectEXT", 1, &E_GL_EXT_ray_tracing);
10370|      0|            symbolTable.setVariableExtensions("gl_WorldToObject3x4EXT", 1, &E_GL_EXT_ray_tracing);
10371|      0|            symbolTable.setVariableExtensions("gl_IncomingRayFlagsNV", 1, &E_GL_NV_ray_tracing);
10372|      0|            symbolTable.setVariableExtensions("gl_IncomingRayFlagsEXT", 1, &E_GL_EXT_ray_tracing);
10373|      0|            symbolTable.setVariableExtensions("gl_CurrentRayTimeNV", 1, &E_GL_NV_ray_tracing_motion_blur);
10374|      0|            symbolTable.setVariableExtensions("gl_HitTriangleVertexPositionsEXT", 1, &E_GL_EXT_ray_tracing_position_fetch);
10375|      0|            symbolTable.setVariableExtensions("gl_HitMicroTriangleVertexPositionsNV", 1, &E_GL_NV_displacement_micromap);
10376|      0|            symbolTable.setVariableExtensions("gl_HitMicroTriangleVertexBarycentricsNV", 1, &E_GL_NV_displacement_micromap);
10377|      0|            symbolTable.setVariableExtensions("gl_ClusterIDNV", 1, &E_GL_NV_cluster_acceleration_structure);
10378|      0|            symbolTable.setVariableExtensions("gl_HitKindSphereNV", 1, &E_GL_NV_linear_swept_spheres);
10379|      0|            symbolTable.setVariableExtensions("gl_HitKindLSSNV", 1, &E_GL_NV_linear_swept_spheres);
10380|      0|            symbolTable.setVariableExtensions("gl_HitSpherePositionNV", 1, &E_GL_NV_linear_swept_spheres);
10381|      0|            symbolTable.setVariableExtensions("gl_HitSphereRadiusNV", 1, &E_GL_NV_linear_swept_spheres);
10382|      0|            symbolTable.setVariableExtensions("gl_HitLSSPositionNV", 1, &E_GL_NV_linear_swept_spheres);
10383|      0|            symbolTable.setVariableExtensions("gl_HitLSSRadiiNV", 1, &E_GL_NV_linear_swept_spheres);
10384|       |
10385|      0|            symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
10386|       |
10387|       |
10388|      0|            symbolTable.setFunctionExtensions("traceNV", 1, &E_GL_NV_ray_tracing);
10389|      0|            symbolTable.setFunctionExtensions("traceRayMotionNV", 1, &E_GL_NV_ray_tracing_motion_blur);
10390|      0|            symbolTable.setFunctionExtensions("traceRayEXT", 1, &E_GL_EXT_ray_tracing);
10391|      0|            symbolTable.setFunctionExtensions("reportIntersectionNV", 1, &E_GL_NV_ray_tracing);
10392|      0|            symbolTable.setFunctionExtensions("reportIntersectionEXT", 1, &E_GL_EXT_ray_tracing);
10393|      0|            symbolTable.setFunctionExtensions("ignoreIntersectionNV", 1, &E_GL_NV_ray_tracing);
10394|      0|            symbolTable.setFunctionExtensions("terminateRayNV", 1, &E_GL_NV_ray_tracing);
10395|      0|            symbolTable.setFunctionExtensions("executeCallableNV", 1, &E_GL_NV_ray_tracing);
10396|      0|            symbolTable.setFunctionExtensions("executeCallableEXT", 1, &E_GL_EXT_ray_tracing);
10397|       |
10398|      0|            symbolTable.setFunctionExtensions("hitObjectTraceRayNV", 1, &E_GL_NV_shader_invocation_reorder);
10399|      0|            symbolTable.setFunctionExtensions("hitObjectTraceRayMotionNV", 1, &E_GL_NV_shader_invocation_reorder);
10400|      0|            symbolTable.setFunctionExtensions("hitObjectRecordHitNV", 1, &E_GL_NV_shader_invocation_reorder);
10401|      0|            symbolTable.setFunctionExtensions("hitObjectRecordHitMotionNV", 1, &E_GL_NV_shader_invocation_reorder);
10402|      0|            symbolTable.setFunctionExtensions("hitObjectRecordHitWithIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
10403|      0|            symbolTable.setFunctionExtensions("hitObjectRecordHitWithIndexMotionNV", 1, &E_GL_NV_shader_invocation_reorder);
10404|      0|            symbolTable.setFunctionExtensions("hitObjectRecordMissNV", 1, &E_GL_NV_shader_invocation_reorder);
10405|      0|            symbolTable.setFunctionExtensions("hitObjectRecordMissMotionNV", 1, &E_GL_NV_shader_invocation_reorder);
10406|      0|            symbolTable.setFunctionExtensions("hitObjectRecordEmptyNV", 1, &E_GL_NV_shader_invocation_reorder);
10407|      0|            symbolTable.setFunctionExtensions("hitObjectExecuteShaderNV", 1, &E_GL_NV_shader_invocation_reorder);
10408|      0|            symbolTable.setFunctionExtensions("hitObjectIsEmptyNV", 1, &E_GL_NV_shader_invocation_reorder);
10409|      0|            symbolTable.setFunctionExtensions("hitObjectIsMissNV", 1, &E_GL_NV_shader_invocation_reorder);
10410|      0|            symbolTable.setFunctionExtensions("hitObjectIsHitNV", 1, &E_GL_NV_shader_invocation_reorder);
10411|      0|            symbolTable.setFunctionExtensions("hitObjectGetRayTMinNV", 1, &E_GL_NV_shader_invocation_reorder);
10412|      0|            symbolTable.setFunctionExtensions("hitObjectGetRayTMaxNV", 1, &E_GL_NV_shader_invocation_reorder);
10413|      0|            symbolTable.setFunctionExtensions("hitObjectGetObjectRayOriginNV", 1, &E_GL_NV_shader_invocation_reorder);
10414|      0|            symbolTable.setFunctionExtensions("hitObjectGetObjectRayDirectionNV", 1, &E_GL_NV_shader_invocation_reorder);
10415|      0|            symbolTable.setFunctionExtensions("hitObjectGetWorldRayOriginNV", 1, &E_GL_NV_shader_invocation_reorder);
10416|      0|            symbolTable.setFunctionExtensions("hitObjectGetWorldRayDirectionNV", 1, &E_GL_NV_shader_invocation_reorder);
10417|      0|            symbolTable.setFunctionExtensions("hitObjectGetWorldToObjectNV", 1, &E_GL_NV_shader_invocation_reorder);
10418|      0|            symbolTable.setFunctionExtensions("hitObjectGetbjectToWorldNV", 1, &E_GL_NV_shader_invocation_reorder);
10419|      0|            symbolTable.setFunctionExtensions("hitObjectGetInstanceCustomIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
10420|      0|            symbolTable.setFunctionExtensions("hitObjectGetInstanceIdNV", 1, &E_GL_NV_shader_invocation_reorder);
10421|      0|            symbolTable.setFunctionExtensions("hitObjectGetGeometryIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
10422|      0|            symbolTable.setFunctionExtensions("hitObjectGetPrimitiveIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
10423|      0|            symbolTable.setFunctionExtensions("hitObjectGetHitKindNV", 1, &E_GL_NV_shader_invocation_reorder);
10424|      0|            symbolTable.setFunctionExtensions("hitObjectGetAttributesNV", 1, &E_GL_NV_shader_invocation_reorder);
10425|      0|            symbolTable.setFunctionExtensions("hitObjectGetCurrentTimeNV", 1, &E_GL_NV_shader_invocation_reorder);
10426|      0|            symbolTable.setFunctionExtensions("hitObjectGetShaderBindingTableRecordIndexNV", 1, &E_GL_NV_shader_invocation_reorder);
10427|      0|            symbolTable.setFunctionExtensions("hitObjectGetShaderRecordBufferHandleNV", 1, &E_GL_NV_shader_invocation_reorder);
10428|      0|            symbolTable.setFunctionExtensions("hitObjectGetClusterIdNV", 1, &E_GL_NV_cluster_acceleration_structure);
10429|      0|            symbolTable.setFunctionExtensions("reorderThreadNV", 1, &E_GL_NV_shader_invocation_reorder);
10430|      0|            symbolTable.setFunctionExtensions("fetchMicroTriangleVertexPositionNV", 1, &E_GL_NV_displacement_micromap);
10431|      0|            symbolTable.setFunctionExtensions("fetchMicroTriangleVertexBarycentricNV", 1, &E_GL_NV_displacement_micromap);
10432|      0|            symbolTable.setFunctionExtensions("hitObjectGetSpherePositionNV", 1, &E_GL_NV_linear_swept_spheres);
10433|      0|            symbolTable.setFunctionExtensions("hitObjectGetSphereRadiusNV", 1, &E_GL_NV_linear_swept_spheres);
10434|      0|            symbolTable.setFunctionExtensions("hitObjectGetLSSPositionsNV", 1, &E_GL_NV_linear_swept_spheres);
10435|      0|            symbolTable.setFunctionExtensions("hitObjectGetLSSRadiiNV", 1, &E_GL_NV_linear_swept_spheres);
10436|      0|            symbolTable.setFunctionExtensions("hitObjectIsSphereHitNV", 1, &E_GL_NV_linear_swept_spheres);
10437|      0|            symbolTable.setFunctionExtensions("hitObjectIsLSSHitNV", 1, &E_GL_NV_linear_swept_spheres);
10438|      0|            symbolTable.setFunctionExtensions("hitObjectTraceRayEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10439|      0|            symbolTable.setFunctionExtensions("hitObjectTraceRayMotionEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10440|      0|            symbolTable.setFunctionExtensions("hitObjectRecordMissEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10441|      0|            symbolTable.setFunctionExtensions("hitObjectRecordMissMotionEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10442|      0|            symbolTable.setFunctionExtensions("hitObjectRecordEmptyEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10443|      0|            symbolTable.setFunctionExtensions("hitObjectExecuteShaderEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10444|      0|            symbolTable.setFunctionExtensions("hitObjectIsEmptyEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10445|      0|            symbolTable.setFunctionExtensions("hitObjectIsMissEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10446|      0|            symbolTable.setFunctionExtensions("hitObjectIsHitEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10447|      0|            symbolTable.setFunctionExtensions("hitObjectGetRayTMinEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10448|      0|            symbolTable.setFunctionExtensions("hitObjectGetRayTMaxEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10449|      0|            symbolTable.setFunctionExtensions("hitObjectGetRayFlagsEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10450|      0|            symbolTable.setFunctionExtensions("hitObjectGetObjectRayOriginEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10451|      0|            symbolTable.setFunctionExtensions("hitObjectGetObjectRayDirectionEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10452|      0|            symbolTable.setFunctionExtensions("hitObjectGetWorldRayOriginEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10453|      0|            symbolTable.setFunctionExtensions("hitObjectGetWorldRayDirectionEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10454|      0|            symbolTable.setFunctionExtensions("hitObjectGetWorldToObjectEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10455|      0|            symbolTable.setFunctionExtensions("hitObjectGetObjectToWorldEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10456|      0|            symbolTable.setFunctionExtensions("hitObjectGetInstanceCustomIndexEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10457|      0|            symbolTable.setFunctionExtensions("hitObjectGetInstanceIdEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10458|      0|            symbolTable.setFunctionExtensions("hitObjectGetGeometryIndexEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10459|      0|            symbolTable.setFunctionExtensions("hitObjectGetPrimitiveIndexEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10460|      0|            symbolTable.setFunctionExtensions("hitObjectGetHitKindEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10461|      0|            symbolTable.setFunctionExtensions("hitObjectGetAttributesEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10462|      0|            symbolTable.setFunctionExtensions("hitObjectGetCurrentTimeEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10463|      0|            symbolTable.setFunctionExtensions("hitObjectGetShaderBindingTableRecordIndexEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10464|      0|            symbolTable.setFunctionExtensions("hitObjectGetShaderRecordBufferHandleEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10465|      0|            symbolTable.setFunctionExtensions("hitObjectSetShaderBindingTableRecordIndexEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10466|      0|            symbolTable.setFunctionExtensions("reorderThreadEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10467|      0|            symbolTable.setFunctionExtensions("hitObjectReorderExecuteEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10468|      0|            symbolTable.setFunctionExtensions("hitObjectTraceReorderExecuteEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10469|      0|            symbolTable.setFunctionExtensions("hitObjectTraceMotionReorderExecuteEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10470|      0|            symbolTable.setFunctionExtensions("hitObjectRecordFromQueryEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10471|      0|            symbolTable.setFunctionExtensions("hitObjectGetIntersectionTriangleVertexPositionsEXT", 1, &E_GL_EXT_shader_invocation_reorder);
10472|       |
10473|       |
10474|      0|            BuiltInVariable("gl_LaunchIDNV",             EbvLaunchId,           symbolTable);
10475|      0|            BuiltInVariable("gl_LaunchIDEXT",            EbvLaunchId,           symbolTable);
10476|      0|            BuiltInVariable("gl_LaunchSizeNV",           EbvLaunchSize,         symbolTable);
10477|      0|            BuiltInVariable("gl_LaunchSizeEXT",          EbvLaunchSize,         symbolTable);
10478|      0|            BuiltInVariable("gl_PrimitiveID",            EbvPrimitiveId,        symbolTable);
10479|      0|            BuiltInVariable("gl_InstanceID",             EbvInstanceId,         symbolTable);
10480|      0|            BuiltInVariable("gl_InstanceCustomIndexNV",  EbvInstanceCustomIndex,symbolTable);
10481|      0|            BuiltInVariable("gl_InstanceCustomIndexEXT", EbvInstanceCustomIndex,symbolTable);
10482|      0|            BuiltInVariable("gl_GeometryIndexEXT",       EbvGeometryIndex,      symbolTable);
10483|      0|            BuiltInVariable("gl_WorldRayOriginNV",       EbvWorldRayOrigin,     symbolTable);
10484|      0|            BuiltInVariable("gl_WorldRayOriginEXT",      EbvWorldRayOrigin,     symbolTable);
10485|      0|            BuiltInVariable("gl_WorldRayDirectionNV",    EbvWorldRayDirection,  symbolTable);
10486|      0|            BuiltInVariable("gl_WorldRayDirectionEXT",   EbvWorldRayDirection,  symbolTable);
10487|      0|            BuiltInVariable("gl_ObjectRayOriginNV",      EbvObjectRayOrigin,    symbolTable);
10488|      0|            BuiltInVariable("gl_ObjectRayOriginEXT",     EbvObjectRayOrigin,    symbolTable);
10489|      0|            BuiltInVariable("gl_ObjectRayDirectionNV",   EbvObjectRayDirection, symbolTable);
10490|      0|            BuiltInVariable("gl_ObjectRayDirectionEXT",  EbvObjectRayDirection, symbolTable);
10491|      0|            BuiltInVariable("gl_RayTminNV",              EbvRayTmin,            symbolTable);
10492|      0|            BuiltInVariable("gl_RayTminEXT",             EbvRayTmin,            symbolTable);
10493|      0|            BuiltInVariable("gl_RayTmaxNV",              EbvRayTmax,            symbolTable);
10494|      0|            BuiltInVariable("gl_RayTmaxEXT",             EbvRayTmax,            symbolTable);
10495|      0|            BuiltInVariable("gl_CullMaskEXT",            EbvCullMask,           symbolTable);
10496|      0|            BuiltInVariable("gl_HitKindNV",              EbvHitKind,            symbolTable);
10497|      0|            BuiltInVariable("gl_HitKindEXT",             EbvHitKind,            symbolTable);
10498|      0|            BuiltInVariable("gl_ObjectToWorldNV",        EbvObjectToWorld,      symbolTable);
10499|      0|            BuiltInVariable("gl_ObjectToWorldEXT",       EbvObjectToWorld,      symbolTable);
10500|      0|            BuiltInVariable("gl_ObjectToWorld3x4EXT",    EbvObjectToWorld3x4,   symbolTable);
10501|      0|            BuiltInVariable("gl_WorldToObjectNV",        EbvWorldToObject,      symbolTable);
10502|      0|            BuiltInVariable("gl_WorldToObjectEXT",       EbvWorldToObject,      symbolTable);
10503|      0|            BuiltInVariable("gl_WorldToObject3x4EXT",    EbvWorldToObject3x4,   symbolTable);
10504|      0|            BuiltInVariable("gl_IncomingRayFlagsNV",     EbvIncomingRayFlags,   symbolTable);
10505|      0|            BuiltInVariable("gl_IncomingRayFlagsEXT",    EbvIncomingRayFlags,   symbolTable);
10506|      0|            BuiltInVariable("gl_DeviceIndex",            EbvDeviceIndex,        symbolTable);
10507|      0|            BuiltInVariable("gl_CurrentRayTimeNV",       EbvCurrentRayTimeNV,   symbolTable);
10508|      0|            BuiltInVariable("gl_HitTriangleVertexPositionsEXT", EbvPositionFetch, symbolTable);
10509|      0|            BuiltInVariable("gl_HitMicroTriangleVertexPositionsNV", EbvMicroTrianglePositionNV, symbolTable);
10510|      0|            BuiltInVariable("gl_HitMicroTriangleVertexBarycentricsNV", EbvMicroTriangleBaryNV, symbolTable);
10511|      0|            BuiltInVariable("gl_HitKindFrontFacingMicroTriangleNV", EbvHitKindFrontFacingMicroTriangleNV, symbolTable);
10512|      0|            BuiltInVariable("gl_HitKindBackFacingMicroTriangleNV", EbvHitKindBackFacingMicroTriangleNV, symbolTable);
10513|      0|            BuiltInVariable("gl_ClusterIDNV",            EbvClusterIDNV,         symbolTable);
10514|      0|            BuiltInVariable("gl_HitIsSphereNV", EbvHitIsSphereNV, symbolTable);
10515|      0|            BuiltInVariable("gl_HitIsLSSNV", EbvHitIsLSSNV, symbolTable);
10516|      0|            BuiltInVariable("gl_HitSpherePositionNV", EbvHitSpherePositionNV, symbolTable);
10517|      0|            BuiltInVariable("gl_HitSphereRadiusNV", EbvHitSphereRadiusNV, symbolTable);
10518|      0|            BuiltInVariable("gl_HitLSSPositionsNV", EbvHitLSSPositionsNV, symbolTable);
10519|      0|            BuiltInVariable("gl_HitLSSRadiiNV", EbvHitLSSRadiiNV, symbolTable);
10520|       |
10521|       |            // gl_HitT variables are aliases of their gl_RayTmax counterparts.
10522|      0|            RetargetVariable("gl_HitTNV",                "gl_RayTmaxNV",        symbolTable);
10523|      0|            RetargetVariable("gl_HitTEXT",               "gl_RayTmaxEXT",       symbolTable);
10524|       |
10525|       |            // GL_ARB_shader_ballot
10526|      0|            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
10527|      0|            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
10528|      0|            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
10529|      0|            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
10530|      0|            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
10531|      0|            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
10532|      0|            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
10533|       |
10534|      0|            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
10535|      0|            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
10536|      0|            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
10537|      0|            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
10538|      0|            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
10539|      0|            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
10540|       |
10541|      0|            if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (10541:17): [True: 0, False: 0]
  ------------------
10542|       |                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
10543|      0|                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
10544|      0|                if (language == EShLangFragment)
  ------------------
  |  Branch (10544:21): [True: 0, False: 0]
  ------------------
10545|      0|                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
10546|      0|            }
10547|      0|            else
10548|      0|                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
10549|       |
10550|       |            // GL_KHR_shader_subgroup
10551|      0|            symbolTable.setVariableExtensions("gl_NumSubgroups",         1, &E_GL_KHR_shader_subgroup_basic);
10552|      0|            symbolTable.setVariableExtensions("gl_SubgroupID",           1, &E_GL_KHR_shader_subgroup_basic);
10553|      0|            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
10554|      0|            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
10555|      0|            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10556|      0|            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10557|      0|            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10558|      0|            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10559|      0|            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10560|       |
10561|      0|            BuiltInVariable("gl_NumSubgroups",         EbvNumSubgroups,        symbolTable);
10562|      0|            BuiltInVariable("gl_SubgroupID",           EbvSubgroupID,          symbolTable);
10563|      0|            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
10564|      0|            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
10565|      0|            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
10566|      0|            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
10567|      0|            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
10568|      0|            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
10569|      0|            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
10570|       |
10571|       |            // GL_NV_shader_sm_builtins
10572|      0|            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
10573|      0|            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
10574|      0|            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
10575|      0|            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
10576|      0|            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
10577|      0|            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
10578|      0|            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
10579|      0|            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
10580|       |
10581|       |            // GL_ARM_shader_core_builtins
10582|      0|            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
10583|      0|            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
10584|      0|            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10585|      0|            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
10586|      0|            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10587|       |
10588|      0|            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
10589|      0|            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
10590|      0|            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
10591|      0|            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
10592|      0|            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
10593|      0|        }
10594|     60|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10594:14): [True: 0, False: 60]
  |  Branch (10594:39): [True: 0, False: 0]
  ------------------
10595|     60|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (10595:14): [True: 60, False: 0]
  |  Branch (10595:39): [True: 60, False: 0]
  ------------------
10596|     60|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10597|     60|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10598|     60|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10599|     60|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10600|     60|        }
10601|     60|        break;
10602|       |
10603|      5|    case EShLangMesh:
  ------------------
  |  Branch (10603:5): [True: 5, False: 317]
  ------------------
10604|      5|        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (10604:14): [True: 5, False: 0]
  |  Branch (10604:39): [True: 5, False: 0]
  |  Branch (10604:59): [True: 0, False: 0]
  |  Branch (10604:84): [True: 0, False: 0]
  ------------------
10605|       |            // per-vertex builtins
10606|      5|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_Position",     1, &E_GL_NV_mesh_shader);
10607|      5|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_PointSize",    1, &E_GL_NV_mesh_shader);
10608|      5|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_ClipDistance", 1, &E_GL_NV_mesh_shader);
10609|      5|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_CullDistance", 1, &E_GL_NV_mesh_shader);
10610|       |
10611|      5|            BuiltInVariable("gl_MeshVerticesNV", "gl_Position",     EbvPosition,     symbolTable);
10612|      5|            BuiltInVariable("gl_MeshVerticesNV", "gl_PointSize",    EbvPointSize,    symbolTable);
10613|      5|            BuiltInVariable("gl_MeshVerticesNV", "gl_ClipDistance", EbvClipDistance, symbolTable);
10614|      5|            BuiltInVariable("gl_MeshVerticesNV", "gl_CullDistance", EbvCullDistance, symbolTable);
10615|       |
10616|      5|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_PositionPerViewNV",     1, &E_GL_NV_mesh_shader);
10617|      5|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_ClipDistancePerViewNV", 1, &E_GL_NV_mesh_shader);
10618|      5|            symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_CullDistancePerViewNV", 1, &E_GL_NV_mesh_shader);
10619|       |
10620|      5|            BuiltInVariable("gl_MeshVerticesNV", "gl_PositionPerViewNV",     EbvPositionPerViewNV,     symbolTable);
10621|      5|            BuiltInVariable("gl_MeshVerticesNV", "gl_ClipDistancePerViewNV", EbvClipDistancePerViewNV, symbolTable);
10622|      5|            BuiltInVariable("gl_MeshVerticesNV", "gl_CullDistancePerViewNV", EbvCullDistancePerViewNV, symbolTable);
10623|       |
10624|       |            // per-primitive builtins
10625|      5|            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_PrimitiveID",   1, &E_GL_NV_mesh_shader);
10626|      5|            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_Layer",         1, &E_GL_NV_mesh_shader);
10627|      5|            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_ViewportIndex", 1, &E_GL_NV_mesh_shader);
10628|      5|            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_ViewportMask",  1, &E_GL_NV_mesh_shader);
10629|       |
10630|      5|            BuiltInVariable("gl_MeshPrimitivesNV", "gl_PrimitiveID",   EbvPrimitiveId,    symbolTable);
10631|      5|            BuiltInVariable("gl_MeshPrimitivesNV", "gl_Layer",         EbvLayer,          symbolTable);
10632|      5|            BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportIndex", EbvViewportIndex,  symbolTable);
10633|      5|            BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportMask",  EbvViewportMaskNV, symbolTable);
10634|       |
10635|       |            // per-view per-primitive builtins
10636|      5|            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_LayerPerViewNV",        1, &E_GL_NV_mesh_shader);
10637|      5|            symbolTable.setVariableExtensions("gl_MeshPrimitivesNV", "gl_ViewportMaskPerViewNV", 1, &E_GL_NV_mesh_shader);
10638|       |
10639|      5|            BuiltInVariable("gl_MeshPrimitivesNV", "gl_LayerPerViewNV",        EbvLayerPerViewNV,        symbolTable);
10640|      5|            BuiltInVariable("gl_MeshPrimitivesNV", "gl_ViewportMaskPerViewNV", EbvViewportMaskPerViewNV, symbolTable);
10641|       |
10642|       |            // other builtins
10643|      5|            symbolTable.setVariableExtensions("gl_PrimitiveCountNV",     1, &E_GL_NV_mesh_shader);
10644|      5|            symbolTable.setVariableExtensions("gl_PrimitiveIndicesNV",   1, &E_GL_NV_mesh_shader);
10645|      5|            symbolTable.setVariableExtensions("gl_MeshViewCountNV",      1, &E_GL_NV_mesh_shader);
10646|      5|            symbolTable.setVariableExtensions("gl_MeshViewIndicesNV",    1, &E_GL_NV_mesh_shader);
10647|      5|            if (profile != EEsProfile) {
  ------------------
  |  Branch (10647:17): [True: 5, False: 0]
  ------------------
10648|      5|                symbolTable.setVariableExtensions("gl_WorkGroupSize",        Num_AEP_mesh_shader, AEP_mesh_shader);
10649|      5|                symbolTable.setVariableExtensions("gl_WorkGroupID",          Num_AEP_mesh_shader, AEP_mesh_shader);
10650|      5|                symbolTable.setVariableExtensions("gl_LocalInvocationID",    Num_AEP_mesh_shader, AEP_mesh_shader);
10651|      5|                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   Num_AEP_mesh_shader, AEP_mesh_shader);
10652|      5|                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", Num_AEP_mesh_shader, AEP_mesh_shader);
10653|      5|            } else {
10654|      0|                symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
10655|      0|                symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
10656|      0|                symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
10657|      0|                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
10658|      0|                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
10659|      0|            }
10660|      5|            BuiltInVariable("gl_PrimitiveCountNV",     EbvPrimitiveCountNV,     symbolTable);
10661|      5|            BuiltInVariable("gl_PrimitiveIndicesNV",   EbvPrimitiveIndicesNV,   symbolTable);
10662|      5|            BuiltInVariable("gl_MeshViewCountNV",      EbvMeshViewCountNV,      symbolTable);
10663|      5|            BuiltInVariable("gl_MeshViewIndicesNV",    EbvMeshViewIndicesNV,    symbolTable);
10664|      5|            BuiltInVariable("gl_WorkGroupSize",        EbvWorkGroupSize,        symbolTable);
10665|      5|            BuiltInVariable("gl_WorkGroupID",          EbvWorkGroupId,          symbolTable);
10666|      5|            BuiltInVariable("gl_LocalInvocationID",    EbvLocalInvocationId,    symbolTable);
10667|      5|            BuiltInVariable("gl_GlobalInvocationID",   EbvGlobalInvocationId,   symbolTable);
10668|      5|            BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable);
10669|       |
10670|       |            // builtin constants
10671|      5|            symbolTable.setVariableExtensions("gl_MaxMeshOutputVerticesNV",   1, &E_GL_NV_mesh_shader);
10672|      5|            symbolTable.setVariableExtensions("gl_MaxMeshOutputPrimitivesNV", 1, &E_GL_NV_mesh_shader);
10673|      5|            symbolTable.setVariableExtensions("gl_MaxMeshWorkGroupSizeNV",    1, &E_GL_NV_mesh_shader);
10674|      5|            symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV",        1, &E_GL_NV_mesh_shader);
10675|       |
10676|       |            // builtin functions
10677|      5|            if (profile != EEsProfile) {
  ------------------
  |  Branch (10677:17): [True: 5, False: 0]
  ------------------
10678|      5|                symbolTable.setFunctionExtensions("barrier",                      Num_AEP_mesh_shader, AEP_mesh_shader);
10679|      5|                symbolTable.setFunctionExtensions("memoryBarrierShared",          Num_AEP_mesh_shader, AEP_mesh_shader);
10680|      5|                symbolTable.setFunctionExtensions("groupMemoryBarrier",           Num_AEP_mesh_shader, AEP_mesh_shader);
10681|      5|            } else {
10682|      0|                symbolTable.setFunctionExtensions("barrier",                      1, &E_GL_NV_mesh_shader);
10683|      0|                symbolTable.setFunctionExtensions("memoryBarrierShared",          1, &E_GL_NV_mesh_shader);
10684|      0|                symbolTable.setFunctionExtensions("groupMemoryBarrier",           1, &E_GL_NV_mesh_shader);
10685|      0|            }
10686|      5|            symbolTable.setFunctionExtensions("writePackedPrimitiveIndices4x8NV",  1, &E_GL_NV_mesh_shader);
10687|      5|        }
10688|       |
10689|      5|        if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (10689:13): [True: 5, False: 0]
  |  Branch (10689:38): [True: 5, False: 0]
  ------------------
10690|       |            // GL_EXT_Mesh_shader
10691|      5|            symbolTable.setVariableExtensions("gl_PrimitivePointIndicesEXT",    1, &E_GL_EXT_mesh_shader);
10692|      5|            symbolTable.setVariableExtensions("gl_PrimitiveLineIndicesEXT",     1, &E_GL_EXT_mesh_shader);
10693|      5|            symbolTable.setVariableExtensions("gl_PrimitiveTriangleIndicesEXT", 1, &E_GL_EXT_mesh_shader);
10694|      5|            symbolTable.setVariableExtensions("gl_NumWorkGroups",               1, &E_GL_EXT_mesh_shader);
10695|       |
10696|      5|            BuiltInVariable("gl_PrimitivePointIndicesEXT",    EbvPrimitivePointIndicesEXT,    symbolTable);
10697|      5|            BuiltInVariable("gl_PrimitiveLineIndicesEXT",     EbvPrimitiveLineIndicesEXT,     symbolTable);
10698|      5|            BuiltInVariable("gl_PrimitiveTriangleIndicesEXT", EbvPrimitiveTriangleIndicesEXT, symbolTable);
10699|      5|            BuiltInVariable("gl_NumWorkGroups",        EbvNumWorkGroups,        symbolTable);
10700|       |
10701|      5|            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_Position",     1, &E_GL_EXT_mesh_shader);
10702|      5|            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_PointSize",    1, &E_GL_EXT_mesh_shader);
10703|      5|            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_ClipDistance", 1, &E_GL_EXT_mesh_shader);
10704|      5|            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_CullDistance", 1, &E_GL_EXT_mesh_shader);
10705|       |            
10706|      5|            BuiltInVariable("gl_MeshVerticesEXT", "gl_Position",     EbvPosition,     symbolTable);
10707|      5|            BuiltInVariable("gl_MeshVerticesEXT", "gl_PointSize",    EbvPointSize,    symbolTable);
10708|      5|            BuiltInVariable("gl_MeshVerticesEXT", "gl_ClipDistance", EbvClipDistance, symbolTable);
10709|      5|            BuiltInVariable("gl_MeshVerticesEXT", "gl_CullDistance", EbvCullDistance, symbolTable);
10710|       |            
10711|      5|            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_PrimitiveID",             1, &E_GL_EXT_mesh_shader);
10712|      5|            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_Layer",                   1, &E_GL_EXT_mesh_shader);
10713|      5|            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_ViewportIndex",           1, &E_GL_EXT_mesh_shader);
10714|      5|            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_CullPrimitiveEXT",        1, &E_GL_EXT_mesh_shader);
10715|       |
10716|       |            // note: technically this member requires both GL_EXT_mesh_shader and GL_EXT_fragment_shading_rate
10717|       |            // since setVariableExtensions only needs *one of* the extensions to validate, it's more useful to specify EXT_fragment_shading_rate
10718|       |            // GL_EXT_mesh_shader will be required in practice by use of other fields of gl_MeshPrimitivesEXT
10719|      5|            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_PrimitiveShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate);
10720|       |
10721|      5|            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_PrimitiveID",              EbvPrimitiveId,    symbolTable);
10722|      5|            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_Layer",                    EbvLayer,          symbolTable);
10723|      5|            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_ViewportIndex",            EbvViewportIndex,  symbolTable);
10724|      5|            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_CullPrimitiveEXT",         EbvCullPrimitiveEXT, symbolTable);
10725|      5|            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_PrimitiveShadingRateEXT",  EbvPrimitiveShadingRateKHR, symbolTable);
10726|       |
10727|      5|            symbolTable.setFunctionExtensions("SetMeshOutputsEXT",  1, &E_GL_EXT_mesh_shader);
10728|       |
10729|       |            // GL_EXT_device_group
10730|      5|            symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
10731|      5|            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
10732|       |
10733|       |            // GL_ARB_shader_draw_parameters
10734|      5|            symbolTable.setVariableExtensions("gl_DrawIDARB", 1, &E_GL_ARB_shader_draw_parameters);
10735|      5|            BuiltInVariable("gl_DrawIDARB", EbvDrawId, symbolTable);
10736|      5|            if (version >= 460) {
  ------------------
  |  Branch (10736:17): [True: 0, False: 5]
  ------------------
10737|      0|                BuiltInVariable("gl_DrawID", EbvDrawId, symbolTable);
10738|      0|            }
10739|       |            // GL_EXT_multiview
10740|      5|            BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
10741|      5|            symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
10742|       |
10743|       |            // GL_ARB_shader_ballot
10744|      5|            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
10745|      5|            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
10746|      5|            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
10747|      5|            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
10748|      5|            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
10749|      5|            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
10750|      5|            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
10751|       |
10752|      5|            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
10753|      5|            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
10754|      5|            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
10755|      5|            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
10756|      5|            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
10757|      5|            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
10758|       |
10759|      5|            if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (10759:17): [True: 5, False: 0]
  ------------------
10760|       |                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
10761|      5|                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
10762|      5|                if (language == EShLangFragment)
  ------------------
  |  Branch (10762:21): [True: 0, False: 5]
  ------------------
10763|      0|                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
10764|      5|            }
10765|      0|            else
10766|      0|                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
10767|      5|        }
10768|       |
10769|       |        // GL_KHR_shader_subgroup
10770|      5|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10770:14): [True: 0, False: 5]
  |  Branch (10770:39): [True: 0, False: 0]
  ------------------
10771|      5|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (10771:14): [True: 5, False: 0]
  |  Branch (10771:39): [True: 5, False: 0]
  ------------------
10772|      5|            symbolTable.setVariableExtensions("gl_NumSubgroups",         1, &E_GL_KHR_shader_subgroup_basic);
10773|      5|            symbolTable.setVariableExtensions("gl_SubgroupID",           1, &E_GL_KHR_shader_subgroup_basic);
10774|      5|            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
10775|      5|            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
10776|      5|            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10777|      5|            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10778|      5|            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10779|      5|            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10780|      5|            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10781|       |
10782|      5|            BuiltInVariable("gl_NumSubgroups",         EbvNumSubgroups,        symbolTable);
10783|      5|            BuiltInVariable("gl_SubgroupID",           EbvSubgroupID,          symbolTable);
10784|      5|            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
10785|      5|            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
10786|      5|            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
10787|      5|            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
10788|      5|            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
10789|      5|            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
10790|      5|            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
10791|       |
10792|      5|            symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
10793|       |
10794|       |            // GL_NV_shader_sm_builtins
10795|      5|            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
10796|      5|            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
10797|      5|            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
10798|      5|            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
10799|      5|            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
10800|      5|            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
10801|      5|            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
10802|      5|            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
10803|       |
10804|       |            // GL_ARM_shader_core_builtins
10805|      5|            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
10806|      5|            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
10807|      5|            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10808|      5|            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
10809|      5|            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10810|       |
10811|      5|            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
10812|      5|            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
10813|      5|            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
10814|      5|            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
10815|      5|            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
10816|      5|        }
10817|       |
10818|      5|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10818:14): [True: 0, False: 5]
  |  Branch (10818:39): [True: 0, False: 0]
  ------------------
10819|      5|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (10819:14): [True: 5, False: 0]
  |  Branch (10819:39): [True: 5, False: 0]
  ------------------
10820|      5|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10821|      5|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10822|      5|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10823|      5|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10824|      5|        }
10825|       |
10826|       |        // Builtins for GL_NV_displacment_micromap
10827|      5|        if ((profile != EEsProfile && version >= 460)) {
  ------------------
  |  Branch (10827:14): [True: 5, False: 0]
  |  Branch (10827:39): [True: 0, False: 5]
  ------------------
10828|      0|            symbolTable.setFunctionExtensions("fetchMicroTriangleVertexPositionNV", 1, &E_GL_NV_displacement_micromap);
10829|      0|            symbolTable.setFunctionExtensions("fetchMicroTriangleVertexBarycentricNV", 1, &E_GL_NV_displacement_micromap);
10830|      0|        }
10831|       |
10832|      5|        break;
10833|       |
10834|     10|    case EShLangTask:
  ------------------
  |  Branch (10834:5): [True: 10, False: 312]
  ------------------
10835|     10|        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (10835:14): [True: 10, False: 0]
  |  Branch (10835:39): [True: 10, False: 0]
  |  Branch (10835:59): [True: 0, False: 0]
  |  Branch (10835:84): [True: 0, False: 0]
  ------------------
10836|     10|            symbolTable.setVariableExtensions("gl_TaskCountNV",          1, &E_GL_NV_mesh_shader);
10837|     10|            symbolTable.setVariableExtensions("gl_MeshViewCountNV",      1, &E_GL_NV_mesh_shader);
10838|     10|            symbolTable.setVariableExtensions("gl_MeshViewIndicesNV",    1, &E_GL_NV_mesh_shader);
10839|     10|            if (profile != EEsProfile) {
  ------------------
  |  Branch (10839:17): [True: 10, False: 0]
  ------------------
10840|     10|                symbolTable.setVariableExtensions("gl_WorkGroupSize",        Num_AEP_mesh_shader, AEP_mesh_shader);
10841|     10|                symbolTable.setVariableExtensions("gl_WorkGroupID",          Num_AEP_mesh_shader, AEP_mesh_shader);
10842|     10|                symbolTable.setVariableExtensions("gl_LocalInvocationID",    Num_AEP_mesh_shader, AEP_mesh_shader);
10843|     10|                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   Num_AEP_mesh_shader, AEP_mesh_shader);
10844|     10|                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", Num_AEP_mesh_shader, AEP_mesh_shader);
10845|     10|            } else {
10846|      0|                symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
10847|      0|                symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
10848|      0|                symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
10849|      0|                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
10850|      0|                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
10851|      0|            }
10852|       |
10853|     10|            BuiltInVariable("gl_TaskCountNV",          EbvTaskCountNV,          symbolTable);
10854|     10|            BuiltInVariable("gl_WorkGroupSize",        EbvWorkGroupSize,        symbolTable);
10855|     10|            BuiltInVariable("gl_WorkGroupID",          EbvWorkGroupId,          symbolTable);
10856|     10|            BuiltInVariable("gl_LocalInvocationID",    EbvLocalInvocationId,    symbolTable);
10857|     10|            BuiltInVariable("gl_GlobalInvocationID",   EbvGlobalInvocationId,   symbolTable);
10858|     10|            BuiltInVariable("gl_LocalInvocationIndex", EbvLocalInvocationIndex, symbolTable);
10859|     10|            BuiltInVariable("gl_MeshViewCountNV",      EbvMeshViewCountNV,      symbolTable);
10860|     10|            BuiltInVariable("gl_MeshViewIndicesNV",    EbvMeshViewIndicesNV,    symbolTable);
10861|       |
10862|     10|            symbolTable.setVariableExtensions("gl_MaxTaskWorkGroupSizeNV", 1, &E_GL_NV_mesh_shader);
10863|     10|            symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV",     1, &E_GL_NV_mesh_shader);
10864|       |
10865|     10|            if (profile != EEsProfile) {
  ------------------
  |  Branch (10865:17): [True: 10, False: 0]
  ------------------
10866|     10|                symbolTable.setFunctionExtensions("barrier",                   Num_AEP_mesh_shader, AEP_mesh_shader);
10867|     10|                symbolTable.setFunctionExtensions("memoryBarrierShared",       Num_AEP_mesh_shader, AEP_mesh_shader);
10868|     10|                symbolTable.setFunctionExtensions("groupMemoryBarrier",        Num_AEP_mesh_shader, AEP_mesh_shader);
10869|     10|            } else {
10870|      0|                symbolTable.setFunctionExtensions("barrier",                   1, &E_GL_NV_mesh_shader);
10871|      0|                symbolTable.setFunctionExtensions("memoryBarrierShared",       1, &E_GL_NV_mesh_shader);
10872|      0|                symbolTable.setFunctionExtensions("groupMemoryBarrier",        1, &E_GL_NV_mesh_shader);
10873|      0|            }
10874|     10|        }
10875|       |
10876|     10|        if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (10876:13): [True: 10, False: 0]
  |  Branch (10876:38): [True: 10, False: 0]
  ------------------
10877|       |            // GL_EXT_mesh_shader
10878|     10|            symbolTable.setFunctionExtensions("EmitMeshTasksEXT",          1, &E_GL_EXT_mesh_shader);
10879|     10|            symbolTable.setVariableExtensions("gl_NumWorkGroups",        1, &E_GL_EXT_mesh_shader);
10880|     10|            BuiltInVariable("gl_NumWorkGroups",        EbvNumWorkGroups,        symbolTable);
10881|       |
10882|       |            // GL_EXT_device_group
10883|     10|            symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
10884|     10|            BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
10885|       |
10886|       |            // GL_ARB_shader_draw_parameters
10887|     10|            symbolTable.setVariableExtensions("gl_DrawIDARB", 1, &E_GL_ARB_shader_draw_parameters);
10888|     10|            BuiltInVariable("gl_DrawIDARB", EbvDrawId, symbolTable);
10889|     10|            if (version >= 460) {
  ------------------
  |  Branch (10889:17): [True: 0, False: 10]
  ------------------
10890|      0|                BuiltInVariable("gl_DrawID", EbvDrawId, symbolTable);
10891|      0|            }
10892|       |
10893|       |            // GL_ARB_shader_ballot
10894|     10|            symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
10895|     10|            symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
10896|     10|            symbolTable.setVariableExtensions("gl_SubGroupEqMaskARB",     1, &E_GL_ARB_shader_ballot);
10897|     10|            symbolTable.setVariableExtensions("gl_SubGroupGeMaskARB",     1, &E_GL_ARB_shader_ballot);
10898|     10|            symbolTable.setVariableExtensions("gl_SubGroupGtMaskARB",     1, &E_GL_ARB_shader_ballot);
10899|     10|            symbolTable.setVariableExtensions("gl_SubGroupLeMaskARB",     1, &E_GL_ARB_shader_ballot);
10900|     10|            symbolTable.setVariableExtensions("gl_SubGroupLtMaskARB",     1, &E_GL_ARB_shader_ballot);
10901|       |
10902|     10|            BuiltInVariable("gl_SubGroupInvocationARB", EbvSubGroupInvocation, symbolTable);
10903|     10|            BuiltInVariable("gl_SubGroupEqMaskARB",     EbvSubGroupEqMask,     symbolTable);
10904|     10|            BuiltInVariable("gl_SubGroupGeMaskARB",     EbvSubGroupGeMask,     symbolTable);
10905|     10|            BuiltInVariable("gl_SubGroupGtMaskARB",     EbvSubGroupGtMask,     symbolTable);
10906|     10|            BuiltInVariable("gl_SubGroupLeMaskARB",     EbvSubGroupLeMask,     symbolTable);
10907|     10|            BuiltInVariable("gl_SubGroupLtMaskARB",     EbvSubGroupLtMask,     symbolTable);
10908|       |
10909|     10|            if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (10909:17): [True: 10, False: 0]
  ------------------
10910|       |                // Treat "gl_SubGroupSizeARB" as shader input instead of uniform for Vulkan
10911|     10|                SpecialQualifier("gl_SubGroupSizeARB", EvqVaryingIn, EbvSubGroupSize, symbolTable);
10912|     10|                if (language == EShLangFragment)
  ------------------
  |  Branch (10912:21): [True: 0, False: 10]
  ------------------
10913|      0|                    ModifyFlatDecoration("gl_SubGroupSizeARB", true, symbolTable);
10914|     10|            }
10915|      0|            else
10916|      0|                BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
10917|     10|        }
10918|       |
10919|       |        // GL_KHR_shader_subgroup
10920|     10|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10920:14): [True: 0, False: 10]
  |  Branch (10920:39): [True: 0, False: 0]
  ------------------
10921|     10|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (10921:14): [True: 10, False: 0]
  |  Branch (10921:39): [True: 10, False: 0]
  ------------------
10922|     10|            symbolTable.setVariableExtensions("gl_NumSubgroups",         1, &E_GL_KHR_shader_subgroup_basic);
10923|     10|            symbolTable.setVariableExtensions("gl_SubgroupID",           1, &E_GL_KHR_shader_subgroup_basic);
10924|     10|            symbolTable.setVariableExtensions("gl_SubgroupSize",         1, &E_GL_KHR_shader_subgroup_basic);
10925|     10|            symbolTable.setVariableExtensions("gl_SubgroupInvocationID", 1, &E_GL_KHR_shader_subgroup_basic);
10926|     10|            symbolTable.setVariableExtensions("gl_SubgroupEqMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10927|     10|            symbolTable.setVariableExtensions("gl_SubgroupGeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10928|     10|            symbolTable.setVariableExtensions("gl_SubgroupGtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10929|     10|            symbolTable.setVariableExtensions("gl_SubgroupLeMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10930|     10|            symbolTable.setVariableExtensions("gl_SubgroupLtMask",       1, &E_GL_KHR_shader_subgroup_ballot);
10931|       |
10932|     10|            BuiltInVariable("gl_NumSubgroups",         EbvNumSubgroups,        symbolTable);
10933|     10|            BuiltInVariable("gl_SubgroupID",           EbvSubgroupID,          symbolTable);
10934|     10|            BuiltInVariable("gl_SubgroupSize",         EbvSubgroupSize2,       symbolTable);
10935|     10|            BuiltInVariable("gl_SubgroupInvocationID", EbvSubgroupInvocation2, symbolTable);
10936|     10|            BuiltInVariable("gl_SubgroupEqMask",       EbvSubgroupEqMask2,     symbolTable);
10937|     10|            BuiltInVariable("gl_SubgroupGeMask",       EbvSubgroupGeMask2,     symbolTable);
10938|     10|            BuiltInVariable("gl_SubgroupGtMask",       EbvSubgroupGtMask2,     symbolTable);
10939|     10|            BuiltInVariable("gl_SubgroupLeMask",       EbvSubgroupLeMask2,     symbolTable);
10940|     10|            BuiltInVariable("gl_SubgroupLtMask",       EbvSubgroupLtMask2,     symbolTable);
10941|       |
10942|     10|            symbolTable.setFunctionExtensions("subgroupMemoryBarrierShared", 1, &E_GL_KHR_shader_subgroup_basic);
10943|       |
10944|       |            // GL_NV_shader_sm_builtins
10945|     10|            symbolTable.setVariableExtensions("gl_WarpsPerSMNV",         1, &E_GL_NV_shader_sm_builtins);
10946|     10|            symbolTable.setVariableExtensions("gl_SMCountNV",            1, &E_GL_NV_shader_sm_builtins);
10947|     10|            symbolTable.setVariableExtensions("gl_WarpIDNV",             1, &E_GL_NV_shader_sm_builtins);
10948|     10|            symbolTable.setVariableExtensions("gl_SMIDNV",               1, &E_GL_NV_shader_sm_builtins);
10949|     10|            BuiltInVariable("gl_WarpsPerSMNV",          EbvWarpsPerSM,      symbolTable);
10950|     10|            BuiltInVariable("gl_SMCountNV",             EbvSMCount,         symbolTable);
10951|     10|            BuiltInVariable("gl_WarpIDNV",              EbvWarpID,          symbolTable);
10952|     10|            BuiltInVariable("gl_SMIDNV",                EbvSMID,            symbolTable);
10953|       |
10954|       |            // GL_ARM_shader_core_builtins
10955|     10|            symbolTable.setVariableExtensions("gl_CoreCountARM", 1, &E_GL_ARM_shader_core_builtins);
10956|     10|            symbolTable.setVariableExtensions("gl_CoreIDARM",    1, &E_GL_ARM_shader_core_builtins);
10957|     10|            symbolTable.setVariableExtensions("gl_CoreMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10958|     10|            symbolTable.setVariableExtensions("gl_WarpIDARM",    1, &E_GL_ARM_shader_core_builtins);
10959|     10|            symbolTable.setVariableExtensions("gl_WarpMaxIDARM", 1, &E_GL_ARM_shader_core_builtins);
10960|       |
10961|     10|            BuiltInVariable("gl_CoreCountARM", EbvCoreCountARM, symbolTable);
10962|     10|            BuiltInVariable("gl_CoreIDARM",    EbvCoreIDARM, symbolTable);
10963|     10|            BuiltInVariable("gl_CoreMaxIDARM", EbvCoreMaxIDARM, symbolTable);
10964|     10|            BuiltInVariable("gl_WarpIDARM",    EbvWarpIDARM, symbolTable);
10965|     10|            BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable);
10966|     10|        }
10967|     10|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (10967:14): [True: 0, False: 10]
  |  Branch (10967:39): [True: 0, False: 0]
  ------------------
10968|     10|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (10968:14): [True: 10, False: 0]
  |  Branch (10968:39): [True: 10, False: 0]
  ------------------
10969|     10|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10970|     10|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10971|     10|            symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10972|     10|            symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
10973|     10|        }
10974|     10|        break;
10975|       |
10976|      0|    default:
  ------------------
  |  Branch (10976:5): [True: 0, False: 322]
  ------------------
10977|      0|        assert(false && "Language not supported");
10978|      0|        break;
10979|    322|    }
10980|       |
10981|       |    //
10982|       |    // Next, identify which built-ins have a mapping to an operator.
10983|       |    // If PureOperatorBuiltins is false, those that are not identified as such are
10984|       |    // expected to be resolved through a library of functions, versus as
10985|       |    // operations.
10986|       |    //
10987|       |
10988|    322|    relateTabledBuiltins(version, profile, spvVersion, language, symbolTable);
10989|       |
10990|    322|    symbolTable.relateToOperator("doubleBitsToInt64",  EOpDoubleBitsToInt64);
10991|    322|    symbolTable.relateToOperator("doubleBitsToUint64", EOpDoubleBitsToUint64);
10992|    322|    symbolTable.relateToOperator("int64BitsToDouble",  EOpInt64BitsToDouble);
10993|    322|    symbolTable.relateToOperator("uint64BitsToDouble", EOpUint64BitsToDouble);
10994|    322|    symbolTable.relateToOperator("halfBitsToInt16",  EOpFloat16BitsToInt16);
10995|    322|    symbolTable.relateToOperator("halfBitsToUint16", EOpFloat16BitsToUint16);
10996|    322|    symbolTable.relateToOperator("float16BitsToInt16",  EOpFloat16BitsToInt16);
10997|    322|    symbolTable.relateToOperator("float16BitsToUint16", EOpFloat16BitsToUint16);
10998|    322|    symbolTable.relateToOperator("int16BitsToFloat16",  EOpInt16BitsToFloat16);
10999|    322|    symbolTable.relateToOperator("uint16BitsToFloat16", EOpUint16BitsToFloat16);
11000|       |
11001|    322|    symbolTable.relateToOperator("int16BitsToHalf",  EOpInt16BitsToFloat16);
11002|    322|    symbolTable.relateToOperator("uint16BitsToHalf", EOpUint16BitsToFloat16);
11003|       |
11004|    322|    symbolTable.relateToOperator("packSnorm4x8",    EOpPackSnorm4x8);
11005|    322|    symbolTable.relateToOperator("unpackSnorm4x8",  EOpUnpackSnorm4x8);
11006|    322|    symbolTable.relateToOperator("packUnorm4x8",    EOpPackUnorm4x8);
11007|    322|    symbolTable.relateToOperator("unpackUnorm4x8",  EOpUnpackUnorm4x8);
11008|       |
11009|    322|    symbolTable.relateToOperator("packDouble2x32",    EOpPackDouble2x32);
11010|    322|    symbolTable.relateToOperator("unpackDouble2x32",  EOpUnpackDouble2x32);
11011|       |
11012|    322|    symbolTable.relateToOperator("packInt2x32",     EOpPackInt2x32);
11013|    322|    symbolTable.relateToOperator("unpackInt2x32",   EOpUnpackInt2x32);
11014|    322|    symbolTable.relateToOperator("packUint2x32",    EOpPackUint2x32);
11015|    322|    symbolTable.relateToOperator("unpackUint2x32",  EOpUnpackUint2x32);
11016|       |
11017|    322|    symbolTable.relateToOperator("packInt2x16",     EOpPackInt2x16);
11018|    322|    symbolTable.relateToOperator("unpackInt2x16",   EOpUnpackInt2x16);
11019|    322|    symbolTable.relateToOperator("packUint2x16",    EOpPackUint2x16);
11020|    322|    symbolTable.relateToOperator("unpackUint2x16",  EOpUnpackUint2x16);
11021|       |
11022|    322|    symbolTable.relateToOperator("packInt4x16",     EOpPackInt4x16);
11023|    322|    symbolTable.relateToOperator("unpackInt4x16",   EOpUnpackInt4x16);
11024|    322|    symbolTable.relateToOperator("packUint4x16",    EOpPackUint4x16);
11025|    322|    symbolTable.relateToOperator("unpackUint4x16",  EOpUnpackUint4x16);
11026|    322|    symbolTable.relateToOperator("packFloat2x16",   EOpPackFloat2x16);
11027|    322|    symbolTable.relateToOperator("unpackFloat2x16", EOpUnpackFloat2x16);
11028|       |
11029|    322|    symbolTable.relateToOperator("pack16",          EOpPack16);
11030|    322|    symbolTable.relateToOperator("pack32",          EOpPack32);
11031|    322|    symbolTable.relateToOperator("pack64",          EOpPack64);
11032|       |
11033|    322|    symbolTable.relateToOperator("unpack32",        EOpUnpack32);
11034|    322|    symbolTable.relateToOperator("unpack16",        EOpUnpack16);
11035|    322|    symbolTable.relateToOperator("unpack8",         EOpUnpack8);
11036|       |
11037|    322|    symbolTable.relateToOperator("controlBarrier",             EOpBarrier);
11038|    322|    symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierAtomicCounter);
11039|    322|    symbolTable.relateToOperator("memoryBarrierImage",         EOpMemoryBarrierImage);
11040|       |
11041|    322|    if (spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (11041:9): [True: 0, False: 322]
  ------------------
11042|       |        //
11043|       |        // functions signature have been replaced to take uint operations on buffer variables
11044|       |        // remap atomic counter functions to atomic operations
11045|       |        //
11046|      0|        symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierBuffer);
11047|      0|    }
11048|       |
11049|    322|    symbolTable.relateToOperator("atomicLoad",     EOpAtomicLoad);
11050|    322|    symbolTable.relateToOperator("atomicStore",    EOpAtomicStore);
11051|       |
11052|    322|    symbolTable.relateToOperator("atomicCounterIncrement", EOpAtomicCounterIncrement);
11053|    322|    symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement);
11054|    322|    symbolTable.relateToOperator("atomicCounter",          EOpAtomicCounter);
11055|       |
11056|    322|    if (spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (11056:9): [True: 0, False: 322]
  ------------------
11057|       |        //
11058|       |        // functions signature have been replaced to take uint operations
11059|       |        // remap atomic counter functions to atomic operations
11060|       |        //
11061|       |        // these atomic counter functions do not match signatures of glsl
11062|       |        // atomic functions, so they will be remapped to semantically
11063|       |        // equivalent functions in the parser
11064|       |        //
11065|      0|        symbolTable.relateToOperator("atomicCounterIncrement", EOpNull);
11066|      0|        symbolTable.relateToOperator("atomicCounterDecrement", EOpNull);
11067|      0|        symbolTable.relateToOperator("atomicCounter", EOpNull);
11068|      0|    }
11069|       |
11070|    322|    symbolTable.relateToOperator("clockARB",     EOpReadClockSubgroupKHR);
11071|    322|    symbolTable.relateToOperator("clock2x32ARB", EOpReadClockSubgroupKHR);
11072|       |
11073|    322|    symbolTable.relateToOperator("clockRealtimeEXT",     EOpReadClockDeviceKHR);
11074|    322|    symbolTable.relateToOperator("clockRealtime2x32EXT", EOpReadClockDeviceKHR);
11075|       |
11076|    322|    if (profile != EEsProfile && version == 450) {
  ------------------
  |  Branch (11076:9): [True: 322, False: 0]
  |  Branch (11076:34): [True: 135, False: 187]
  ------------------
11077|    135|        symbolTable.relateToOperator("atomicCounterAddARB",      EOpAtomicCounterAdd);
11078|    135|        symbolTable.relateToOperator("atomicCounterSubtractARB", EOpAtomicCounterSubtract);
11079|    135|        symbolTable.relateToOperator("atomicCounterMinARB",      EOpAtomicCounterMin);
11080|    135|        symbolTable.relateToOperator("atomicCounterMaxARB",      EOpAtomicCounterMax);
11081|    135|        symbolTable.relateToOperator("atomicCounterAndARB",      EOpAtomicCounterAnd);
11082|    135|        symbolTable.relateToOperator("atomicCounterOrARB",       EOpAtomicCounterOr);
11083|    135|        symbolTable.relateToOperator("atomicCounterXorARB",      EOpAtomicCounterXor);
11084|    135|        symbolTable.relateToOperator("atomicCounterExchangeARB", EOpAtomicCounterExchange);
11085|    135|        symbolTable.relateToOperator("atomicCounterCompSwapARB", EOpAtomicCounterCompSwap);
11086|    135|    }
11087|       |
11088|    322|    if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11088:9): [True: 322, False: 0]
  |  Branch (11088:34): [True: 0, False: 322]
  ------------------
11089|      0|        symbolTable.relateToOperator("atomicCounterAdd",      EOpAtomicCounterAdd);
11090|      0|        symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicCounterSubtract);
11091|      0|        symbolTable.relateToOperator("atomicCounterMin",      EOpAtomicCounterMin);
11092|      0|        symbolTable.relateToOperator("atomicCounterMax",      EOpAtomicCounterMax);
11093|      0|        symbolTable.relateToOperator("atomicCounterAnd",      EOpAtomicCounterAnd);
11094|      0|        symbolTable.relateToOperator("atomicCounterOr",       EOpAtomicCounterOr);
11095|      0|        symbolTable.relateToOperator("atomicCounterXor",      EOpAtomicCounterXor);
11096|      0|        symbolTable.relateToOperator("atomicCounterExchange", EOpAtomicCounterExchange);
11097|      0|        symbolTable.relateToOperator("atomicCounterCompSwap", EOpAtomicCounterCompSwap);
11098|      0|    }
11099|       |
11100|    322|    if (spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (11100:9): [True: 0, False: 322]
  ------------------
11101|       |        //
11102|       |        // functions signature have been replaced to take 'uint' instead of 'atomic_uint'
11103|       |        // remap atomic counter functions to non-counter atomic ops so
11104|       |        // functions act as aliases to non-counter atomic ops
11105|       |        //
11106|      0|        symbolTable.relateToOperator("atomicCounterAdd", EOpAtomicAdd);
11107|      0|        symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicSubtract);
11108|      0|        symbolTable.relateToOperator("atomicCounterMin", EOpAtomicMin);
11109|      0|        symbolTable.relateToOperator("atomicCounterMax", EOpAtomicMax);
11110|      0|        symbolTable.relateToOperator("atomicCounterAnd", EOpAtomicAnd);
11111|      0|        symbolTable.relateToOperator("atomicCounterOr", EOpAtomicOr);
11112|      0|        symbolTable.relateToOperator("atomicCounterXor", EOpAtomicXor);
11113|      0|        symbolTable.relateToOperator("atomicCounterExchange", EOpAtomicExchange);
11114|      0|        symbolTable.relateToOperator("atomicCounterCompSwap", EOpAtomicCompSwap);
11115|      0|    }
11116|       |
11117|    322|    symbolTable.relateToOperator("fma",               EOpFma);
11118|    322|    symbolTable.relateToOperator("frexp",             EOpFrexp);
11119|    322|    symbolTable.relateToOperator("ldexp",             EOpLdexp);
11120|    322|    symbolTable.relateToOperator("uaddCarry",         EOpAddCarry);
11121|    322|    symbolTable.relateToOperator("usubBorrow",        EOpSubBorrow);
11122|    322|    symbolTable.relateToOperator("umulExtended",      EOpUMulExtended);
11123|    322|    symbolTable.relateToOperator("imulExtended",      EOpIMulExtended);
11124|    322|    symbolTable.relateToOperator("bitfieldExtract",   EOpBitfieldExtract);
11125|    322|    symbolTable.relateToOperator("bitfieldInsert",    EOpBitfieldInsert);
11126|    322|    symbolTable.relateToOperator("bitfieldReverse",   EOpBitFieldReverse);
11127|    322|    symbolTable.relateToOperator("bitCount",          EOpBitCount);
11128|    322|    symbolTable.relateToOperator("findLSB",           EOpFindLSB);
11129|    322|    symbolTable.relateToOperator("findMSB",           EOpFindMSB);
11130|       |
11131|    322|    symbolTable.relateToOperator("helperInvocationEXT",  EOpIsHelperInvocation);
11132|       |
11133|    322|    symbolTable.relateToOperator("countLeadingZeros",  EOpCountLeadingZeros);
11134|    322|    symbolTable.relateToOperator("countTrailingZeros", EOpCountTrailingZeros);
11135|    322|    symbolTable.relateToOperator("absoluteDifference", EOpAbsDifference);
11136|    322|    symbolTable.relateToOperator("addSaturate",        EOpAddSaturate);
11137|    322|    symbolTable.relateToOperator("subtractSaturate",   EOpSubSaturate);
11138|    322|    symbolTable.relateToOperator("average",            EOpAverage);
11139|    322|    symbolTable.relateToOperator("averageRounded",     EOpAverageRounded);
11140|    322|    symbolTable.relateToOperator("multiply32x16",      EOpMul32x16);
11141|    322|    symbolTable.relateToOperator("debugPrintfEXT",     EOpDebugPrintf);
11142|    322|    symbolTable.relateToOperator("assumeEXT",          EOpAssumeEXT);
11143|    322|    symbolTable.relateToOperator("expectEXT",          EOpExpectEXT);
11144|    322|    symbolTable.relateToOperator("abortEXT",           EOpAbortEXT);
11145|       |
11146|       |
11147|    322|    if (PureOperatorBuiltins) {
  ------------------
  |  Branch (11147:9): [True: 322, Folded]
  ------------------
11148|    322|        symbolTable.relateToOperator("imageSize",               EOpImageQuerySize);
11149|    322|        symbolTable.relateToOperator("imageSamples",            EOpImageQuerySamples);
11150|    322|        symbolTable.relateToOperator("imageLoad",               EOpImageLoad);
11151|    322|        symbolTable.relateToOperator("imageStore",              EOpImageStore);
11152|    322|        symbolTable.relateToOperator("imageAtomicAdd",          EOpImageAtomicAdd);
11153|    322|        symbolTable.relateToOperator("imageAtomicMin",          EOpImageAtomicMin);
11154|    322|        symbolTable.relateToOperator("imageAtomicMax",          EOpImageAtomicMax);
11155|    322|        symbolTable.relateToOperator("imageAtomicAnd",          EOpImageAtomicAnd);
11156|    322|        symbolTable.relateToOperator("imageAtomicOr",           EOpImageAtomicOr);
11157|    322|        symbolTable.relateToOperator("imageAtomicXor",          EOpImageAtomicXor);
11158|    322|        symbolTable.relateToOperator("imageAtomicExchange",     EOpImageAtomicExchange);
11159|    322|        symbolTable.relateToOperator("imageAtomicCompSwap",     EOpImageAtomicCompSwap);
11160|    322|        symbolTable.relateToOperator("imageAtomicLoad",         EOpImageAtomicLoad);
11161|    322|        symbolTable.relateToOperator("imageAtomicStore",        EOpImageAtomicStore);
11162|       |
11163|    322|        symbolTable.relateToOperator("subpassLoad",             EOpSubpassLoad);
11164|    322|        symbolTable.relateToOperator("subpassLoadMS",           EOpSubpassLoadMS);
11165|       |
11166|    322|        symbolTable.relateToOperator("textureGather",           EOpTextureGather);
11167|    322|        symbolTable.relateToOperator("textureGatherOffset",     EOpTextureGatherOffset);
11168|    322|        symbolTable.relateToOperator("textureGatherOffsets",    EOpTextureGatherOffsets);
11169|       |
11170|    322|        symbolTable.relateToOperator("noise1", EOpNoise);
11171|    322|        symbolTable.relateToOperator("noise2", EOpNoise);
11172|    322|        symbolTable.relateToOperator("noise3", EOpNoise);
11173|    322|        symbolTable.relateToOperator("noise4", EOpNoise);
11174|       |
11175|    322|        symbolTable.relateToOperator("textureFootprintNV",          EOpImageSampleFootprintNV);
11176|    322|        symbolTable.relateToOperator("textureFootprintClampNV",     EOpImageSampleFootprintClampNV);
11177|    322|        symbolTable.relateToOperator("textureFootprintLodNV",       EOpImageSampleFootprintLodNV);
11178|    322|        symbolTable.relateToOperator("textureFootprintGradNV",      EOpImageSampleFootprintGradNV);
11179|    322|        symbolTable.relateToOperator("textureFootprintGradClampNV", EOpImageSampleFootprintGradClampNV);
11180|       |
11181|    322|        if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion))
  ------------------
  |  Branch (11181:13): [True: 0, False: 322]
  |  Branch (11181:36): [True: 0, False: 0]
  ------------------
11182|      0|            symbolTable.relateToOperator("ftransform", EOpFtransform);
11183|       |
11184|    322|        if (spvVersion.spv == 0 && (IncludeLegacy(version, profile, spvVersion) ||
  ------------------
  |  Branch (11184:13): [True: 0, False: 322]
  |  Branch (11184:37): [True: 0, False: 0]
  ------------------
11185|      0|            (profile == EEsProfile && version == 100))) {
  ------------------
  |  Branch (11185:14): [True: 0, False: 0]
  |  Branch (11185:39): [True: 0, False: 0]
  ------------------
11186|       |
11187|      0|            symbolTable.relateToOperator("texture1D",                EOpTexture);
11188|      0|            symbolTable.relateToOperator("texture1DGradARB",         EOpTextureGrad);
11189|      0|            symbolTable.relateToOperator("texture1DProj",            EOpTextureProj);
11190|      0|            symbolTable.relateToOperator("texture1DProjGradARB",     EOpTextureProjGrad);
11191|      0|            symbolTable.relateToOperator("texture1DLod",             EOpTextureLod);
11192|      0|            symbolTable.relateToOperator("texture1DProjLod",         EOpTextureProjLod);
11193|       |
11194|      0|            symbolTable.relateToOperator("texture2DRect",            EOpTexture);
11195|      0|            symbolTable.relateToOperator("texture2DRectProj",        EOpTextureProj);
11196|      0|            symbolTable.relateToOperator("texture2DRectGradARB",     EOpTextureGrad);
11197|      0|            symbolTable.relateToOperator("texture2DRectProjGradARB", EOpTextureProjGrad);
11198|      0|            symbolTable.relateToOperator("shadow2DRect",             EOpTexture);
11199|      0|            symbolTable.relateToOperator("shadow2DRectProj",         EOpTextureProj);
11200|      0|            symbolTable.relateToOperator("shadow2DRectGradARB",      EOpTextureGrad);
11201|      0|            symbolTable.relateToOperator("shadow2DRectProjGradARB",  EOpTextureProjGrad);
11202|       |
11203|      0|            symbolTable.relateToOperator("texture2D",                EOpTexture);
11204|      0|            symbolTable.relateToOperator("texture2DProj",            EOpTextureProj);
11205|      0|            symbolTable.relateToOperator("texture2DGradEXT",         EOpTextureGrad);
11206|      0|            symbolTable.relateToOperator("texture2DGradARB",         EOpTextureGrad);
11207|      0|            symbolTable.relateToOperator("texture2DProjGradEXT",     EOpTextureProjGrad);
11208|      0|            symbolTable.relateToOperator("texture2DProjGradARB",     EOpTextureProjGrad);
11209|      0|            symbolTable.relateToOperator("texture2DLod",             EOpTextureLod);
11210|      0|            symbolTable.relateToOperator("texture2DLodEXT",          EOpTextureLod);
11211|      0|            symbolTable.relateToOperator("texture2DProjLod",         EOpTextureProjLod);
11212|      0|            symbolTable.relateToOperator("texture2DProjLodEXT",      EOpTextureProjLod);
11213|       |
11214|      0|            symbolTable.relateToOperator("texture3D",                EOpTexture);
11215|      0|            symbolTable.relateToOperator("texture3DGradARB",         EOpTextureGrad);
11216|      0|            symbolTable.relateToOperator("texture3DProj",            EOpTextureProj);
11217|      0|            symbolTable.relateToOperator("texture3DProjGradARB",     EOpTextureProjGrad);
11218|      0|            symbolTable.relateToOperator("texture3DLod",             EOpTextureLod);
11219|      0|            symbolTable.relateToOperator("texture3DProjLod",         EOpTextureProjLod);
11220|      0|            symbolTable.relateToOperator("textureCube",              EOpTexture);
11221|      0|            symbolTable.relateToOperator("textureCubeGradEXT",       EOpTextureGrad);
11222|      0|            symbolTable.relateToOperator("textureCubeGradARB",       EOpTextureGrad);
11223|      0|            symbolTable.relateToOperator("textureCubeLod",           EOpTextureLod);
11224|      0|            symbolTable.relateToOperator("textureCubeLodEXT",        EOpTextureLod);
11225|      0|            symbolTable.relateToOperator("shadow1D",                 EOpTexture);
11226|      0|            symbolTable.relateToOperator("shadow1DGradARB",          EOpTextureGrad);
11227|      0|            symbolTable.relateToOperator("shadow2D",                 EOpTexture);
11228|      0|            symbolTable.relateToOperator("shadow2DGradARB",          EOpTextureGrad);
11229|      0|            symbolTable.relateToOperator("shadow1DProj",             EOpTextureProj);
11230|      0|            symbolTable.relateToOperator("shadow2DProj",             EOpTextureProj);
11231|      0|            symbolTable.relateToOperator("shadow1DProjGradARB",      EOpTextureProjGrad);
11232|      0|            symbolTable.relateToOperator("shadow2DProjGradARB",      EOpTextureProjGrad);
11233|      0|            symbolTable.relateToOperator("shadow1DLod",              EOpTextureLod);
11234|      0|            symbolTable.relateToOperator("shadow2DLod",              EOpTextureLod);
11235|      0|            symbolTable.relateToOperator("shadow1DProjLod",          EOpTextureProjLod);
11236|      0|            symbolTable.relateToOperator("shadow2DProjLod",          EOpTextureProjLod);
11237|      0|        }
11238|       |
11239|    322|        if (profile != EEsProfile) {
  ------------------
  |  Branch (11239:13): [True: 322, False: 0]
  ------------------
11240|    322|            symbolTable.relateToOperator("sparseTextureARB",                EOpSparseTexture);
11241|    322|            symbolTable.relateToOperator("sparseTextureLodARB",             EOpSparseTextureLod);
11242|    322|            symbolTable.relateToOperator("sparseTextureOffsetARB",          EOpSparseTextureOffset);
11243|    322|            symbolTable.relateToOperator("sparseTexelFetchARB",             EOpSparseTextureFetch);
11244|    322|            symbolTable.relateToOperator("sparseTexelFetchOffsetARB",       EOpSparseTextureFetchOffset);
11245|    322|            symbolTable.relateToOperator("sparseTextureLodOffsetARB",       EOpSparseTextureLodOffset);
11246|    322|            symbolTable.relateToOperator("sparseTextureGradARB",            EOpSparseTextureGrad);
11247|    322|            symbolTable.relateToOperator("sparseTextureGradOffsetARB",      EOpSparseTextureGradOffset);
11248|    322|            symbolTable.relateToOperator("sparseTextureGatherARB",          EOpSparseTextureGather);
11249|    322|            symbolTable.relateToOperator("sparseTextureGatherOffsetARB",    EOpSparseTextureGatherOffset);
11250|    322|            symbolTable.relateToOperator("sparseTextureGatherOffsetsARB",   EOpSparseTextureGatherOffsets);
11251|    322|            symbolTable.relateToOperator("sparseImageLoadARB",              EOpSparseImageLoad);
11252|    322|            symbolTable.relateToOperator("sparseTexelsResidentARB",         EOpSparseTexelsResident);
11253|       |
11254|    322|            symbolTable.relateToOperator("sparseTextureClampARB",           EOpSparseTextureClamp);
11255|    322|            symbolTable.relateToOperator("sparseTextureOffsetClampARB",     EOpSparseTextureOffsetClamp);
11256|    322|            symbolTable.relateToOperator("sparseTextureGradClampARB",       EOpSparseTextureGradClamp);
11257|    322|            symbolTable.relateToOperator("sparseTextureGradOffsetClampARB", EOpSparseTextureGradOffsetClamp);
11258|    322|            symbolTable.relateToOperator("textureClampARB",                 EOpTextureClamp);
11259|    322|            symbolTable.relateToOperator("textureOffsetClampARB",           EOpTextureOffsetClamp);
11260|    322|            symbolTable.relateToOperator("textureGradClampARB",             EOpTextureGradClamp);
11261|    322|            symbolTable.relateToOperator("textureGradOffsetClampARB",       EOpTextureGradOffsetClamp);
11262|       |
11263|    322|            symbolTable.relateToOperator("ballotARB",                       EOpBallot);
11264|    322|            symbolTable.relateToOperator("readInvocationARB",               EOpReadInvocation);
11265|    322|            symbolTable.relateToOperator("readFirstInvocationARB",          EOpReadFirstInvocation);
11266|       |
11267|    322|            if (version >= 430) {
  ------------------
  |  Branch (11267:17): [True: 135, False: 187]
  ------------------
11268|    135|                symbolTable.relateToOperator("anyInvocationARB",            EOpAnyInvocation);
11269|    135|                symbolTable.relateToOperator("allInvocationsARB",           EOpAllInvocations);
11270|    135|                symbolTable.relateToOperator("allInvocationsEqualARB",      EOpAllInvocationsEqual);
11271|    135|            }
11272|    322|            if (version >= 460) {
  ------------------
  |  Branch (11272:17): [True: 0, False: 322]
  ------------------
11273|      0|                symbolTable.relateToOperator("anyInvocation",               EOpAnyInvocation);
11274|      0|                symbolTable.relateToOperator("allInvocations",              EOpAllInvocations);
11275|      0|                symbolTable.relateToOperator("allInvocationsEqual",         EOpAllInvocationsEqual);
11276|      0|            }
11277|       |            // As per dependency between NV_gpu_shader5 and ARB_shader_group_vote
11278|       |            // anyInvocationARB = anyThreadNV
11279|       |            // allInvocationsARB = allThreadsNV
11280|       |            // allInvocationsEqualARB = allThreadsEqualNV
11281|       |            // Thus we reuse the Op's
11282|    322|            if (version >= 150) {
  ------------------
  |  Branch (11282:17): [True: 150, False: 172]
  ------------------
11283|    150|                symbolTable.relateToOperator("anyThreadNV",            EOpAnyInvocation);
11284|    150|                symbolTable.relateToOperator("allThreadsNV",           EOpAllInvocations);
11285|    150|                symbolTable.relateToOperator("allThreadsEqualNV",      EOpAllInvocationsEqual);
11286|    150|            }
11287|    322|            symbolTable.relateToOperator("minInvocationsAMD",                           EOpMinInvocations);
11288|    322|            symbolTable.relateToOperator("maxInvocationsAMD",                           EOpMaxInvocations);
11289|    322|            symbolTable.relateToOperator("addInvocationsAMD",                           EOpAddInvocations);
11290|    322|            symbolTable.relateToOperator("minInvocationsNonUniformAMD",                 EOpMinInvocationsNonUniform);
11291|    322|            symbolTable.relateToOperator("maxInvocationsNonUniformAMD",                 EOpMaxInvocationsNonUniform);
11292|    322|            symbolTable.relateToOperator("addInvocationsNonUniformAMD",                 EOpAddInvocationsNonUniform);
11293|    322|            symbolTable.relateToOperator("minInvocationsInclusiveScanAMD",              EOpMinInvocationsInclusiveScan);
11294|    322|            symbolTable.relateToOperator("maxInvocationsInclusiveScanAMD",              EOpMaxInvocationsInclusiveScan);
11295|    322|            symbolTable.relateToOperator("addInvocationsInclusiveScanAMD",              EOpAddInvocationsInclusiveScan);
11296|    322|            symbolTable.relateToOperator("minInvocationsInclusiveScanNonUniformAMD",    EOpMinInvocationsInclusiveScanNonUniform);
11297|    322|            symbolTable.relateToOperator("maxInvocationsInclusiveScanNonUniformAMD",    EOpMaxInvocationsInclusiveScanNonUniform);
11298|    322|            symbolTable.relateToOperator("addInvocationsInclusiveScanNonUniformAMD",    EOpAddInvocationsInclusiveScanNonUniform);
11299|    322|            symbolTable.relateToOperator("minInvocationsExclusiveScanAMD",              EOpMinInvocationsExclusiveScan);
11300|    322|            symbolTable.relateToOperator("maxInvocationsExclusiveScanAMD",              EOpMaxInvocationsExclusiveScan);
11301|    322|            symbolTable.relateToOperator("addInvocationsExclusiveScanAMD",              EOpAddInvocationsExclusiveScan);
11302|    322|            symbolTable.relateToOperator("minInvocationsExclusiveScanNonUniformAMD",    EOpMinInvocationsExclusiveScanNonUniform);
11303|    322|            symbolTable.relateToOperator("maxInvocationsExclusiveScanNonUniformAMD",    EOpMaxInvocationsExclusiveScanNonUniform);
11304|    322|            symbolTable.relateToOperator("addInvocationsExclusiveScanNonUniformAMD",    EOpAddInvocationsExclusiveScanNonUniform);
11305|    322|            symbolTable.relateToOperator("swizzleInvocationsAMD",                       EOpSwizzleInvocations);
11306|    322|            symbolTable.relateToOperator("swizzleInvocationsMaskedAMD",                 EOpSwizzleInvocationsMasked);
11307|    322|            symbolTable.relateToOperator("writeInvocationAMD",                          EOpWriteInvocation);
11308|    322|            symbolTable.relateToOperator("mbcntAMD",                                    EOpMbcnt);
11309|       |
11310|    322|            symbolTable.relateToOperator("min3",    EOpMin3);
11311|    322|            symbolTable.relateToOperator("max3",    EOpMax3);
11312|    322|            symbolTable.relateToOperator("mid3",    EOpMid3);
11313|       |
11314|    322|            symbolTable.relateToOperator("cubeFaceIndexAMD",    EOpCubeFaceIndex);
11315|    322|            symbolTable.relateToOperator("cubeFaceCoordAMD",    EOpCubeFaceCoord);
11316|    322|            symbolTable.relateToOperator("timeAMD",             EOpTime);
11317|       |
11318|    322|            symbolTable.relateToOperator("textureGatherLodAMD",                 EOpTextureGatherLod);
11319|    322|            symbolTable.relateToOperator("textureGatherLodOffsetAMD",           EOpTextureGatherLodOffset);
11320|    322|            symbolTable.relateToOperator("textureGatherLodOffsetsAMD",          EOpTextureGatherLodOffsets);
11321|    322|            symbolTable.relateToOperator("sparseTextureGatherLodAMD",           EOpSparseTextureGatherLod);
11322|    322|            symbolTable.relateToOperator("sparseTextureGatherLodOffsetAMD",     EOpSparseTextureGatherLodOffset);
11323|    322|            symbolTable.relateToOperator("sparseTextureGatherLodOffsetsAMD",    EOpSparseTextureGatherLodOffsets);
11324|       |
11325|    322|            symbolTable.relateToOperator("imageLoadLodAMD",                     EOpImageLoadLod);
11326|    322|            symbolTable.relateToOperator("imageStoreLodAMD",                    EOpImageStoreLod);
11327|    322|            symbolTable.relateToOperator("sparseImageLoadLodAMD",               EOpSparseImageLoadLod);
11328|       |
11329|    322|            symbolTable.relateToOperator("fragmentMaskFetchAMD",                EOpFragmentMaskFetch);
11330|    322|            symbolTable.relateToOperator("fragmentFetchAMD",                    EOpFragmentFetch);
11331|    322|        }
11332|       |
11333|       |        // GL_EXT_integer_dot_product
11334|    322|        if ((profile == EEsProfile && version >= 300) ||
  ------------------
  |  Branch (11334:14): [True: 0, False: 322]
  |  Branch (11334:39): [True: 0, False: 0]
  ------------------
11335|    322|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (11335:14): [True: 322, False: 0]
  |  Branch (11335:39): [True: 135, False: 187]
  ------------------
11336|    135|            symbolTable.relateToOperator("dotEXT", EOpDot);
11337|    135|            symbolTable.relateToOperator("dotPacked4x8EXT", EOpDotPackedEXT);
11338|    135|            symbolTable.relateToOperator("dotAccSatEXT", EOpDotAccSatEXT);
11339|    135|            symbolTable.relateToOperator("dotPacked4x8AccSatEXT", EOpDotPackedAccSatEXT);
11340|    135|        }
11341|       |
11342|       |        // GL_EXT_bfloat16
11343|    322|        if ((profile == EEsProfile && version >= 320) ||
  ------------------
  |  Branch (11343:14): [True: 0, False: 322]
  |  Branch (11343:39): [True: 0, False: 0]
  ------------------
11344|    322|            (profile != EEsProfile && version >= 450)) {
  ------------------
  |  Branch (11344:14): [True: 322, False: 0]
  |  Branch (11344:39): [True: 135, False: 187]
  ------------------
11345|    135|            symbolTable.relateToOperator("bfloat16BitsToIntEXT",  EOpFloatBitsToInt);
11346|    135|            symbolTable.relateToOperator("bfloat16BitsToUintEXT", EOpFloatBitsToUint);
11347|    135|            symbolTable.relateToOperator("intBitsToBFloat16EXT",  EOpIntBitsToFloat);
11348|    135|            symbolTable.relateToOperator("uintBitsToBFloat16EXT", EOpUintBitsToFloat);
11349|       |
11350|    135|            symbolTable.relateToOperator("floate5m2BitsToIntEXT",  EOpFloatBitsToInt);
11351|    135|            symbolTable.relateToOperator("floate5m2BitsToUintEXT", EOpFloatBitsToUint);
11352|    135|            symbolTable.relateToOperator("intBitsToFloate5m2EXT",  EOpIntBitsToFloat);
11353|    135|            symbolTable.relateToOperator("uintBitsToFloate5m2EXT", EOpUintBitsToFloat);
11354|       |
11355|    135|            symbolTable.relateToOperator("floate4m3BitsToIntEXT",  EOpFloatBitsToInt);
11356|    135|            symbolTable.relateToOperator("floate4m3BitsToUintEXT", EOpFloatBitsToUint);
11357|    135|            symbolTable.relateToOperator("intBitsToFloate4m3EXT",  EOpIntBitsToFloat);
11358|    135|            symbolTable.relateToOperator("uintBitsToFloate4m3EXT", EOpUintBitsToFloat);
11359|       |
11360|    135|            symbolTable.relateToOperator("saturatedConvertEXT", EOpConstructSaturated);
11361|    135|        }
11362|       |
11363|       |        // GL_KHR_shader_subgroup
11364|    322|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (11364:14): [True: 0, False: 322]
  |  Branch (11364:39): [True: 0, False: 0]
  ------------------
11365|    322|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (11365:14): [True: 322, False: 0]
  |  Branch (11365:39): [True: 322, False: 0]
  ------------------
11366|    322|            symbolTable.relateToOperator("subgroupBarrier",                 EOpSubgroupBarrier);
11367|    322|            symbolTable.relateToOperator("subgroupMemoryBarrier",           EOpSubgroupMemoryBarrier);
11368|    322|            symbolTable.relateToOperator("subgroupMemoryBarrierBuffer",     EOpSubgroupMemoryBarrierBuffer);
11369|    322|            symbolTable.relateToOperator("subgroupMemoryBarrierImage",      EOpSubgroupMemoryBarrierImage);
11370|    322|            symbolTable.relateToOperator("subgroupElect",                   EOpSubgroupElect);
11371|    322|            symbolTable.relateToOperator("subgroupAll",                     EOpSubgroupAll);
11372|    322|            symbolTable.relateToOperator("subgroupAny",                     EOpSubgroupAny);
11373|    322|            symbolTable.relateToOperator("subgroupAllEqual",                EOpSubgroupAllEqual);
11374|    322|            symbolTable.relateToOperator("subgroupBroadcast",               EOpSubgroupBroadcast);
11375|    322|            symbolTable.relateToOperator("subgroupBroadcastFirst",          EOpSubgroupBroadcastFirst);
11376|    322|            symbolTable.relateToOperator("subgroupBallot",                  EOpSubgroupBallot);
11377|    322|            symbolTable.relateToOperator("subgroupInverseBallot",           EOpSubgroupInverseBallot);
11378|    322|            symbolTable.relateToOperator("subgroupBallotBitExtract",        EOpSubgroupBallotBitExtract);
11379|    322|            symbolTable.relateToOperator("subgroupBallotBitCount",          EOpSubgroupBallotBitCount);
11380|    322|            symbolTable.relateToOperator("subgroupBallotInclusiveBitCount", EOpSubgroupBallotInclusiveBitCount);
11381|    322|            symbolTable.relateToOperator("subgroupBallotExclusiveBitCount", EOpSubgroupBallotExclusiveBitCount);
11382|    322|            symbolTable.relateToOperator("subgroupBallotFindLSB",           EOpSubgroupBallotFindLSB);
11383|    322|            symbolTable.relateToOperator("subgroupBallotFindMSB",           EOpSubgroupBallotFindMSB);
11384|    322|            symbolTable.relateToOperator("subgroupShuffle",                 EOpSubgroupShuffle);
11385|    322|            symbolTable.relateToOperator("subgroupShuffleXor",              EOpSubgroupShuffleXor);
11386|    322|            symbolTable.relateToOperator("subgroupShuffleUp",               EOpSubgroupShuffleUp);
11387|    322|            symbolTable.relateToOperator("subgroupShuffleDown",             EOpSubgroupShuffleDown);
11388|    322|            symbolTable.relateToOperator("subgroupRotate",                  EOpSubgroupRotate);
11389|    322|            symbolTable.relateToOperator("subgroupClusteredRotate",         EOpSubgroupClusteredRotate);
11390|    322|            symbolTable.relateToOperator("subgroupAdd",                     EOpSubgroupAdd);
11391|    322|            symbolTable.relateToOperator("subgroupMul",                     EOpSubgroupMul);
11392|    322|            symbolTable.relateToOperator("subgroupMin",                     EOpSubgroupMin);
11393|    322|            symbolTable.relateToOperator("subgroupMax",                     EOpSubgroupMax);
11394|    322|            symbolTable.relateToOperator("subgroupAnd",                     EOpSubgroupAnd);
11395|    322|            symbolTable.relateToOperator("subgroupOr",                      EOpSubgroupOr);
11396|    322|            symbolTable.relateToOperator("subgroupXor",                     EOpSubgroupXor);
11397|    322|            symbolTable.relateToOperator("subgroupInclusiveAdd",            EOpSubgroupInclusiveAdd);
11398|    322|            symbolTable.relateToOperator("subgroupInclusiveMul",            EOpSubgroupInclusiveMul);
11399|    322|            symbolTable.relateToOperator("subgroupInclusiveMin",            EOpSubgroupInclusiveMin);
11400|    322|            symbolTable.relateToOperator("subgroupInclusiveMax",            EOpSubgroupInclusiveMax);
11401|    322|            symbolTable.relateToOperator("subgroupInclusiveAnd",            EOpSubgroupInclusiveAnd);
11402|    322|            symbolTable.relateToOperator("subgroupInclusiveOr",             EOpSubgroupInclusiveOr);
11403|    322|            symbolTable.relateToOperator("subgroupInclusiveXor",            EOpSubgroupInclusiveXor);
11404|    322|            symbolTable.relateToOperator("subgroupExclusiveAdd",            EOpSubgroupExclusiveAdd);
11405|    322|            symbolTable.relateToOperator("subgroupExclusiveMul",            EOpSubgroupExclusiveMul);
11406|    322|            symbolTable.relateToOperator("subgroupExclusiveMin",            EOpSubgroupExclusiveMin);
11407|    322|            symbolTable.relateToOperator("subgroupExclusiveMax",            EOpSubgroupExclusiveMax);
11408|    322|            symbolTable.relateToOperator("subgroupExclusiveAnd",            EOpSubgroupExclusiveAnd);
11409|    322|            symbolTable.relateToOperator("subgroupExclusiveOr",             EOpSubgroupExclusiveOr);
11410|    322|            symbolTable.relateToOperator("subgroupExclusiveXor",            EOpSubgroupExclusiveXor);
11411|    322|            symbolTable.relateToOperator("subgroupClusteredAdd",            EOpSubgroupClusteredAdd);
11412|    322|            symbolTable.relateToOperator("subgroupClusteredMul",            EOpSubgroupClusteredMul);
11413|    322|            symbolTable.relateToOperator("subgroupClusteredMin",            EOpSubgroupClusteredMin);
11414|    322|            symbolTable.relateToOperator("subgroupClusteredMax",            EOpSubgroupClusteredMax);
11415|    322|            symbolTable.relateToOperator("subgroupClusteredAnd",            EOpSubgroupClusteredAnd);
11416|    322|            symbolTable.relateToOperator("subgroupClusteredOr",             EOpSubgroupClusteredOr);
11417|    322|            symbolTable.relateToOperator("subgroupClusteredXor",            EOpSubgroupClusteredXor);
11418|    322|            symbolTable.relateToOperator("subgroupQuadBroadcast",           EOpSubgroupQuadBroadcast);
11419|    322|            symbolTable.relateToOperator("subgroupQuadSwapHorizontal",      EOpSubgroupQuadSwapHorizontal);
11420|    322|            symbolTable.relateToOperator("subgroupQuadSwapVertical",        EOpSubgroupQuadSwapVertical);
11421|    322|            symbolTable.relateToOperator("subgroupQuadSwapDiagonal",        EOpSubgroupQuadSwapDiagonal);
11422|       |
11423|    322|            symbolTable.relateToOperator("subgroupPartitionNV",                          EOpSubgroupPartition);
11424|    322|            symbolTable.relateToOperator("subgroupPartitionedAddNV",                     EOpSubgroupPartitionedAdd);
11425|    322|            symbolTable.relateToOperator("subgroupPartitionedMulNV",                     EOpSubgroupPartitionedMul);
11426|    322|            symbolTable.relateToOperator("subgroupPartitionedMinNV",                     EOpSubgroupPartitionedMin);
11427|    322|            symbolTable.relateToOperator("subgroupPartitionedMaxNV",                     EOpSubgroupPartitionedMax);
11428|    322|            symbolTable.relateToOperator("subgroupPartitionedAndNV",                     EOpSubgroupPartitionedAnd);
11429|    322|            symbolTable.relateToOperator("subgroupPartitionedOrNV",                      EOpSubgroupPartitionedOr);
11430|    322|            symbolTable.relateToOperator("subgroupPartitionedXorNV",                     EOpSubgroupPartitionedXor);
11431|    322|            symbolTable.relateToOperator("subgroupPartitionedInclusiveAddNV",            EOpSubgroupPartitionedInclusiveAdd);
11432|    322|            symbolTable.relateToOperator("subgroupPartitionedInclusiveMulNV",            EOpSubgroupPartitionedInclusiveMul);
11433|    322|            symbolTable.relateToOperator("subgroupPartitionedInclusiveMinNV",            EOpSubgroupPartitionedInclusiveMin);
11434|    322|            symbolTable.relateToOperator("subgroupPartitionedInclusiveMaxNV",            EOpSubgroupPartitionedInclusiveMax);
11435|    322|            symbolTable.relateToOperator("subgroupPartitionedInclusiveAndNV",            EOpSubgroupPartitionedInclusiveAnd);
11436|    322|            symbolTable.relateToOperator("subgroupPartitionedInclusiveOrNV",             EOpSubgroupPartitionedInclusiveOr);
11437|    322|            symbolTable.relateToOperator("subgroupPartitionedInclusiveXorNV",            EOpSubgroupPartitionedInclusiveXor);
11438|    322|            symbolTable.relateToOperator("subgroupPartitionedExclusiveAddNV",            EOpSubgroupPartitionedExclusiveAdd);
11439|    322|            symbolTable.relateToOperator("subgroupPartitionedExclusiveMulNV",            EOpSubgroupPartitionedExclusiveMul);
11440|    322|            symbolTable.relateToOperator("subgroupPartitionedExclusiveMinNV",            EOpSubgroupPartitionedExclusiveMin);
11441|    322|            symbolTable.relateToOperator("subgroupPartitionedExclusiveMaxNV",            EOpSubgroupPartitionedExclusiveMax);
11442|    322|            symbolTable.relateToOperator("subgroupPartitionedExclusiveAndNV",            EOpSubgroupPartitionedExclusiveAnd);
11443|    322|            symbolTable.relateToOperator("subgroupPartitionedExclusiveOrNV",             EOpSubgroupPartitionedExclusiveOr);
11444|    322|            symbolTable.relateToOperator("subgroupPartitionedExclusiveXorNV",            EOpSubgroupPartitionedExclusiveXor);
11445|    322|        }
11446|       |
11447|    322|        if (profile == EEsProfile) {
  ------------------
  |  Branch (11447:13): [True: 0, False: 322]
  ------------------
11448|      0|            symbolTable.relateToOperator("shadow2DEXT",              EOpTexture);
11449|      0|            symbolTable.relateToOperator("shadow2DProjEXT",          EOpTextureProj);
11450|      0|        }
11451|       |
11452|       |        // GL_EXT_shader_quad_control
11453|    322|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (11453:14): [True: 0, False: 322]
  |  Branch (11453:39): [True: 0, False: 0]
  ------------------
11454|    322|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (11454:14): [True: 322, False: 0]
  |  Branch (11454:39): [True: 322, False: 0]
  ------------------
11455|    322|            symbolTable.relateToOperator("subgroupQuadAll",                     EOpSubgroupQuadAll);
11456|    322|            symbolTable.relateToOperator("subgroupQuadAny",                     EOpSubgroupQuadAny);
11457|    322|        }
11458|       |
11459|    322|        if ((profile == EEsProfile && version >= 310) ||
  ------------------
  |  Branch (11459:14): [True: 0, False: 322]
  |  Branch (11459:39): [True: 0, False: 0]
  ------------------
11460|    322|            (profile != EEsProfile && version >= 140)) {
  ------------------
  |  Branch (11460:14): [True: 322, False: 0]
  |  Branch (11460:39): [True: 322, False: 0]
  ------------------
11461|    322|            symbolTable.relateToOperator("textureWeightedQCOM",      EOpImageSampleWeightedQCOM);
11462|    322|            symbolTable.relateToOperator("textureBoxFilterQCOM",     EOpImageBoxFilterQCOM);
11463|    322|            symbolTable.relateToOperator("textureBlockMatchSADQCOM", EOpImageBlockMatchSADQCOM);
11464|    322|            symbolTable.relateToOperator("textureBlockMatchSSDQCOM", EOpImageBlockMatchSSDQCOM);
11465|       |
11466|    322|            symbolTable.relateToOperator("textureBlockMatchWindowSSDQCOM", EOpImageBlockMatchWindowSSDQCOM);
11467|    322|            symbolTable.relateToOperator("textureBlockMatchWindowSADQCOM", EOpImageBlockMatchWindowSADQCOM);
11468|    322|            symbolTable.relateToOperator("textureBlockMatchGatherSSDQCOM", EOpImageBlockMatchGatherSSDQCOM);
11469|    322|            symbolTable.relateToOperator("textureBlockMatchGatherSADQCOM", EOpImageBlockMatchGatherSADQCOM);
11470|    322|        }
11471|       |
11472|    322|        if (profile != EEsProfile && spvVersion.spv == 0) {
  ------------------
  |  Branch (11472:13): [True: 322, False: 0]
  |  Branch (11472:38): [True: 0, False: 322]
  ------------------
11473|      0|            symbolTable.relateToOperator("texture1DArray", EOpTexture);
11474|      0|            symbolTable.relateToOperator("texture2DArray", EOpTexture);
11475|      0|            symbolTable.relateToOperator("shadow1DArray", EOpTexture);
11476|      0|            symbolTable.relateToOperator("shadow2DArray", EOpTexture);
11477|       |
11478|      0|            symbolTable.relateToOperator("texture1DArrayLod", EOpTextureLod);
11479|      0|            symbolTable.relateToOperator("texture2DArrayLod", EOpTextureLod);
11480|      0|            symbolTable.relateToOperator("shadow1DArrayLod", EOpTextureLod);
11481|      0|        }
11482|       |
11483|    322|        symbolTable.relateToOperator("coopVecMatMulNV",              EOpCooperativeVectorMatMulNV);
11484|    322|        symbolTable.relateToOperator("coopVecMatMulAddNV",           EOpCooperativeVectorMatMulAddNV);
11485|    322|        symbolTable.relateToOperator("coopVecLoadNV",                EOpCooperativeVectorLoadNV);
11486|    322|        symbolTable.relateToOperator("coopVecStoreNV",               EOpCooperativeVectorStoreNV);
11487|    322|        symbolTable.relateToOperator("coopVecOuterProductAccumulateNV", EOpCooperativeVectorOuterProductAccumulateNV);
11488|    322|        symbolTable.relateToOperator("coopVecReduceSumAccumulateNV",    EOpCooperativeVectorReduceSumAccumulateNV);
11489|    322|    }
11490|       |
11491|    322|    switch(language) {
11492|     99|    case EShLangVertex:
  ------------------
  |  Branch (11492:5): [True: 99, False: 223]
  ------------------
11493|     99|        break;
11494|       |
11495|     13|    case EShLangTessControl:
  ------------------
  |  Branch (11495:5): [True: 13, False: 309]
  ------------------
11496|     26|    case EShLangTessEvaluation:
  ------------------
  |  Branch (11496:5): [True: 13, False: 309]
  ------------------
11497|     26|        break;
11498|       |
11499|     13|    case EShLangGeometry:
  ------------------
  |  Branch (11499:5): [True: 13, False: 309]
  ------------------
11500|     13|        symbolTable.relateToOperator("EmitStreamVertex",   EOpEmitStreamVertex);
11501|     13|        symbolTable.relateToOperator("EndStreamPrimitive", EOpEndStreamPrimitive);
11502|     13|        symbolTable.relateToOperator("EmitVertex",         EOpEmitVertex);
11503|     13|        symbolTable.relateToOperator("EndPrimitive",       EOpEndPrimitive);
11504|     13|        break;
11505|       |
11506|     99|    case EShLangFragment:
  ------------------
  |  Branch (11506:5): [True: 99, False: 223]
  ------------------
11507|     99|        if (profile != EEsProfile && version >= 400) {
  ------------------
  |  Branch (11507:13): [True: 99, False: 0]
  |  Branch (11507:38): [True: 12, False: 87]
  ------------------
11508|     12|            symbolTable.relateToOperator("dFdxFine",     EOpDPdxFine);
11509|     12|            symbolTable.relateToOperator("dFdyFine",     EOpDPdyFine);
11510|     12|            symbolTable.relateToOperator("fwidthFine",   EOpFwidthFine);
11511|     12|            symbolTable.relateToOperator("dFdxCoarse",   EOpDPdxCoarse);
11512|     12|            symbolTable.relateToOperator("dFdyCoarse",   EOpDPdyCoarse);
11513|     12|            symbolTable.relateToOperator("fwidthCoarse", EOpFwidthCoarse);
11514|     12|        }
11515|       |
11516|     99|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11516:13): [True: 99, False: 0]
  |  Branch (11516:38): [True: 0, False: 99]
  ------------------
11517|      0|            symbolTable.relateToOperator("rayQueryInitializeEXT",                                             EOpRayQueryInitialize);
11518|      0|            symbolTable.relateToOperator("rayQueryTerminateEXT",                                              EOpRayQueryTerminate);
11519|      0|            symbolTable.relateToOperator("rayQueryGenerateIntersectionEXT",                                   EOpRayQueryGenerateIntersection);
11520|      0|            symbolTable.relateToOperator("rayQueryConfirmIntersectionEXT",                                    EOpRayQueryConfirmIntersection);
11521|      0|            symbolTable.relateToOperator("rayQueryProceedEXT",                                                EOpRayQueryProceed);
11522|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionTypeEXT",                                    EOpRayQueryGetIntersectionType);
11523|      0|            symbolTable.relateToOperator("rayQueryGetRayTMinEXT",                                             EOpRayQueryGetRayTMin);
11524|      0|            symbolTable.relateToOperator("rayQueryGetRayFlagsEXT",                                            EOpRayQueryGetRayFlags);
11525|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionTEXT",                                       EOpRayQueryGetIntersectionT);
11526|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionInstanceCustomIndexEXT",                     EOpRayQueryGetIntersectionInstanceCustomIndex);
11527|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionInstanceIdEXT",                              EOpRayQueryGetIntersectionInstanceId);
11528|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT",  EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset);
11529|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionGeometryIndexEXT",                           EOpRayQueryGetIntersectionGeometryIndex);
11530|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionPrimitiveIndexEXT",                          EOpRayQueryGetIntersectionPrimitiveIndex);
11531|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionBarycentricsEXT",                            EOpRayQueryGetIntersectionBarycentrics);
11532|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionFrontFaceEXT",                               EOpRayQueryGetIntersectionFrontFace);
11533|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionCandidateAABBOpaqueEXT",                     EOpRayQueryGetIntersectionCandidateAABBOpaque);
11534|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionObjectRayDirectionEXT",                      EOpRayQueryGetIntersectionObjectRayDirection);
11535|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionObjectRayOriginEXT",                         EOpRayQueryGetIntersectionObjectRayOrigin);
11536|      0|            symbolTable.relateToOperator("rayQueryGetWorldRayDirectionEXT",                                   EOpRayQueryGetWorldRayDirection);
11537|      0|            symbolTable.relateToOperator("rayQueryGetWorldRayOriginEXT",                                      EOpRayQueryGetWorldRayOrigin);
11538|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionObjectToWorldEXT",                           EOpRayQueryGetIntersectionObjectToWorld);
11539|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionWorldToObjectEXT",                           EOpRayQueryGetIntersectionWorldToObject);
11540|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionTriangleVertexPositionsEXT",                 EOpRayQueryGetIntersectionTriangleVertexPositionsEXT);
11541|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionClusterIdNV",                                EOpRayQueryGetIntersectionClusterIdNV);
11542|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionSpherePositionNV",                           EOpRayQueryGetIntersectionSpherePositionNV);
11543|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionSphereRadiusNV",                             EOpRayQueryGetIntersectionSphereRadiusNV);
11544|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionLSSHitValueNV",                              EOpRayQueryGetIntersectionLSSHitValueNV);
11545|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionLSSPositionsNV",                             EOpRayQueryGetIntersectionLSSPositionsNV);
11546|      0|            symbolTable.relateToOperator("rayQueryGetIntersectionLSSRadiiNV",                                 EOpRayQueryGetIntersectionLSSRadiiNV);
11547|      0|            symbolTable.relateToOperator("rayQueryIsSphereHitNV",                                             EOpRayQueryIsSphereHitNV);
11548|      0|            symbolTable.relateToOperator("rayQueryIsLSSHitNV",                                                EOpRayQueryIsLSSHitNV);
11549|      0|        }
11550|       |
11551|     99|        symbolTable.relateToOperator("interpolateAtCentroid", EOpInterpolateAtCentroid);
11552|     99|        symbolTable.relateToOperator("interpolateAtSample",   EOpInterpolateAtSample);
11553|     99|        symbolTable.relateToOperator("interpolateAtOffset",   EOpInterpolateAtOffset);
11554|       |
11555|     99|        if (profile != EEsProfile)
  ------------------
  |  Branch (11555:13): [True: 99, False: 0]
  ------------------
11556|     99|            symbolTable.relateToOperator("interpolateAtVertexAMD", EOpInterpolateAtVertex);
11557|       |
11558|     99|        symbolTable.relateToOperator("beginInvocationInterlockARB", EOpBeginInvocationInterlock);
11559|     99|        symbolTable.relateToOperator("endInvocationInterlockARB",   EOpEndInvocationInterlock);
11560|       |
11561|     99|        symbolTable.relateToOperator("stencilAttachmentReadEXT", EOpStencilAttachmentReadEXT);
11562|     99|        symbolTable.relateToOperator("depthAttachmentReadEXT",   EOpDepthAttachmentReadEXT);
11563|     99|        symbolTable.relateToOperator("colorAttachmentReadEXT",   EOpColorAttachmentReadEXT);
11564|       |
11565|     99|        break;
11566|       |
11567|     10|    case EShLangCompute:
  ------------------
  |  Branch (11567:5): [True: 10, False: 312]
  ------------------
11568|     10|        symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
11569|     10|        if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (11569:14): [True: 10, False: 0]
  |  Branch (11569:39): [True: 10, False: 0]
  ------------------
11570|     10|            (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (11570:14): [True: 0, False: 0]
  |  Branch (11570:39): [True: 0, False: 0]
  ------------------
11571|     10|            symbolTable.relateToOperator("dFdx",        EOpDPdx);
11572|     10|            symbolTable.relateToOperator("dFdy",        EOpDPdy);
11573|     10|            symbolTable.relateToOperator("fwidth",      EOpFwidth);
11574|     10|            symbolTable.relateToOperator("dFdxFine",    EOpDPdxFine);
11575|     10|            symbolTable.relateToOperator("dFdyFine",    EOpDPdyFine);
11576|     10|            symbolTable.relateToOperator("fwidthFine",  EOpFwidthFine);
11577|     10|            symbolTable.relateToOperator("dFdxCoarse",  EOpDPdxCoarse);
11578|     10|            symbolTable.relateToOperator("dFdyCoarse",  EOpDPdyCoarse);
11579|     10|            symbolTable.relateToOperator("fwidthCoarse",EOpFwidthCoarse);
11580|     10|        }
11581|     10|        symbolTable.relateToOperator("coopMatLoadNV",              EOpCooperativeMatrixLoadNV);
11582|     10|        symbolTable.relateToOperator("coopMatStoreNV",             EOpCooperativeMatrixStoreNV);
11583|     10|        symbolTable.relateToOperator("coopMatMulAddNV",            EOpCooperativeMatrixMulAddNV);
11584|       |
11585|     10|        symbolTable.relateToOperator("coopMatLoad",                EOpCooperativeMatrixLoad);
11586|     10|        symbolTable.relateToOperator("coopMatStore",               EOpCooperativeMatrixStore);
11587|     10|        symbolTable.relateToOperator("coopMatMulAdd",              EOpCooperativeMatrixMulAdd);
11588|       |
11589|     10|        symbolTable.relateToOperator("coopMatLoadTensorNV",        EOpCooperativeMatrixLoadTensorNV);
11590|     10|        symbolTable.relateToOperator("coopMatStoreTensorNV",       EOpCooperativeMatrixStoreTensorNV);
11591|       |
11592|     10|        symbolTable.relateToOperator("coopMatReduceNV",            EOpCooperativeMatrixReduceNV);
11593|     10|        symbolTable.relateToOperator("coopMatPerElementNV",        EOpCooperativeMatrixPerElementOpNV);
11594|     10|        symbolTable.relateToOperator("coopMatTransposeNV",         EOpCooperativeMatrixTransposeNV);
11595|       |
11596|     10|        symbolTable.relateToOperator("createTensorLayoutNV",         EOpCreateTensorLayoutNV);
11597|     10|        symbolTable.relateToOperator("setTensorLayoutBlockSizeNV",   EOpTensorLayoutSetBlockSizeNV);
11598|     10|        symbolTable.relateToOperator("setTensorLayoutDimensionNV",   EOpTensorLayoutSetDimensionNV);
11599|     10|        symbolTable.relateToOperator("setTensorLayoutStrideNV",      EOpTensorLayoutSetStrideNV);
11600|     10|        symbolTable.relateToOperator("sliceTensorLayoutNV",          EOpTensorLayoutSliceNV);
11601|     10|        symbolTable.relateToOperator("setTensorLayoutClampValueNV",  EOpTensorLayoutSetClampValueNV);
11602|       |
11603|     10|        symbolTable.relateToOperator("createTensorViewNV",           EOpCreateTensorViewNV);
11604|     10|        symbolTable.relateToOperator("setTensorViewDimensionsNV",    EOpTensorViewSetDimensionNV);
11605|     10|        symbolTable.relateToOperator("setTensorViewStrideNV",        EOpTensorViewSetStrideNV);
11606|     10|        symbolTable.relateToOperator("setTensorViewClipNV",          EOpTensorViewSetClipNV);
11607|       |
11608|     10|        symbolTable.relateToOperator("tensorReadARM",                EOpTensorReadARM);
11609|     10|        symbolTable.relateToOperator("tensorWriteARM",               EOpTensorWriteARM);
11610|     10|        symbolTable.relateToOperator("tensorSizeARM",                EOpTensorSizeARM);
11611|       |
11612|     10|        symbolTable.relateToOperator("bitcastQCOM", EOpBitCastArrayQCOM);
11613|     10|        symbolTable.relateToOperator("extractSubArrayQCOM", EOpExtractSubArrayQCOM);
11614|     10|        symbolTable.relateToOperator("vectorToCoopmatQCOM", EOpCompositeConstructCoopMatQCOM);
11615|     10|        symbolTable.relateToOperator("coopmatToVectorQCOM", EOpCompositeExtractCoopMatQCOM);
11616|       |
11617|     10|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11617:13): [True: 10, False: 0]
  |  Branch (11617:38): [True: 0, False: 10]
  ------------------
11618|      0|            symbolTable.relateToOperator("fetchMicroTriangleVertexPositionNV", EOpFetchMicroTriangleVertexPositionNV);
11619|      0|            symbolTable.relateToOperator("fetchMicroTriangleVertexBarycentricNV", EOpFetchMicroTriangleVertexBarycentricNV);
11620|      0|        }
11621|     10|        break;
11622|       |
11623|     10|    case EShLangRayGen:
  ------------------
  |  Branch (11623:5): [True: 10, False: 312]
  ------------------
11624|     10|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11624:13): [True: 10, False: 0]
  |  Branch (11624:38): [True: 0, False: 10]
  ------------------
11625|      0|            symbolTable.relateToOperator("fetchMicroTriangleVertexPositionNV", EOpFetchMicroTriangleVertexPositionNV);
11626|      0|            symbolTable.relateToOperator("fetchMicroTriangleVertexBarycentricNV", EOpFetchMicroTriangleVertexBarycentricNV);
11627|      0|        }
11628|     10|        [[fallthrough]];
11629|     20|    case EShLangClosestHit:
  ------------------
  |  Branch (11629:5): [True: 10, False: 312]
  ------------------
11630|     30|    case EShLangMiss:
  ------------------
  |  Branch (11630:5): [True: 10, False: 312]
  ------------------
11631|     30|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11631:13): [True: 30, False: 0]
  |  Branch (11631:38): [True: 0, False: 30]
  ------------------
11632|      0|            symbolTable.relateToOperator("traceNV", EOpTraceNV);
11633|      0|            symbolTable.relateToOperator("traceRayMotionNV", EOpTraceRayMotionNV);
11634|      0|            symbolTable.relateToOperator("traceRayEXT", EOpTraceKHR);
11635|      0|            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
11636|      0|            symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR);
11637|       |
11638|      0|            symbolTable.relateToOperator("hitObjectTraceRayNV", EOpHitObjectTraceRayNV);
11639|      0|            symbolTable.relateToOperator("hitObjectTraceRayMotionNV", EOpHitObjectTraceRayMotionNV);
11640|      0|            symbolTable.relateToOperator("hitObjectRecordHitNV", EOpHitObjectRecordHitNV);
11641|      0|            symbolTable.relateToOperator("hitObjectRecordHitMotionNV", EOpHitObjectRecordHitMotionNV);
11642|      0|            symbolTable.relateToOperator("hitObjectRecordHitWithIndexNV", EOpHitObjectRecordHitWithIndexNV);
11643|      0|            symbolTable.relateToOperator("hitObjectRecordHitWithIndexMotionNV", EOpHitObjectRecordHitWithIndexMotionNV);
11644|      0|            symbolTable.relateToOperator("hitObjectRecordMissNV", EOpHitObjectRecordMissNV);
11645|      0|            symbolTable.relateToOperator("hitObjectRecordMissMotionNV", EOpHitObjectRecordMissMotionNV);
11646|      0|            symbolTable.relateToOperator("hitObjectRecordEmptyNV", EOpHitObjectRecordEmptyNV);
11647|      0|            symbolTable.relateToOperator("hitObjectExecuteShaderNV", EOpHitObjectExecuteShaderNV);
11648|      0|            symbolTable.relateToOperator("hitObjectIsEmptyNV", EOpHitObjectIsEmptyNV);
11649|      0|            symbolTable.relateToOperator("hitObjectIsMissNV", EOpHitObjectIsMissNV);
11650|      0|            symbolTable.relateToOperator("hitObjectIsHitNV", EOpHitObjectIsHitNV);
11651|      0|            symbolTable.relateToOperator("hitObjectGetRayTMinNV", EOpHitObjectGetRayTMinNV);
11652|      0|            symbolTable.relateToOperator("hitObjectGetRayTMaxNV", EOpHitObjectGetRayTMaxNV);
11653|      0|            symbolTable.relateToOperator("hitObjectGetObjectRayOriginNV", EOpHitObjectGetObjectRayOriginNV);
11654|      0|            symbolTable.relateToOperator("hitObjectGetObjectRayDirectionNV", EOpHitObjectGetObjectRayDirectionNV);
11655|      0|            symbolTable.relateToOperator("hitObjectGetWorldRayOriginNV", EOpHitObjectGetWorldRayOriginNV);
11656|      0|            symbolTable.relateToOperator("hitObjectGetWorldRayDirectionNV", EOpHitObjectGetWorldRayDirectionNV);
11657|      0|            symbolTable.relateToOperator("hitObjectGetWorldToObjectNV", EOpHitObjectGetWorldToObjectNV);
11658|      0|            symbolTable.relateToOperator("hitObjectGetObjectToWorldNV", EOpHitObjectGetObjectToWorldNV);
11659|      0|            symbolTable.relateToOperator("hitObjectGetInstanceCustomIndexNV", EOpHitObjectGetInstanceCustomIndexNV);
11660|      0|            symbolTable.relateToOperator("hitObjectGetInstanceIdNV", EOpHitObjectGetInstanceIdNV);
11661|      0|            symbolTable.relateToOperator("hitObjectGetGeometryIndexNV", EOpHitObjectGetGeometryIndexNV);
11662|      0|            symbolTable.relateToOperator("hitObjectGetPrimitiveIndexNV", EOpHitObjectGetPrimitiveIndexNV);
11663|      0|            symbolTable.relateToOperator("hitObjectGetHitKindNV", EOpHitObjectGetHitKindNV);
11664|      0|            symbolTable.relateToOperator("hitObjectGetAttributesNV", EOpHitObjectGetAttributesNV);
11665|      0|            symbolTable.relateToOperator("hitObjectGetCurrentTimeNV", EOpHitObjectGetCurrentTimeNV);
11666|      0|            symbolTable.relateToOperator("hitObjectGetShaderBindingTableRecordIndexNV", EOpHitObjectGetShaderBindingTableRecordIndexNV);
11667|      0|            symbolTable.relateToOperator("hitObjectGetShaderRecordBufferHandleNV", EOpHitObjectGetShaderRecordBufferHandleNV);
11668|      0|            symbolTable.relateToOperator("hitObjectGetClusterIdNV", EOpHitObjectGetClusterIdNV);
11669|      0|            symbolTable.relateToOperator("reorderThreadNV", EOpReorderThreadNV);
11670|      0|            symbolTable.relateToOperator("hitObjectGetSpherePositionNV", EOpHitObjectGetSpherePositionNV);
11671|      0|            symbolTable.relateToOperator("hitObjectGetSphereRadiusNV", EOpHitObjectGetSphereRadiusNV);
11672|      0|            symbolTable.relateToOperator("hitObjectGetLSSPositionsNV", EOpHitObjectGetLSSPositionsNV);
11673|      0|            symbolTable.relateToOperator("hitObjectGetLSSRadiiNV", EOpHitObjectGetLSSRadiiNV);
11674|      0|            symbolTable.relateToOperator("hitObjectIsSphereHitNV", EOpHitObjectIsSphereHitNV);
11675|      0|            symbolTable.relateToOperator("hitObjectIsLSSHitNV", EOpHitObjectIsLSSHitNV);
11676|      0|            symbolTable.relateToOperator("hitObjectTraceRayEXT", EOpHitObjectTraceRayEXT);
11677|      0|            symbolTable.relateToOperator("hitObjectTraceRayMotionEXT", EOpHitObjectTraceRayMotionEXT);
11678|      0|            symbolTable.relateToOperator("hitObjectRecordMissEXT", EOpHitObjectRecordMissEXT);
11679|      0|            symbolTable.relateToOperator("hitObjectRecordMissMotionEXT", EOpHitObjectRecordMissMotionEXT);
11680|      0|            symbolTable.relateToOperator("hitObjectRecordEmptyEXT", EOpHitObjectRecordEmptyEXT);
11681|      0|            symbolTable.relateToOperator("hitObjectExecuteShaderEXT", EOpHitObjectExecuteShaderEXT);
11682|      0|            symbolTable.relateToOperator("hitObjectIsEmptyEXT", EOpHitObjectIsEmptyEXT);
11683|      0|            symbolTable.relateToOperator("hitObjectIsMissEXT", EOpHitObjectIsMissEXT);
11684|      0|            symbolTable.relateToOperator("hitObjectIsHitEXT", EOpHitObjectIsHitEXT);
11685|      0|            symbolTable.relateToOperator("hitObjectGetRayTMinEXT", EOpHitObjectGetRayTMinEXT);
11686|      0|            symbolTable.relateToOperator("hitObjectGetRayTMaxEXT", EOpHitObjectGetRayTMaxEXT);
11687|      0|            symbolTable.relateToOperator("hitObjectGetRayFlagsEXT", EOpHitObjectGetRayFlagsEXT);
11688|      0|            symbolTable.relateToOperator("hitObjectGetObjectRayOriginEXT", EOpHitObjectGetObjectRayOriginEXT);
11689|      0|            symbolTable.relateToOperator("hitObjectGetObjectRayDirectionEXT", EOpHitObjectGetObjectRayDirectionEXT);
11690|      0|            symbolTable.relateToOperator("hitObjectGetWorldRayOriginEXT", EOpHitObjectGetWorldRayOriginEXT);
11691|      0|            symbolTable.relateToOperator("hitObjectGetWorldRayDirectionEXT", EOpHitObjectGetWorldRayDirectionEXT);
11692|      0|            symbolTable.relateToOperator("hitObjectGetWorldToObjectEXT", EOpHitObjectGetWorldToObjectEXT);
11693|      0|            symbolTable.relateToOperator("hitObjectGetObjectToWorldEXT", EOpHitObjectGetObjectToWorldEXT);
11694|      0|            symbolTable.relateToOperator("hitObjectGetInstanceCustomIndexEXT", EOpHitObjectGetInstanceCustomIndexEXT);
11695|      0|            symbolTable.relateToOperator("hitObjectGetInstanceIdEXT", EOpHitObjectGetInstanceIdEXT);
11696|      0|            symbolTable.relateToOperator("hitObjectGetGeometryIndexEXT", EOpHitObjectGetGeometryIndexEXT);
11697|      0|            symbolTable.relateToOperator("hitObjectGetPrimitiveIndexEXT", EOpHitObjectGetPrimitiveIndexEXT);
11698|      0|            symbolTable.relateToOperator("hitObjectGetHitKindEXT", EOpHitObjectGetHitKindEXT);
11699|      0|            symbolTable.relateToOperator("hitObjectGetAttributesEXT", EOpHitObjectGetAttributesEXT);
11700|      0|            symbolTable.relateToOperator("hitObjectGetCurrentTimeEXT", EOpHitObjectGetCurrentTimeEXT);
11701|      0|            symbolTable.relateToOperator("hitObjectGetShaderBindingTableRecordIndexEXT", EOpHitObjectGetShaderBindingTableRecordIndexEXT);
11702|      0|            symbolTable.relateToOperator("hitObjectGetShaderRecordBufferHandleEXT", EOpHitObjectGetShaderRecordBufferHandleEXT);
11703|      0|            symbolTable.relateToOperator("hitObjectSetShaderBindingTableRecordIndexEXT", EOpHitObjectSetShaderBindingTableRecordIndexEXT);
11704|      0|            symbolTable.relateToOperator("reorderThreadEXT", EOpReorderThreadEXT);
11705|      0|            symbolTable.relateToOperator("hitObjectReorderExecuteEXT", EOpHitObjectReorderExecuteEXT);
11706|      0|            symbolTable.relateToOperator("hitObjectTraceReorderExecuteEXT", EOpHitObjectTraceReorderExecuteEXT);
11707|      0|            symbolTable.relateToOperator("hitObjectTraceMotionReorderExecuteEXT", EOpHitObjectTraceMotionReorderExecuteEXT);
11708|      0|            symbolTable.relateToOperator("hitObjectRecordFromQueryEXT", EOpHitObjectRecordFromQueryEXT);
11709|      0|            symbolTable.relateToOperator("hitObjectGetIntersectionTriangleVertexPositionsEXT", EOpHitObjectGetIntersectionTriangleVertexPositionsEXT);
11710|      0|        }
11711|     30|        break;
11712|     10|    case EShLangIntersect:
  ------------------
  |  Branch (11712:5): [True: 10, False: 312]
  ------------------
11713|     10|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11713:13): [True: 10, False: 0]
  |  Branch (11713:38): [True: 0, False: 10]
  ------------------
11714|      0|            symbolTable.relateToOperator("reportIntersectionNV", EOpReportIntersection);
11715|      0|            symbolTable.relateToOperator("reportIntersectionEXT", EOpReportIntersection);
11716|      0|        }
11717|     10|        break;
11718|     10|    case EShLangAnyHit:
  ------------------
  |  Branch (11718:5): [True: 10, False: 312]
  ------------------
11719|     10|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11719:13): [True: 10, False: 0]
  |  Branch (11719:38): [True: 0, False: 10]
  ------------------
11720|      0|            symbolTable.relateToOperator("ignoreIntersectionNV", EOpIgnoreIntersectionNV);
11721|      0|            symbolTable.relateToOperator("terminateRayNV", EOpTerminateRayNV);
11722|      0|        }
11723|     10|        break;
11724|     10|    case EShLangCallable:
  ------------------
  |  Branch (11724:5): [True: 10, False: 312]
  ------------------
11725|     10|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11725:13): [True: 10, False: 0]
  |  Branch (11725:38): [True: 0, False: 10]
  ------------------
11726|      0|            symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV);
11727|      0|            symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR);
11728|      0|        }
11729|     10|        break;
11730|      5|    case EShLangMesh:
  ------------------
  |  Branch (11730:5): [True: 5, False: 317]
  ------------------
11731|      5|        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (11731:14): [True: 5, False: 0]
  |  Branch (11731:39): [True: 5, False: 0]
  |  Branch (11731:59): [True: 0, False: 0]
  |  Branch (11731:84): [True: 0, False: 0]
  ------------------
11732|      5|            symbolTable.relateToOperator("writePackedPrimitiveIndices4x8NV", EOpWritePackedPrimitiveIndices4x8NV);
11733|      5|            symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
11734|      5|            symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
11735|      5|            symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
11736|      5|        }
11737|       |
11738|      5|        if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (11738:13): [True: 5, False: 0]
  |  Branch (11738:38): [True: 5, False: 0]
  ------------------
11739|      5|            symbolTable.relateToOperator("SetMeshOutputsEXT", EOpSetMeshOutputsEXT);
11740|      5|        }
11741|       |
11742|      5|        if (profile != EEsProfile && version >= 460) {
  ------------------
  |  Branch (11742:13): [True: 5, False: 0]
  |  Branch (11742:38): [True: 0, False: 5]
  ------------------
11743|       |            // Builtins for GL_NV_displacement_micromap.
11744|      0|            symbolTable.relateToOperator("fetchMicroTriangleVertexPositionNV", EOpFetchMicroTriangleVertexPositionNV);
11745|      0|            symbolTable.relateToOperator("fetchMicroTriangleVertexBarycentricNV", EOpFetchMicroTriangleVertexBarycentricNV);
11746|      0|        }
11747|      5|        break;
11748|     10|    case EShLangTask:
  ------------------
  |  Branch (11748:5): [True: 10, False: 312]
  ------------------
11749|     10|        if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
  ------------------
  |  Branch (11749:14): [True: 10, False: 0]
  |  Branch (11749:39): [True: 10, False: 0]
  |  Branch (11749:59): [True: 0, False: 0]
  |  Branch (11749:84): [True: 0, False: 0]
  ------------------
11750|     10|            symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
11751|     10|            symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
11752|     10|            symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
11753|     10|        }
11754|     10|        if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (11754:13): [True: 10, False: 0]
  |  Branch (11754:38): [True: 10, False: 0]
  ------------------
11755|     10|            symbolTable.relateToOperator("EmitMeshTasksEXT", EOpEmitMeshTasksEXT);
11756|     10|        }
11757|     10|        break;
11758|       |
11759|      0|    default:
  ------------------
  |  Branch (11759:5): [True: 0, False: 322]
  ------------------
11760|       |        assert(false && "Language not supported");
11761|    322|    }
11762|    322|}
_ZN7glslang9TBuiltIns16identifyBuiltInsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableERK16TBuiltInResource:
11774|    100|{
11775|    100|    if (profile != EEsProfile && version >= 430 && version < 440) {
  ------------------
  |  Branch (11775:9): [True: 100, False: 0]
  |  Branch (11775:34): [True: 11, False: 89]
  |  Branch (11775:52): [True: 0, False: 11]
  ------------------
11776|      0|        symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts);
11777|      0|        symbolTable.setVariableExtensions("gl_MaxTransformFeedbackInterleavedComponents", 1, &E_GL_ARB_enhanced_layouts);
11778|      0|    }
11779|    100|    if (profile != EEsProfile && version >= 130 && version < 420) {
  ------------------
  |  Branch (11779:9): [True: 100, False: 0]
  |  Branch (11779:34): [True: 100, False: 0]
  |  Branch (11779:52): [True: 89, False: 11]
  ------------------
11780|     89|        symbolTable.setVariableExtensions("gl_MinProgramTexelOffset", 1, &E_GL_ARB_shading_language_420pack);
11781|     89|        symbolTable.setVariableExtensions("gl_MaxProgramTexelOffset", 1, &E_GL_ARB_shading_language_420pack);
11782|     89|    }
11783|    100|    if (profile != EEsProfile && version >= 150 && version < 410)
  ------------------
  |  Branch (11783:9): [True: 100, False: 0]
  |  Branch (11783:34): [True: 14, False: 86]
  |  Branch (11783:52): [True: 3, False: 11]
  ------------------
11784|      3|        symbolTable.setVariableExtensions("gl_MaxViewports", 1, &E_GL_ARB_viewport_array);
11785|       |
11786|    100|    switch(language) {
11787|      0|    case EShLangFragment:
  ------------------
  |  Branch (11787:5): [True: 0, False: 100]
  ------------------
11788|       |        // Set up gl_FragData based on current array size.
11789|      0|        if (version == 100 || IncludeLegacy(version, profile, spvVersion) || (! ForwardCompatibility && profile != EEsProfile && version < 420)) {
  ------------------
  |  Branch (11789:13): [True: 0, False: 0]
  |  Branch (11789:31): [True: 0, False: 0]
  |  Branch (11789:79): [True: 0, Folded]
  |  Branch (11789:105): [True: 0, False: 0]
  |  Branch (11789:130): [True: 0, False: 0]
  ------------------
11790|      0|            TPrecisionQualifier pq = profile == EEsProfile ? EpqMedium : EpqNone;
  ------------------
  |  Branch (11790:38): [True: 0, False: 0]
  ------------------
11791|      0|            TType fragData(EbtFloat, EvqFragColor, pq, 4);
11792|      0|            TArraySizes* arraySizes = new TArraySizes;
11793|      0|            arraySizes->addInnerSize(resources.maxDrawBuffers);
11794|      0|            fragData.transferArraySizes(arraySizes);
11795|      0|            symbolTable.insert(*new TVariable(NewPoolTString("gl_FragData"), fragData));
11796|      0|            SpecialQualifier("gl_FragData", EvqFragColor, EbvFragData, symbolTable);
11797|      0|        }
11798|       |
11799|       |        // GL_EXT_blend_func_extended
11800|      0|        if (profile == EEsProfile && version >= 100) {
  ------------------
  |  Branch (11800:13): [True: 0, False: 0]
  |  Branch (11800:38): [True: 0, False: 0]
  ------------------
11801|      0|           symbolTable.setVariableExtensions("gl_MaxDualSourceDrawBuffersEXT",    1, &E_GL_EXT_blend_func_extended);
11802|      0|           symbolTable.setVariableExtensions("gl_SecondaryFragColorEXT",    1, &E_GL_EXT_blend_func_extended);
11803|      0|           symbolTable.setVariableExtensions("gl_SecondaryFragDataEXT",    1, &E_GL_EXT_blend_func_extended);
11804|      0|           SpecialQualifier("gl_SecondaryFragColorEXT", EvqVaryingOut, EbvSecondaryFragColorEXT, symbolTable);
11805|      0|           SpecialQualifier("gl_SecondaryFragDataEXT", EvqVaryingOut, EbvSecondaryFragDataEXT, symbolTable);
11806|      0|        }
11807|       |
11808|      0|        break;
11809|       |
11810|      7|    case EShLangTessControl:
  ------------------
  |  Branch (11810:5): [True: 7, False: 93]
  ------------------
11811|      8|    case EShLangTessEvaluation:
  ------------------
  |  Branch (11811:5): [True: 1, False: 99]
  ------------------
11812|       |        // Because of the context-dependent array size (gl_MaxPatchVertices),
11813|       |        // these variables were added later than the others and need to be mapped now.
11814|       |
11815|       |        // standard members
11816|      8|        BuiltInVariable("gl_in", "gl_Position",     EbvPosition,     symbolTable);
11817|      8|        BuiltInVariable("gl_in", "gl_PointSize",    EbvPointSize,    symbolTable);
11818|      8|        BuiltInVariable("gl_in", "gl_ClipDistance", EbvClipDistance, symbolTable);
11819|      8|        BuiltInVariable("gl_in", "gl_CullDistance", EbvCullDistance, symbolTable);
11820|       |
11821|       |        // compatibility members
11822|      8|        BuiltInVariable("gl_in", "gl_ClipVertex",          EbvClipVertex,          symbolTable);
11823|      8|        BuiltInVariable("gl_in", "gl_FrontColor",          EbvFrontColor,          symbolTable);
11824|      8|        BuiltInVariable("gl_in", "gl_BackColor",           EbvBackColor,           symbolTable);
11825|      8|        BuiltInVariable("gl_in", "gl_FrontSecondaryColor", EbvFrontSecondaryColor, symbolTable);
11826|      8|        BuiltInVariable("gl_in", "gl_BackSecondaryColor",  EbvBackSecondaryColor,  symbolTable);
11827|      8|        BuiltInVariable("gl_in", "gl_TexCoord",            EbvTexCoord,            symbolTable);
11828|      8|        BuiltInVariable("gl_in", "gl_FogFragCoord",        EbvFogFragCoord,        symbolTable);
11829|       |
11830|      8|        symbolTable.setVariableExtensions("gl_in", "gl_SecondaryPositionNV", 1, &E_GL_NV_stereo_view_rendering);
11831|      8|        symbolTable.setVariableExtensions("gl_in", "gl_PositionPerViewNV",   1, &E_GL_NVX_multiview_per_view_attributes);
11832|       |
11833|      8|        BuiltInVariable("gl_in", "gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable);
11834|      8|        BuiltInVariable("gl_in", "gl_PositionPerViewNV",   EbvPositionPerViewNV,   symbolTable);
11835|       |
11836|       |        // extension requirements
11837|      8|        if (profile == EEsProfile) {
  ------------------
  |  Branch (11837:13): [True: 0, False: 8]
  ------------------
11838|      0|            symbolTable.setVariableExtensions("gl_in", "gl_PointSize", Num_AEP_tessellation_point_size, AEP_tessellation_point_size);
11839|      0|        }
11840|       |
11841|      8|        break;
11842|       |
11843|     92|    default:
  ------------------
  |  Branch (11843:5): [True: 92, False: 8]
  ------------------
11844|     92|        break;
11845|    100|    }
11846|    100|}
Initialize.cpp:_ZZN7glslang9TBuiltIns17addTabledBuiltinsEi8EProfileRKNS_10SpvVersionEENK3$_0clERNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEERK4spanIKNS_12_GLOBAL__N_115BuiltInFunctionEE:
  510|    208|    const auto forEachFunction = [&](TString& decls, const span<const BuiltInFunction>& functions) {
  511|  8.14k|        for (const auto& fn : functions) {
  ------------------
  |  Branch (511:29): [True: 8.14k, False: 208]
  ------------------
  512|  8.14k|            if (ValidVersion(fn, version, profile, spvVersion)) {
  ------------------
  |  Branch (512:17): [True: 7.27k, False: 874]
  ------------------
  513|  7.27k|                AddTabledBuiltin(decls, fn);
  514|  7.27k|                if (profile != EEsProfile) {
  ------------------
  |  Branch (514:21): [True: 7.27k, False: 0]
  ------------------
  515|  7.27k|                    AddLongVectorBuiltin(decls, fn);
  516|  7.27k|                }
  517|  7.27k|            }
  518|  8.14k|        }
  519|    208|    };
Initialize.cpp:_ZN7glslang12_GLOBAL__N_112ValidVersionERKNS0_15BuiltInFunctionEi8EProfileRKNS_10SpvVersionE:
  476|  8.14k|{
  477|       |    // nullptr means always valid
  478|  8.14k|    if (function.versioning.empty())
  ------------------
  |  Branch (478:9): [True: 4.78k, False: 3.36k]
  ------------------
  479|  4.78k|        return true;
  480|       |
  481|       |    // check for what is said about our current profile
  482|  6.73k|    for (const auto& v : function.versioning) {
  ------------------
  |  Branch (482:24): [True: 6.73k, False: 874]
  ------------------
  483|  6.73k|        if ((v.profiles & profile) != 0) {
  ------------------
  |  Branch (483:13): [True: 3.36k, False: 3.36k]
  ------------------
  484|  3.36k|            if (v.minCoreVersion <= version || (v.numExtensions > 0 && v.minExtendedVersion <= version))
  ------------------
  |  Branch (484:17): [True: 2.49k, False: 874]
  |  Branch (484:49): [True: 0, False: 874]
  |  Branch (484:72): [True: 0, False: 0]
  ------------------
  485|  2.49k|                return true;
  486|  3.36k|        }
  487|  6.73k|    }
  488|       |
  489|    874|    return false;
  490|  3.36k|}
Initialize.cpp:_ZN7glslang12_GLOBAL__N_116AddTabledBuiltinERNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS0_15BuiltInFunctionE:
  322|  7.27k|{
  323|  7.27k|    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|  7.27k|    const ArgClass ClassFixed = (ArgClass)(ClassLS | ClassXLS | ClassLS2 | ClassFS | ClassFS2);
  329|  15.6k|    for (int fixed = 0; fixed < ((function.classes & ClassFixed) > 0 ? 2 : 1); ++fixed) {
  ------------------
  |  Branch (329:25): [True: 8.36k, False: 7.27k]
  |  Branch (329:34): [True: 3.26k, False: 12.3k]
  ------------------
  330|       |
  331|  8.36k|        if (fixed == 0 && (function.classes & ClassXLS))
  ------------------
  |  Branch (331:13): [True: 7.27k, False: 1.08k]
  |  Branch (331:27): [True: 99, False: 7.17k]
  ------------------
  332|     99|            continue;
  333|       |
  334|       |        // walk the type strings in TypeString[]
  335|   140k|        for (int type = 0; type < TypeStringCount; ++type) {
  ------------------
  |  Branch (335:28): [True: 132k, False: 8.26k]
  ------------------
  336|       |            // skip types not selected: go from type to row number to type bit
  337|   132k|            if ((function.types & (1 << (type >> TypeStringRowShift))) == 0)
  ------------------
  |  Branch (337:17): [True: 93.2k, False: 39.0k]
  ------------------
  338|  93.2k|                continue;
  339|       |
  340|       |            // if we aren't on a scalar, and should be, skip
  341|  39.0k|            if ((function.classes & ClassV1) && !isScalarType(type))
  ------------------
  |  Branch (341:17): [True: 768, False: 38.2k]
  |  Branch (341:49): [True: 576, False: 192]
  ------------------
  342|    576|                continue;
  343|       |
  344|       |            // if we aren't on a 3-vector, and should be, skip
  345|  38.4k|            if ((function.classes & ClassV3) && (type & TypeStringColumnMask) != 2)
  ------------------
  |  Branch (345:17): [True: 396, False: 38.0k]
  |  Branch (345:49): [True: 297, False: 99]
  ------------------
  346|    297|                continue;
  347|       |
  348|       |            // skip replication of all arg scalars between the varying arg set and the fixed args
  349|  38.1k|            if (fixed == 1 && type == (type & TypeStringScalarMask) && (function.classes & ClassXLS) == 0)
  ------------------
  |  Branch (349:17): [True: 5.54k, False: 32.6k]
  |  Branch (349:31): [True: 1.38k, False: 4.15k]
  |  Branch (349:72): [True: 1.28k, False: 99]
  ------------------
  350|  1.28k|                continue;
  351|       |
  352|       |            // skip scalars when we are told to
  353|  36.8k|            if ((function.classes & ClassNS) && isScalarType(type))
  ------------------
  |  Branch (353:17): [True: 9.10k, False: 27.7k]
  |  Branch (353:49): [True: 2.27k, False: 6.83k]
  ------------------
  354|  2.27k|                continue;
  355|       |
  356|       |            // return type
  357|  34.5k|            if (function.classes & ClassB)
  ------------------
  |  Branch (357:17): [True: 6.73k, False: 27.8k]
  ------------------
  358|  6.73k|                decls.append(TypeString[type & TypeStringColumnMask]);
  359|  27.8k|            else if (function.classes & ClassRS)
  ------------------
  |  Branch (359:22): [True: 1.78k, False: 26.0k]
  ------------------
  360|  1.78k|                decls.append(TypeString[type & TypeStringScalarMask]);
  361|  26.0k|            else
  362|  26.0k|                decls.append(TypeString[type]);
  363|  34.5k|            decls.append(" ");
  364|  34.5k|            decls.append(function.name);
  365|  34.5k|            decls.append("(");
  366|       |
  367|       |            // arguments
  368|  92.8k|            for (int arg = 0; arg < function.numArguments; ++arg) {
  ------------------
  |  Branch (368:31): [True: 58.3k, False: 34.5k]
  ------------------
  369|  58.3k|                if (arg == function.numArguments - 1 && (function.classes & ClassLO))
  ------------------
  |  Branch (369:21): [True: 34.5k, False: 23.7k]
  |  Branch (369:57): [True: 396, False: 34.1k]
  ------------------
  370|    396|                    decls.append("out ");
  371|  58.3k|                if (arg == 0) {
  ------------------
  |  Branch (371:21): [True: 34.5k, False: 23.7k]
  ------------------
  372|  34.5k|                    if (function.classes & ClassCVN)
  ------------------
  |  Branch (372:25): [True: 192, False: 34.3k]
  ------------------
  373|    192|                        decls.append("coherent volatile nontemporal ");
  374|  34.5k|                    if (function.classes & ClassFIO)
  ------------------
  |  Branch (374:25): [True: 192, False: 34.3k]
  ------------------
  375|    192|                        decls.append("inout ");
  376|  34.5k|                    if (function.classes & ClassFO)
  ------------------
  |  Branch (376:25): [True: 0, False: 34.5k]
  ------------------
  377|      0|                        decls.append("out ");
  378|  34.5k|                }
  379|  58.3k|                if ((function.classes & ClassLB) && arg == function.numArguments - 1)
  ------------------
  |  Branch (379:21): [True: 1.42k, False: 56.8k]
  |  Branch (379:53): [True: 476, False: 952]
  ------------------
  380|    476|                    decls.append(TypeString[type & TypeStringColumnMask]);
  381|  57.8k|                else if (fixed && ((arg == function.numArguments - 1 && (function.classes & (ClassLS | ClassXLS |
  ------------------
  |  Branch (381:26): [True: 10.3k, False: 47.4k]
  |  Branch (381:37): [True: 4.25k, False: 6.13k]
  |  Branch (381:73): [True: 3.66k, False: 594]
  ------------------
  382|  4.25k|                                                                                                       ClassLS2))) ||
  383|  6.73k|                                   (arg == function.numArguments - 2 && (function.classes & ClassLS2))             ||
  ------------------
  |  Branch (383:37): [True: 4.25k, False: 2.47k]
  |  Branch (383:73): [True: 891, False: 3.36k]
  ------------------
  384|  5.84k|                                   (arg == 0                         && (function.classes & (ClassFS | ClassFS2))) ||
  ------------------
  |  Branch (384:37): [True: 4.25k, False: 1.58k]
  |  Branch (384:73): [True: 594, False: 3.66k]
  ------------------
  385|  5.24k|                                   (arg == 1                         && (function.classes & ClassFS2))))
  ------------------
  |  Branch (385:37): [True: 1.28k, False: 3.96k]
  |  Branch (385:73): [True: 297, False: 990]
  ------------------
  386|  5.44k|                    decls.append(TypeString[type & TypeStringScalarMask]);
  387|  52.3k|                else
  388|  52.3k|                    decls.append(TypeString[type]);
  389|  58.3k|                if (arg < function.numArguments - 1)
  ------------------
  |  Branch (389:21): [True: 23.7k, False: 34.5k]
  ------------------
  390|  23.7k|                    decls.append(",");
  391|  58.3k|            }
  392|  34.5k|            decls.append(");\n");
  393|  34.5k|        }
  394|  8.26k|    }
  395|  7.27k|}
Initialize.cpp:_ZZN7glslang12_GLOBAL__N_116AddTabledBuiltinERNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS0_15BuiltInFunctionEENK3$_0clEi:
  323|  9.87k|    const auto isScalarType = [](int type) { return (type & TypeStringColumnMask) == 0; };
Initialize.cpp:_ZN7glslang12_GLOBAL__N_120AddLongVectorBuiltinERNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS0_15BuiltInFunctionE:
  401|  7.27k|{
  402|  7.27k|    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|  7.27k|    const ArgClass ClassFixed = (ArgClass)(ClassLS | ClassXLS | ClassLS2 | ClassFS | ClassFS2);
  408|  15.6k|    for (int fixed = 0; fixed < ((function.classes & ClassFixed) > 0 ? 2 : 1); ++fixed) {
  ------------------
  |  Branch (408:25): [True: 8.36k, False: 7.27k]
  |  Branch (408:34): [True: 3.26k, False: 12.3k]
  ------------------
  409|       |
  410|  8.36k|        if (fixed == 0 && (function.classes & ClassXLS))
  ------------------
  |  Branch (410:13): [True: 7.27k, False: 1.08k]
  |  Branch (410:27): [True: 99, False: 7.17k]
  ------------------
  411|     99|            continue;
  412|       |
  413|       |        // Iterate over the different scalar types (needed for ClassRS)
  414|   140k|        for (int type = 0; type < TypeStringCount; ++type) {
  ------------------
  |  Branch (414:28): [True: 132k, False: 8.26k]
  ------------------
  415|   132k|            if (!isScalarType(type))
  ------------------
  |  Branch (415:17): [True: 99.1k, False: 33.0k]
  ------------------
  416|  99.1k|                continue;
  417|       |
  418|       |            // skip types not selected: go from type to row number to type bit
  419|  33.0k|            if ((function.types & (1 << (type >> TypeStringRowShift))) == 0)
  ------------------
  |  Branch (419:17): [True: 23.3k, False: 9.75k]
  ------------------
  420|  23.3k|                continue;
  421|       |
  422|       |            // skip scalar-only
  423|  9.75k|            if (function.classes & ClassV1)
  ------------------
  |  Branch (423:17): [True: 192, False: 9.56k]
  ------------------
  424|    192|                continue;
  425|       |
  426|       |            // skip 3-vector
  427|  9.56k|            if (function.classes & ClassV3)
  ------------------
  |  Branch (427:17): [True: 99, False: 9.46k]
  ------------------
  428|     99|                continue;
  429|       |
  430|  9.46k|            TString decl;
  431|       |            // return type
  432|  9.46k|            if (function.classes & ClassB)
  ------------------
  |  Branch (432:17): [True: 2.17k, False: 7.28k]
  ------------------
  433|  2.17k|                decl.append("vector");
  434|  7.28k|            else if (function.classes & ClassRS)
  ------------------
  |  Branch (434:22): [True: 495, False: 6.79k]
  ------------------
  435|    495|                decl.append(TypeString[type & TypeStringScalarMask]);
  436|  6.79k|            else
  437|  6.79k|                decl.append("vector");
  438|  9.46k|            decl.append(" ");
  439|  9.46k|            decl.append(function.name);
  440|  9.46k|            decl.append("(");
  441|       |
  442|       |            // arguments
  443|  25.7k|            for (int arg = 0; arg < function.numArguments; ++arg) {
  ------------------
  |  Branch (443:31): [True: 16.2k, False: 9.46k]
  ------------------
  444|  16.2k|                if (arg == function.numArguments - 1 && (function.classes & ClassLO))
  ------------------
  |  Branch (444:21): [True: 9.46k, False: 6.79k]
  |  Branch (444:57): [True: 99, False: 9.36k]
  ------------------
  445|     99|                    decl.append("out ");
  446|  16.2k|                if (arg == 0) {
  ------------------
  |  Branch (446:21): [True: 9.46k, False: 6.79k]
  ------------------
  447|  9.46k|                    if (function.classes & ClassCVN)
  ------------------
  |  Branch (447:25): [True: 0, False: 9.46k]
  ------------------
  448|      0|                        decl.append("coherent volatile nontemporal ");
  449|  9.46k|                    if (function.classes & ClassFIO)
  ------------------
  |  Branch (449:25): [True: 0, False: 9.46k]
  ------------------
  450|      0|                        decl.append("inout ");
  451|  9.46k|                    if (function.classes & ClassFO)
  ------------------
  |  Branch (451:25): [True: 0, False: 9.46k]
  ------------------
  452|      0|                        decl.append("out ");
  453|  9.46k|                }
  454|  16.2k|                if ((function.classes & ClassLB) && arg == function.numArguments - 1)
  ------------------
  |  Branch (454:21): [True: 357, False: 15.9k]
  |  Branch (454:53): [True: 119, False: 238]
  ------------------
  455|    119|                    decl.append("vector");
  456|  16.1k|                else if (fixed && ((arg == function.numArguments - 1 && (function.classes & (ClassLS | ClassXLS |
  ------------------
  |  Branch (456:26): [True: 3.36k, False: 12.7k]
  |  Branch (456:37): [True: 1.38k, False: 1.98k]
  |  Branch (456:73): [True: 1.18k, False: 198]
  ------------------
  457|  1.38k|                                                                                                       ClassLS2))) ||
  458|  2.17k|                                   (arg == function.numArguments - 2 && (function.classes & ClassLS2))             ||
  ------------------
  |  Branch (458:37): [True: 1.38k, False: 792]
  |  Branch (458:73): [True: 297, False: 1.08k]
  ------------------
  459|  1.88k|                                   (arg == 0                         && (function.classes & (ClassFS | ClassFS2))) ||
  ------------------
  |  Branch (459:37): [True: 1.38k, False: 495]
  |  Branch (459:73): [True: 198, False: 1.18k]
  ------------------
  460|  1.68k|                                   (arg == 1                         && (function.classes & ClassFS2))))
  ------------------
  |  Branch (460:37): [True: 396, False: 1.28k]
  |  Branch (460:73): [True: 99, False: 297]
  ------------------
  461|  1.78k|                    decl.append(TypeString[type & TypeStringScalarMask]);
  462|  14.3k|                else
  463|  14.3k|                    decl.append("vector");
  464|  16.2k|                if (arg < function.numArguments - 1)
  ------------------
  |  Branch (464:21): [True: 6.79k, False: 9.46k]
  ------------------
  465|  6.79k|                    decl.append(",");
  466|  16.2k|            }
  467|  9.46k|            decl.append(");\n");
  468|       |
  469|  9.46k|            decls.append(decl);
  470|  9.46k|        }
  471|  8.26k|    }
  472|  7.27k|}
Initialize.cpp:_ZZN7glslang12_GLOBAL__N_120AddLongVectorBuiltinERNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS0_15BuiltInFunctionEENK3$_0clEi:
  402|   132k|    const auto isScalarType = [](int type) { return (type & TypeStringColumnMask) == 0; };
_ZN7glslang13IncludeLegacyEi8EProfileRKNS_10SpvVersionE:
  537|    396|{
  538|    396|    return profile != EEsProfile && (version <= 130 || (spvVersion.spv == 0 && version == 140 && ARBCompatibility) ||
  ------------------
  |  Branch (538:12): [True: 396, False: 0]
  |  Branch (538:38): [True: 0, False: 396]
  |  Branch (538:57): [True: 0, False: 396]
  |  Branch (538:80): [True: 0, False: 0]
  |  Branch (538:98): [True: 0, Folded]
  ------------------
  539|    396|           profile == ECompatibilityProfile);
  ------------------
  |  Branch (539:12): [True: 0, False: 396]
  ------------------
  540|    396|}
Initialize.cpp:_ZN7glslangL15BuiltInVariableEPKcNS_16TBuiltInVariableERNS_12TSymbolTableE:
 8936|  12.2k|{
 8937|  12.2k|    TSymbol* symbol = symbolTable.find(name);
 8938|  12.2k|    if (symbol == nullptr)
  ------------------
  |  Branch (8938:9): [True: 5.35k, False: 6.91k]
  ------------------
 8939|  5.35k|        return;
 8940|       |
 8941|  6.91k|    TQualifier& symQualifier = symbol->getWritableType().getQualifier();
 8942|  6.91k|    symQualifier.builtIn = builtIn;
 8943|  6.91k|}
Initialize.cpp:_ZN7glslangL16SpecialQualifierEPKcNS_17TStorageQualifierENS_16TBuiltInVariableERNS_12TSymbolTableE:
 8898|  1.46k|{
 8899|  1.46k|    TSymbol* symbol = symbolTable.find(name);
 8900|  1.46k|    if (symbol == nullptr)
  ------------------
  |  Branch (8900:9): [True: 643, False: 825]
  ------------------
 8901|    643|        return;
 8902|       |
 8903|    825|    TQualifier& symQualifier = symbol->getWritableType().getQualifier();
 8904|    825|    symQualifier.storage = qualifier;
 8905|    825|    symQualifier.builtIn = builtIn;
 8906|    825|}
Initialize.cpp:_ZN7glslangL15BuiltInVariableEPKcS1_NS_16TBuiltInVariableERNS_12TSymbolTableE:
 8958|  4.56k|{
 8959|  4.56k|    TSymbol* symbol = symbolTable.find(blockName);
 8960|  4.56k|    if (symbol == nullptr)
  ------------------
  |  Branch (8960:9): [True: 4.03k, False: 526]
  ------------------
 8961|  4.03k|        return;
 8962|       |
 8963|    526|    TTypeList& structure = *symbol->getWritableType().getWritableStruct();
 8964|  2.69k|    for (int i = 0; i < (int)structure.size(); ++i) {
  ------------------
  |  Branch (8964:21): [True: 2.45k, False: 236]
  ------------------
 8965|  2.45k|        if (structure[i].type->getFieldName().compare(name) == 0) {
  ------------------
  |  Branch (8965:13): [True: 290, False: 2.16k]
  ------------------
 8966|    290|            structure[i].type->getQualifier().builtIn = builtIn;
 8967|    290|            return;
 8968|    290|        }
 8969|  2.45k|    }
 8970|    526|}
Initialize.cpp:_ZN7glslangL20ModifyFlatDecorationEPKcbRNS_12TSymbolTableE:
 8916|     99|{
 8917|     99|    TSymbol* symbol = symbolTable.find(name);
 8918|     99|    if (symbol == nullptr)
  ------------------
  |  Branch (8918:9): [True: 89, False: 10]
  ------------------
 8919|     89|        return;
 8920|       |
 8921|     10|    TQualifier& symQualifier = symbol->getWritableType().getQualifier();
 8922|     10|    symQualifier.flat = flat;
 8923|     10|}
Initialize.cpp:_ZN7glslang12_GLOBAL__N_120RelateTabledBuiltinsINSt3__15arrayINS0_15BuiltInFunctionELm79EEEEEvRKT_RNS_12TSymbolTableE:
  499|    322|{
  500|  25.4k|    for (const auto& fn : functions) {
  ------------------
  |  Branch (500:25): [True: 25.4k, False: 322]
  ------------------
  501|  25.4k|        symbolTable.relateToOperator(fn.name, fn.op);
  502|  25.4k|    }
  503|    322|}
Initialize.cpp:_ZN7glslang12_GLOBAL__N_120RelateTabledBuiltinsINSt3__15arrayINS0_15BuiltInFunctionELm3EEEEEvRKT_RNS_12TSymbolTableE:
  499|    322|{
  500|    966|    for (const auto& fn : functions) {
  ------------------
  |  Branch (500:25): [True: 966, False: 322]
  ------------------
  501|    966|        symbolTable.relateToOperator(fn.name, fn.op);
  502|    966|    }
  503|    322|}
Initialize.cpp:_ZN7glslang12_GLOBAL__N_120RelateTabledBuiltinsIA39_NS0_14CustomFunctionEEEvRKT_RNS_12TSymbolTableE:
  499|    322|{
  500|  12.5k|    for (const auto& fn : functions) {
  ------------------
  |  Branch (500:25): [True: 12.5k, False: 322]
  ------------------
  501|  12.5k|        symbolTable.relateToOperator(fn.name, fn.op);
  502|  12.5k|    }
  503|    322|}
Initialize.cpp:_ZZN7glslang9TBuiltIns16identifyBuiltInsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableEENK3$_0clEPKc:
10177|    840|            auto coopMatKHRCallback = [](const char *name) -> std::vector<const char *> {
10178|    840|                std::vector<const char *> ret;
10179|    840|                if (strstr(name, "u64") != nullptr) {
  ------------------
  |  Branch (10179:21): [True: 450, False: 390]
  ------------------
10180|    450|                    ret.push_back(E_GL_EXT_shader_64bit_indexing);
10181|    450|                } else {
10182|    390|                    ret.push_back(E_GL_KHR_cooperative_matrix);
10183|    390|                }
10184|    840|                return ret;
10185|    840|            };
Initialize.cpp:_ZZN7glslang9TBuiltIns16identifyBuiltInsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableEENK3$_1clEPKc:
10186|     80|            auto coopMat2NVCallback = [](const char *name) -> std::vector<const char *> {
10187|     80|                std::vector<const char *> ret;
10188|     80|                if (strstr(name, "u64") != nullptr) {
  ------------------
  |  Branch (10188:21): [True: 40, False: 40]
  ------------------
10189|     40|                    ret.push_back(E_GL_EXT_shader_64bit_indexing);
10190|     40|                } else {
10191|     40|                    ret.push_back(E_GL_NV_cooperative_matrix2);
10192|     40|                }
10193|     80|                return ret;
10194|     80|            };
Initialize.cpp:_ZZN7glslang9TBuiltIns16identifyBuiltInsEi8EProfileRKNS_10SpvVersionE11EShLanguageRNS_12TSymbolTableEENK3$_2clEPKc:
10226|  2.42k|            auto coopVecCallback = [](const char *name) -> std::vector<const char *> {
10227|  2.42k|                std::vector<const char *> ret;
10228|       |                // This looks for u64 as the last parameter (the offset)
10229|  2.42k|                if (strstr(name, "u641;") != nullptr) {
  ------------------
  |  Branch (10229:21): [True: 1.21k, False: 1.21k]
  ------------------
10230|  1.21k|                    ret.push_back(E_GL_EXT_shader_64bit_indexing);
10231|  1.21k|                } else {
10232|  1.21k|                    ret.push_back(E_GL_NV_cooperative_vector);
10233|  1.21k|                }
10234|  2.42k|                return ret;
10235|  2.42k|            };

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

_ZN7glslang20TIntermConstantUnion8traverseEPNS_16TIntermTraverserE:
   70|    504|{
   71|    504|    it->visitConstantUnion(this);
   72|    504|}
_ZN7glslang16TIntermAggregate8traverseEPNS_16TIntermTraverserE:
  155|    327|{
  156|    327|    bool visit = true;
  157|       |
  158|    327|    if (it->preVisit)
  ------------------
  |  Branch (158:9): [True: 327, False: 0]
  ------------------
  159|    327|        visit = it->visitAggregate(EvPreVisit, this);
  160|       |
  161|    327|    if (visit) {
  ------------------
  |  Branch (161:9): [True: 0, False: 327]
  ------------------
  162|      0|        it->incrementDepth(this);
  163|       |
  164|      0|        if (it->rightToLeft) {
  ------------------
  |  Branch (164:13): [True: 0, False: 0]
  ------------------
  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|      0|        } else {
  174|      0|            for (TIntermSequence::iterator sit = sequence.begin(); sit != sequence.end(); sit++) {
  ------------------
  |  Branch (174:68): [True: 0, False: 0]
  ------------------
  175|      0|                (*sit)->traverse(it);
  176|       |
  177|      0|                if (visit && it->inVisit) {
  ------------------
  |  Branch (177:21): [True: 0, False: 0]
  |  Branch (177:30): [True: 0, False: 0]
  ------------------
  178|      0|                    if (*sit != sequence.back())
  ------------------
  |  Branch (178:25): [True: 0, False: 0]
  ------------------
  179|      0|                        visit = it->visitAggregate(EvInVisit, this);
  180|      0|                }
  181|      0|            }
  182|      0|        }
  183|       |
  184|      0|        it->decrementDepth();
  185|      0|    }
  186|       |
  187|    327|    if (visit && it->postVisit)
  ------------------
  |  Branch (187:9): [True: 0, False: 327]
  |  Branch (187:18): [True: 0, False: 0]
  ------------------
  188|      0|        it->visitAggregate(EvPostVisit, this);
  189|    327|}

_ZN7glslang13TIntermediate9addSymbolExRKNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEES9_RKNS_5TTypeERKNS_16TConstUnionArrayEPNS_12TIntermTypedERKNS_10TSourceLocE:
   71|  10.8k|{
   72|  10.8k|    TIntermSymbol* node = new TIntermSymbol(id, name, getStage(), type, &mangledName);
   73|  10.8k|    node->setLoc(loc);
   74|  10.8k|    node->setConstArray(constArray);
   75|  10.8k|    node->setConstSubtree(constSubtree);
   76|       |
   77|  10.8k|    return node;
   78|  10.8k|}
_ZN7glslang13TIntermediate9addSymbolERKNS_9TVariableE:
   92|    360|{
   93|    360|    glslang::TSourceLoc loc; // just a null location
   94|    360|    loc.init();
   95|       |
   96|    360|    return addSymbol(variable, loc);
   97|    360|}
_ZN7glslang13TIntermediate9addSymbolERKNS_9TVariableERKNS_10TSourceLocE:
  100|  10.8k|{
  101|  10.8k|    return addSymbol(variable.getUniqueId(), variable.getName(), variable.getMangledName(), variable.getType(), variable.getConstArray(), variable.getConstSubtree(), loc);
  102|  10.8k|}
_ZN7glslang13TIntermediate13addBinaryMathENS_9TOperatorEPNS_12TIntermTypedES3_RKNS_10TSourceLocE:
  119|      3|{
  120|       |    // No operations work on blocks
  121|      3|    if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock ||
  ------------------
  |  Branch (121:9): [True: 0, False: 3]
  |  Branch (121:55): [True: 0, False: 3]
  ------------------
  122|      3|        left->getType().getBasicType() == EbtString || right->getType().getBasicType() == EbtString)
  ------------------
  |  Branch (122:9): [True: 0, False: 3]
  |  Branch (122:56): [True: 0, False: 3]
  ------------------
  123|      0|        return nullptr;
  124|       |
  125|       |    // Convert "reference +/- int" and "reference - reference" to integer math
  126|      3|    if (op == EOpAdd || op == EOpSub) {
  ------------------
  |  Branch (126:9): [True: 3, False: 0]
  |  Branch (126:25): [True: 0, False: 0]
  ------------------
  127|       |
  128|       |        // No addressing math on struct with unsized array.
  129|      3|        if ((left->isReference() && left->getType().getReferentType()->containsUnsizedArray()) ||
  ------------------
  |  Branch (129:14): [True: 0, False: 3]
  |  Branch (129:37): [True: 0, False: 0]
  ------------------
  130|      3|            (right->isReference() && right->getType().getReferentType()->containsUnsizedArray())) {
  ------------------
  |  Branch (130:14): [True: 0, False: 3]
  |  Branch (130:38): [True: 0, False: 0]
  ------------------
  131|      0|            return nullptr;
  132|      0|        }
  133|       |
  134|      3|        if (left->isReference() && isTypeInt(right->getBasicType())) {
  ------------------
  |  Branch (134:13): [True: 0, False: 3]
  |  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|      3|    }
  147|       |
  148|      3|    if (op == EOpAdd && right->isReference() && isTypeInt(left->getBasicType())) {
  ------------------
  |  Branch (148:9): [True: 3, False: 0]
  |  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|      3|    if (op == EOpSub && left->isReference() && right->isReference()) {
  ------------------
  |  Branch (162:9): [True: 0, False: 3]
  |  Branch (162:25): [True: 0, False: 0]
  |  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|      3|    if (left->isReference() || right->isReference())
  ------------------
  |  Branch (179:9): [True: 0, False: 3]
  |  Branch (179:32): [True: 0, False: 3]
  ------------------
  180|      0|        return nullptr;
  181|       |
  182|       |    // Try converting the children's base types to compatible types.
  183|      3|    auto children = addPairConversion(op, left, right);
  184|      3|    left = std::get<0>(children);
  185|      3|    right = std::get<1>(children);
  186|       |
  187|      3|    if (left == nullptr || right == nullptr)
  ------------------
  |  Branch (187:9): [True: 0, False: 3]
  |  Branch (187:28): [True: 0, False: 3]
  ------------------
  188|      0|        return nullptr;
  189|       |
  190|       |    // Convert the children's type shape to be compatible.
  191|      3|    addBiShapeConversion(op, left, right);
  192|      3|    if (left == nullptr || right == nullptr)
  ------------------
  |  Branch (192:9): [True: 0, False: 3]
  |  Branch (192:28): [True: 0, False: 3]
  ------------------
  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|      3|    TIntermBinary* node = addBinaryNode(op, left, right, loc);
  200|      3|    if (! promote(node))
  ------------------
  |  Branch (200:9): [True: 0, False: 3]
  ------------------
  201|      0|        return nullptr;
  202|       |
  203|      3|    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|      3|    TIntermConstantUnion *leftTempConstant = node->getLeft()->getAsConstantUnion();
  210|      3|    TIntermConstantUnion *rightTempConstant = node->getRight()->getAsConstantUnion();
  211|      3|    if (leftTempConstant && rightTempConstant) {
  ------------------
  |  Branch (211:9): [True: 3, False: 0]
  |  Branch (211:29): [True: 3, False: 0]
  ------------------
  212|      3|        TIntermTyped* folded = leftTempConstant->fold(node->getOp(), rightTempConstant);
  213|      3|        if (folded)
  ------------------
  |  Branch (213:13): [True: 3, False: 0]
  ------------------
  214|      3|            return folded;
  215|      3|    }
  216|       |
  217|       |    // If can propagate spec-constantness and if the operation is an allowed
  218|       |    // specialization-constant operation, make a spec-constant.
  219|      0|    if (specConstantPropagates(*node->getLeft(), *node->getRight()) && isSpecializationOperation(*node))
  ------------------
  |  Branch (219:9): [True: 0, False: 0]
  |  Branch (219:72): [True: 0, False: 0]
  ------------------
  220|      0|        node->getWritableType().getQualifier().makeSpecConstant();
  221|       |
  222|       |    // If must propagate nonuniform, make a nonuniform.
  223|      0|    if ((node->getLeft()->getQualifier().isNonUniform() || node->getRight()->getQualifier().isNonUniform()) &&
  ------------------
  |  Branch (223:10): [True: 0, False: 0]
  |  Branch (223:60): [True: 0, False: 0]
  ------------------
  224|      0|            isNonuniformPropagating(node->getOp()))
  ------------------
  |  Branch (224:13): [True: 0, False: 0]
  ------------------
  225|      0|        node->getWritableType().getQualifier().nonUniform = true;
  226|       |
  227|      0|    return node;
  228|      3|}
_ZNK7glslang13TIntermediate13addBinaryNodeENS_9TOperatorEPNS_12TIntermTypedES3_RKNS_10TSourceLocE:
  235|  2.44k|{
  236|       |    // build the node
  237|  2.44k|    TIntermBinary* node = new TIntermBinary(op);
  238|  2.44k|    node->setLoc(loc.line != 0 ? loc : left->getLoc());
  ------------------
  |  Branch (238:18): [True: 2.44k, False: 0]
  ------------------
  239|  2.44k|    node->setLeft(left);
  240|  2.44k|    node->setRight(right);
  241|       |
  242|  2.44k|    return node;
  243|  2.44k|}
_ZNK7glslang13TIntermediate12addUnaryNodeENS_9TOperatorEPNS_12TIntermTypedERKNS_10TSourceLocE:
  260|    664|{
  261|    664|    TIntermUnary* node = new TIntermUnary(op);
  262|    664|    node->setLoc(loc.line != 0 ? loc : child->getLoc());
  ------------------
  |  Branch (262:18): [True: 664, False: 0]
  ------------------
  263|    664|    node->setOperand(child);
  264|       |
  265|    664|    return node;
  266|    664|}
_ZNK7glslang13TIntermediate12addUnaryNodeENS_9TOperatorEPNS_12TIntermTypedERKNS_10TSourceLocERKNS_5TTypeE:
  273|    561|{
  274|    561|    TIntermUnary* node = addUnaryNode(op, child, loc);
  275|    561|    node->setType(type);
  276|    561|    return node;
  277|    561|}
_ZN7glslang13TIntermediate9addAssignENS_9TOperatorEPNS_12TIntermTypedES3_RKNS_10TSourceLocE:
  289|  1.86k|{
  290|       |    // No block assignment
  291|  1.86k|    if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock)
  ------------------
  |  Branch (291:9): [True: 0, False: 1.86k]
  |  Branch (291:55): [True: 0, False: 1.86k]
  ------------------
  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|  1.86k|    if ((op == EOpAddAssign || op == EOpSubAssign) && left->isReference()) {
  ------------------
  |  Branch (297:10): [True: 1.62k, False: 237]
  |  Branch (297:32): [True: 0, False: 237]
  |  Branch (297:55): [True: 0, False: 1.62k]
  ------------------
  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|  1.86k|    right = addConversion(op, left->getType(), right);
  319|  1.86k|    if (right == nullptr)
  ------------------
  |  Branch (319:9): [True: 0, False: 1.86k]
  ------------------
  320|      0|        return nullptr;
  321|       |
  322|       |    // convert shape
  323|  1.86k|    right = addUniShapeConversion(op, left->getType(), right);
  324|       |
  325|       |    // build the node
  326|  1.86k|    TIntermBinary* node = addBinaryNode(op, left, right, loc);
  327|       |
  328|  1.86k|    if (! promote(node))
  ------------------
  |  Branch (328:9): [True: 0, False: 1.86k]
  ------------------
  329|      0|        return nullptr;
  330|       |
  331|  1.86k|    node->updatePrecision();
  332|       |
  333|  1.86k|    return node;
  334|  1.86k|}
_ZN7glslang13TIntermediate8addIndexENS_9TOperatorEPNS_12TIntermTypedES3_RKNS_10TSourceLocE:
  345|    582|{
  346|       |    // caller should set the type
  347|    582|    return addBinaryNode(op, base, index, loc);
  348|    582|}
_ZN7glslang13TIntermediate12addUnaryMathENS_9TOperatorEPNS_12TIntermTypedERKNS_10TSourceLocE:
  357|  1.00k|{
  358|  1.00k|    if (child == nullptr)
  ------------------
  |  Branch (358:9): [True: 0, False: 1.00k]
  ------------------
  359|      0|        return nullptr;
  360|       |
  361|  1.00k|    if (child->getType().getBasicType() == EbtBlock)
  ------------------
  |  Branch (361:9): [True: 0, False: 1.00k]
  ------------------
  362|      0|        return nullptr;
  363|       |
  364|  1.00k|    switch (op) {
  365|      0|    case EOpLogicalNot:
  ------------------
  |  Branch (365:5): [True: 0, False: 1.00k]
  ------------------
  366|      0|        if (getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (366:13): [True: 0, False: 0]
  ------------------
  367|      0|            break; // HLSL can promote logical not
  368|      0|        }
  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|      0|    case EOpPostIncrement:
  ------------------
  |  Branch (375:5): [True: 0, False: 1.00k]
  ------------------
  376|      0|    case EOpPreIncrement:
  ------------------
  |  Branch (376:5): [True: 0, False: 1.00k]
  ------------------
  377|      0|    case EOpPostDecrement:
  ------------------
  |  Branch (377:5): [True: 0, False: 1.00k]
  ------------------
  378|      0|    case EOpPreDecrement:
  ------------------
  |  Branch (378:5): [True: 0, False: 1.00k]
  ------------------
  379|    103|    case EOpNegative:
  ------------------
  |  Branch (379:5): [True: 103, False: 906]
  ------------------
  380|    103|        if (child->getType().getBasicType() == EbtStruct || child->getType().isArray())
  ------------------
  |  Branch (380:13): [True: 0, False: 103]
  |  Branch (380:61): [True: 0, False: 103]
  ------------------
  381|      0|            return nullptr;
  382|    103|        break;
  383|    906|    default: break; // some compilers want this
  ------------------
  |  Branch (383:5): [True: 906, False: 103]
  ------------------
  384|  1.00k|    }
  385|       |
  386|       |    //
  387|       |    // Do we need to promote the operand?
  388|       |    //
  389|  1.00k|    TBasicType newType = EbtVoid;
  390|  1.00k|    switch (op) {
  391|      0|    case EOpConstructBool:   newType = EbtBool;   break;
  ------------------
  |  Branch (391:5): [True: 0, False: 1.00k]
  ------------------
  392|    225|    case EOpConstructFloat:  newType = EbtFloat;  break;
  ------------------
  |  Branch (392:5): [True: 225, False: 784]
  ------------------
  393|    606|    case EOpConstructInt:    newType = EbtInt;    break;
  ------------------
  |  Branch (393:5): [True: 606, False: 403]
  ------------------
  394|     75|    case EOpConstructUint:   newType = EbtUint;   break;
  ------------------
  |  Branch (394:5): [True: 75, False: 934]
  ------------------
  395|      0|    case EOpConstructInt8:   newType = EbtInt8;   break;
  ------------------
  |  Branch (395:5): [True: 0, False: 1.00k]
  ------------------
  396|      0|    case EOpConstructUint8:  newType = EbtUint8;  break;
  ------------------
  |  Branch (396:5): [True: 0, False: 1.00k]
  ------------------
  397|      0|    case EOpConstructInt16:  newType = EbtInt16;  break;
  ------------------
  |  Branch (397:5): [True: 0, False: 1.00k]
  ------------------
  398|      0|    case EOpConstructUint16: newType = EbtUint16; break;
  ------------------
  |  Branch (398:5): [True: 0, False: 1.00k]
  ------------------
  399|      0|    case EOpConstructInt64:  newType = EbtInt64;  break;
  ------------------
  |  Branch (399:5): [True: 0, False: 1.00k]
  ------------------
  400|      0|    case EOpConstructUint64: newType = EbtUint64; break;
  ------------------
  |  Branch (400:5): [True: 0, False: 1.00k]
  ------------------
  401|      0|    case EOpConstructDouble: newType = EbtDouble; break;
  ------------------
  |  Branch (401:5): [True: 0, False: 1.00k]
  ------------------
  402|      0|    case EOpConstructFloat16: newType = EbtFloat16; break;
  ------------------
  |  Branch (402:5): [True: 0, False: 1.00k]
  ------------------
  403|      0|    case EOpConstructBFloat16: newType = EbtBFloat16; break;
  ------------------
  |  Branch (403:5): [True: 0, False: 1.00k]
  ------------------
  404|      0|    case EOpConstructFloatE4M3: newType = EbtFloatE4M3; break;
  ------------------
  |  Branch (404:5): [True: 0, False: 1.00k]
  ------------------
  405|      0|    case EOpConstructFloatE5M2: newType = EbtFloatE5M2; break;
  ------------------
  |  Branch (405:5): [True: 0, False: 1.00k]
  ------------------
  406|    103|    default: break; // some compilers want this
  ------------------
  |  Branch (406:5): [True: 103, False: 906]
  ------------------
  407|  1.00k|    }
  408|       |
  409|  1.00k|    if (newType != EbtVoid) {
  ------------------
  |  Branch (409:9): [True: 906, False: 103]
  ------------------
  410|    906|        TType newTType(newType, EvqTemporary, child->getVectorSize(), child->getMatrixCols(), child->getMatrixRows(), child->isVector());
  411|    906|        if (child->getType().isLongVector()) {
  ------------------
  |  Branch (411:13): [True: 0, False: 906]
  ------------------
  412|      0|            newTType.shallowCopy(child->getType());
  413|      0|            newTType.setBasicType(newType);
  414|      0|            newTType.makeTemporary();
  415|      0|            newTType.getQualifier().clear();
  416|      0|        }
  417|       |
  418|    906|        child = addConversion(op, newTType, child);
  419|    906|        if (child == nullptr)
  ------------------
  |  Branch (419:13): [True: 0, False: 906]
  ------------------
  420|      0|            return nullptr;
  421|    906|    }
  422|       |
  423|       |    //
  424|       |    // For constructors, we are now done, it was all in the conversion.
  425|       |    // TODO: but, did this bypass constant folding?
  426|       |    //
  427|  1.00k|    switch (op) {
  428|      0|        case EOpConstructInt8:
  ------------------
  |  Branch (428:9): [True: 0, False: 1.00k]
  ------------------
  429|      0|        case EOpConstructUint8:
  ------------------
  |  Branch (429:9): [True: 0, False: 1.00k]
  ------------------
  430|      0|        case EOpConstructInt16:
  ------------------
  |  Branch (430:9): [True: 0, False: 1.00k]
  ------------------
  431|      0|        case EOpConstructUint16:
  ------------------
  |  Branch (431:9): [True: 0, False: 1.00k]
  ------------------
  432|    606|        case EOpConstructInt:
  ------------------
  |  Branch (432:9): [True: 606, False: 403]
  ------------------
  433|    681|        case EOpConstructUint:
  ------------------
  |  Branch (433:9): [True: 75, False: 934]
  ------------------
  434|    681|        case EOpConstructInt64:
  ------------------
  |  Branch (434:9): [True: 0, False: 1.00k]
  ------------------
  435|    681|        case EOpConstructUint64:
  ------------------
  |  Branch (435:9): [True: 0, False: 1.00k]
  ------------------
  436|    681|        case EOpConstructBool:
  ------------------
  |  Branch (436:9): [True: 0, False: 1.00k]
  ------------------
  437|    906|        case EOpConstructFloat:
  ------------------
  |  Branch (437:9): [True: 225, False: 784]
  ------------------
  438|    906|        case EOpConstructDouble:
  ------------------
  |  Branch (438:9): [True: 0, False: 1.00k]
  ------------------
  439|    906|        case EOpConstructFloat16:
  ------------------
  |  Branch (439:9): [True: 0, False: 1.00k]
  ------------------
  440|    906|        case EOpConstructBFloat16:
  ------------------
  |  Branch (440:9): [True: 0, False: 1.00k]
  ------------------
  441|    906|        case EOpConstructFloatE5M2:
  ------------------
  |  Branch (441:9): [True: 0, False: 1.00k]
  ------------------
  442|    906|        case EOpConstructFloatE4M3: {
  ------------------
  |  Branch (442:9): [True: 0, False: 1.00k]
  ------------------
  443|    906|            TIntermUnary* unary_node = child->getAsUnaryNode();
  444|    906|            if (unary_node != nullptr)
  ------------------
  |  Branch (444:17): [True: 435, False: 471]
  ------------------
  445|    435|                unary_node->updatePrecision();
  446|    906|            return child;
  447|    906|        }
  448|    103|        default: break; // some compilers want this
  ------------------
  |  Branch (448:9): [True: 103, False: 906]
  ------------------
  449|  1.00k|    }
  450|       |
  451|       |    //
  452|       |    // Make a new node for the operator.
  453|       |    //
  454|    103|    TIntermUnary* node = addUnaryNode(op, child, loc);
  455|       |
  456|    103|    if (! promote(node))
  ------------------
  |  Branch (456:9): [True: 0, False: 103]
  ------------------
  457|      0|        return nullptr;
  458|       |
  459|    103|    node->updatePrecision();
  460|       |
  461|       |    // If it's a (non-specialization) constant, it must be folded.
  462|    103|    if (node->getOperand()->getAsConstantUnion())
  ------------------
  |  Branch (462:9): [True: 103, False: 0]
  ------------------
  463|    103|        return node->getOperand()->getAsConstantUnion()->fold(op, node->getType());
  464|       |
  465|       |    // If it's a specialization constant, the result is too,
  466|       |    // if the operation is allowed for specialization constants.
  467|      0|    if (node->getOperand()->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*node))
  ------------------
  |  Branch (467:9): [True: 0, False: 0]
  |  Branch (467:74): [True: 0, False: 0]
  ------------------
  468|      0|        node->getWritableType().getQualifier().makeSpecConstant();
  469|       |
  470|       |    // If must propagate nonuniform, make a nonuniform.
  471|      0|    if (node->getOperand()->getQualifier().isNonUniform() && isNonuniformPropagating(node->getOp()))
  ------------------
  |  Branch (471:9): [True: 0, False: 0]
  |  Branch (471:62): [True: 0, False: 0]
  ------------------
  472|      0|        node->getWritableType().getQualifier().nonUniform = true;
  473|       |
  474|      0|    return node;
  475|    103|}
_ZN7glslang13TIntermediate22addBuiltInFunctionCallERKNS_10TSourceLocENS_9TOperatorEbP11TIntermNodeRKNS_5TTypeE:
  479|  1.84k|{
  480|  1.84k|    if (unary) {
  ------------------
  |  Branch (480:9): [True: 120, False: 1.72k]
  ------------------
  481|       |        //
  482|       |        // Treat it like a unary operator.
  483|       |        // addUnaryMath() should get the type correct on its own;
  484|       |        // including constness (which would differ from the prototype).
  485|       |        //
  486|    120|        TIntermTyped* child = childNode->getAsTyped();
  487|    120|        if (child == nullptr)
  ------------------
  |  Branch (487:13): [True: 0, False: 120]
  ------------------
  488|      0|            return nullptr;
  489|       |
  490|    120|        if (child->getAsConstantUnion()) {
  ------------------
  |  Branch (490:13): [True: 0, False: 120]
  ------------------
  491|      0|            TIntermTyped* folded = child->getAsConstantUnion()->fold(op, returnType);
  492|      0|            if (folded)
  ------------------
  |  Branch (492:17): [True: 0, False: 0]
  ------------------
  493|      0|                return folded;
  494|      0|        }
  495|       |
  496|    120|        return addUnaryNode(op, child, child->getLoc(), returnType);
  497|  1.72k|    } else {
  498|       |        // setAggregateOperater() calls fold() for constant folding
  499|  1.72k|        TIntermTyped* node = setAggregateOperator(childNode, op, returnType, loc);
  500|       |
  501|  1.72k|        return node;
  502|  1.72k|    }
  503|  1.84k|}
_ZN7glslang13TIntermediate20setAggregateOperatorEP11TIntermNodeNS_9TOperatorERKNS_5TTypeERKNS_10TSourceLocE:
  517|  2.73k|{
  518|  2.73k|    TIntermAggregate* aggNode;
  519|       |
  520|       |    //
  521|       |    // Make sure we have an aggregate.  If not turn it into one.
  522|       |    //
  523|  2.73k|    if (node != nullptr) {
  ------------------
  |  Branch (523:9): [True: 2.59k, False: 144]
  ------------------
  524|  2.59k|        aggNode = node->getAsAggregate();
  525|  2.59k|        if (aggNode == nullptr || aggNode->getOp() != EOpNull) {
  ------------------
  |  Branch (525:13): [True: 240, False: 2.35k]
  |  Branch (525:35): [True: 3, False: 2.34k]
  ------------------
  526|       |            //
  527|       |            // Make an aggregate containing this node.
  528|       |            //
  529|    243|            aggNode = new TIntermAggregate();
  530|    243|            aggNode->getSequence().push_back(node);
  531|    243|        }
  532|  2.59k|    } else
  533|    144|        aggNode = new TIntermAggregate();
  534|       |
  535|       |    //
  536|       |    // Set the operator.
  537|       |    //
  538|  2.73k|    aggNode->setOperator(op);
  539|  2.73k|    if (loc.line != 0 || node != nullptr)
  ------------------
  |  Branch (539:9): [True: 2.73k, False: 0]
  |  Branch (539:26): [True: 0, False: 0]
  ------------------
  540|  2.73k|        aggNode->setLoc(loc.line != 0 ? loc : node->getLoc());
  ------------------
  |  Branch (540:25): [True: 2.73k, False: 0]
  ------------------
  541|       |
  542|  2.73k|    aggNode->setType(type);
  543|       |
  544|  2.73k|    return fold(aggNode);
  545|  2.73k|}
_ZNK7glslang13TIntermediate19isConversionAllowedENS_9TOperatorEPNS_12TIntermTypedE:
  548|  6.96k|{
  549|       |    //
  550|       |    // Does the base type even allow the operation?
  551|       |    //
  552|  6.96k|    switch (node->getBasicType()) {
  553|      0|    case EbtVoid:
  ------------------
  |  Branch (553:5): [True: 0, False: 6.96k]
  ------------------
  554|      0|        return false;
  555|      0|    case EbtAtomicUint:
  ------------------
  |  Branch (555:5): [True: 0, False: 6.96k]
  ------------------
  556|      0|    case EbtSampler:
  ------------------
  |  Branch (556:5): [True: 0, False: 6.96k]
  ------------------
  557|      0|    case EbtAccStruct:
  ------------------
  |  Branch (557:5): [True: 0, False: 6.96k]
  ------------------
  558|       |        // opaque types can be passed to functions
  559|      0|        if (op == EOpFunction)
  ------------------
  |  Branch (559:13): [True: 0, False: 0]
  ------------------
  560|      0|            break;
  561|       |
  562|       |        // HLSL can assign samplers directly (no constructor)
  563|      0|        if (getSource() == EShSourceHlsl && node->getBasicType() == EbtSampler)
  ------------------
  |  Branch (563:13): [True: 0, False: 0]
  |  Branch (563:45): [True: 0, False: 0]
  ------------------
  564|      0|            break;
  565|       |
  566|       |        // samplers can get assigned via a sampler constructor
  567|       |        // (well, not yet, but code in the rest of this function is ready for it)
  568|      0|        if (node->getBasicType() == EbtSampler && op == EOpAssign &&
  ------------------
  |  Branch (568:13): [True: 0, False: 0]
  |  Branch (568:51): [True: 0, False: 0]
  ------------------
  569|      0|            node->getAsOperator() != nullptr && node->getAsOperator()->getOp() == EOpConstructTextureSampler)
  ------------------
  |  Branch (569:13): [True: 0, False: 0]
  |  Branch (569:49): [True: 0, False: 0]
  ------------------
  570|      0|            break;
  571|       |
  572|       |        // otherwise, opaque types can't even be operated on, let alone converted
  573|      0|        return false;
  574|  6.96k|    default:
  ------------------
  |  Branch (574:5): [True: 6.96k, False: 0]
  ------------------
  575|  6.96k|        break;
  576|  6.96k|    }
  577|       |
  578|  6.96k|    return true;
  579|  6.96k|}
_ZNK7glslang13TIntermediate14buildConvertOpENS_10TBasicTypeES1_RNS_9TOperatorE:
  582|    441|{
  583|       |    // (bfloat16_t,fp8) <-> bool not supported
  584|    441|    if (((src == EbtBFloat16 || src == EbtFloatE5M2 || src == EbtFloatE4M3) && dst == EbtBool) ||
  ------------------
  |  Branch (584:11): [True: 0, False: 441]
  |  Branch (584:33): [True: 0, False: 441]
  |  Branch (584:56): [True: 0, False: 441]
  |  Branch (584:80): [True: 0, False: 0]
  ------------------
  585|    441|        ((dst == EbtBFloat16 || dst == EbtFloatE5M2 || dst == EbtFloatE4M3) && src == EbtBool)) {
  ------------------
  |  Branch (585:11): [True: 0, False: 441]
  |  Branch (585:33): [True: 0, False: 441]
  |  Branch (585:56): [True: 0, False: 441]
  |  Branch (585:80): [True: 0, False: 0]
  ------------------
  586|      0|        return false;
  587|      0|    }
  588|       |
  589|    441|    if ((isTypeInt(dst) || isTypeFloat(dst) || dst == EbtBool) &&
  ------------------
  |  Branch (589:10): [True: 432, False: 9]
  |  Branch (589:28): [True: 9, False: 0]
  |  Branch (589:48): [True: 0, False: 0]
  ------------------
  590|    441|        (isTypeInt(src) || isTypeFloat(src) || src == EbtBool)) {
  ------------------
  |  Branch (590:10): [True: 9, False: 432]
  |  Branch (590:28): [True: 432, False: 0]
  |  Branch (590:48): [True: 0, False: 0]
  ------------------
  591|    441|        newOp = EOpConvNumeric;
  592|    441|        return true;
  593|    441|    }
  594|      0|    return false;
  595|    441|}
_ZNK7glslang13TIntermediate16createConversionENS_10TBasicTypeEPNS_12TIntermTypedE:
  601|    441|{
  602|       |    //
  603|       |    // Add a new newNode for the conversion.
  604|       |    //
  605|       |
  606|    441|    bool convertToIntTypes = (convertTo == EbtInt8  || convertTo == EbtUint8  ||
  ------------------
  |  Branch (606:31): [True: 0, False: 441]
  |  Branch (606:56): [True: 0, False: 441]
  ------------------
  607|    441|                              convertTo == EbtInt16 || convertTo == EbtUint16 ||
  ------------------
  |  Branch (607:31): [True: 0, False: 441]
  |  Branch (607:56): [True: 0, False: 441]
  ------------------
  608|    441|                              convertTo == EbtInt   || convertTo == EbtUint   ||
  ------------------
  |  Branch (608:31): [True: 432, False: 9]
  |  Branch (608:56): [True: 0, False: 9]
  ------------------
  609|      9|                              convertTo == EbtInt64 || convertTo == EbtUint64);
  ------------------
  |  Branch (609:31): [True: 0, False: 9]
  |  Branch (609:56): [True: 0, False: 9]
  ------------------
  610|       |
  611|    441|    bool convertFromIntTypes = (node->getBasicType() == EbtInt8  || node->getBasicType() == EbtUint8  ||
  ------------------
  |  Branch (611:33): [True: 0, False: 441]
  |  Branch (611:69): [True: 0, False: 441]
  ------------------
  612|    441|                                node->getBasicType() == EbtInt16 || node->getBasicType() == EbtUint16 ||
  ------------------
  |  Branch (612:33): [True: 0, False: 441]
  |  Branch (612:69): [True: 0, False: 441]
  ------------------
  613|    441|                                node->getBasicType() == EbtInt   || node->getBasicType() == EbtUint   ||
  ------------------
  |  Branch (613:33): [True: 9, False: 432]
  |  Branch (613:69): [True: 0, False: 432]
  ------------------
  614|    432|                                node->getBasicType() == EbtInt64 || node->getBasicType() == EbtUint64);
  ------------------
  |  Branch (614:33): [True: 0, False: 432]
  |  Branch (614:69): [True: 0, False: 432]
  ------------------
  615|       |
  616|    441|    bool convertToFloatTypes = (convertTo == EbtFloat16 || convertTo == EbtBFloat16 || convertTo == EbtFloat || convertTo == EbtDouble ||
  ------------------
  |  Branch (616:33): [True: 0, False: 441]
  |  Branch (616:60): [True: 0, False: 441]
  |  Branch (616:88): [True: 9, False: 432]
  |  Branch (616:113): [True: 0, False: 432]
  ------------------
  617|    432|                                convertTo == EbtFloatE5M2 || convertTo == EbtFloatE4M3);
  ------------------
  |  Branch (617:33): [True: 0, False: 432]
  |  Branch (617:62): [True: 0, False: 432]
  ------------------
  618|       |
  619|    441|    bool convertFromFloatTypes = (node->getBasicType() == EbtFloat16 ||
  ------------------
  |  Branch (619:35): [True: 0, False: 441]
  ------------------
  620|    441|                                  node->getBasicType() == EbtBFloat16 ||
  ------------------
  |  Branch (620:35): [True: 0, False: 441]
  ------------------
  621|    441|                                  node->getBasicType() == EbtFloat ||
  ------------------
  |  Branch (621:35): [True: 432, False: 9]
  ------------------
  622|      9|                                  node->getBasicType() == EbtDouble ||
  ------------------
  |  Branch (622:35): [True: 0, False: 9]
  ------------------
  623|      9|                                  node->getBasicType() == EbtFloatE5M2 ||
  ------------------
  |  Branch (623:35): [True: 0, False: 9]
  ------------------
  624|      9|                                  node->getBasicType() == EbtFloatE4M3);
  ------------------
  |  Branch (624:35): [True: 0, False: 9]
  ------------------
  625|       |
  626|    441|    if (((convertTo == EbtInt8 || convertTo == EbtUint8) && ! convertFromIntTypes) ||
  ------------------
  |  Branch (626:11): [True: 0, False: 441]
  |  Branch (626:35): [True: 0, False: 441]
  |  Branch (626:61): [True: 0, False: 0]
  ------------------
  627|    441|        ((node->getBasicType() == EbtInt8 || node->getBasicType() == EbtUint8) && ! convertToIntTypes)) {
  ------------------
  |  Branch (627:11): [True: 0, False: 441]
  |  Branch (627:46): [True: 0, False: 441]
  |  Branch (627:83): [True: 0, False: 0]
  ------------------
  628|      0|        if (! getArithemeticInt8Enabled()) {
  ------------------
  |  Branch (628:13): [True: 0, False: 0]
  ------------------
  629|      0|            return nullptr;
  630|      0|        }
  631|      0|    }
  632|       |
  633|    441|    if (((convertTo == EbtInt16 || convertTo == EbtUint16) && ! convertFromIntTypes) ||
  ------------------
  |  Branch (633:11): [True: 0, False: 441]
  |  Branch (633:36): [True: 0, False: 441]
  |  Branch (633:63): [True: 0, False: 0]
  ------------------
  634|    441|        ((node->getBasicType() == EbtInt16 || node->getBasicType() == EbtUint16) && ! convertToIntTypes)) {
  ------------------
  |  Branch (634:11): [True: 0, False: 441]
  |  Branch (634:47): [True: 0, False: 441]
  |  Branch (634:85): [True: 0, False: 0]
  ------------------
  635|      0|        if (! getArithemeticInt16Enabled()) {
  ------------------
  |  Branch (635:13): [True: 0, False: 0]
  ------------------
  636|      0|            return nullptr;
  637|      0|        }
  638|      0|    }
  639|       |
  640|    441|    if ((convertTo == EbtFloat16 && ! convertFromFloatTypes) ||
  ------------------
  |  Branch (640:10): [True: 0, False: 441]
  |  Branch (640:37): [True: 0, False: 0]
  ------------------
  641|    441|        (node->getBasicType() == EbtFloat16 && ! convertToFloatTypes)) {
  ------------------
  |  Branch (641:10): [True: 0, False: 441]
  |  Branch (641:48): [True: 0, False: 0]
  ------------------
  642|      0|        if (! getArithemeticFloat16Enabled()) {
  ------------------
  |  Branch (642:13): [True: 0, False: 0]
  ------------------
  643|      0|            return nullptr;
  644|      0|        }
  645|      0|    }
  646|       |
  647|    441|    TIntermUnary* newNode = nullptr;
  648|    441|    TOperator newOp = EOpNull;
  649|    441|    if (!buildConvertOp(convertTo, node->getBasicType(), newOp)) {
  ------------------
  |  Branch (649:9): [True: 0, False: 441]
  ------------------
  650|      0|        return nullptr;
  651|      0|    }
  652|       |
  653|    441|    TType newType(convertTo, EvqTemporary, node->getVectorSize(), node->getMatrixCols(), node->getMatrixRows());
  654|    441|    if (node->getType().isLongVector()) {
  ------------------
  |  Branch (654:9): [True: 0, False: 441]
  ------------------
  655|      0|        newType.shallowCopy(node->getType());
  656|      0|        newType.setBasicType(convertTo);
  657|      0|        newType.makeTemporary();
  658|      0|        newType.getQualifier().clear();
  659|      0|    }
  660|    441|    newNode = addUnaryNode(newOp, node, node->getLoc(), newType);
  661|       |
  662|    441|    if (node->getAsConstantUnion()) {
  ------------------
  |  Branch (662:9): [True: 0, False: 441]
  ------------------
  663|       |        // 8/16-bit storage extensions don't support 8/16-bit constants, so don't fold conversions
  664|       |        // to those types
  665|      0|        if ((getArithemeticInt8Enabled() || !(convertTo == EbtInt8 || convertTo == EbtUint8)) &&
  ------------------
  |  Branch (665:14): [True: 0, False: 0]
  |  Branch (665:47): [True: 0, False: 0]
  |  Branch (665:71): [True: 0, False: 0]
  ------------------
  666|      0|            (getArithemeticInt16Enabled() || !(convertTo == EbtInt16 || convertTo == EbtUint16)) &&
  ------------------
  |  Branch (666:14): [True: 0, False: 0]
  |  Branch (666:48): [True: 0, False: 0]
  |  Branch (666:73): [True: 0, False: 0]
  ------------------
  667|      0|            (getArithemeticFloat16Enabled() || !(convertTo == EbtFloat16)))
  ------------------
  |  Branch (667:14): [True: 0, False: 0]
  |  Branch (667:48): [True: 0, False: 0]
  ------------------
  668|      0|        {
  669|      0|            TIntermTyped* folded = node->getAsConstantUnion()->fold(newOp, newType);
  670|      0|            if (folded)
  ------------------
  |  Branch (670:17): [True: 0, False: 0]
  ------------------
  671|      0|                return folded;
  672|      0|        }
  673|      0|    }
  674|       |
  675|       |    // Propagate specialization-constant-ness, if allowed
  676|    441|    if (node->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*newNode))
  ------------------
  |  Branch (676:9): [True: 0, False: 441]
  |  Branch (676:60): [True: 0, False: 0]
  ------------------
  677|      0|        newNode->getWritableType().getQualifier().makeSpecConstant();
  678|       |
  679|    441|    return newNode;
  680|    441|}
_ZN7glslang13TIntermediate17addPairConversionENS_9TOperatorEPNS_12TIntermTypedES3_:
  701|      3|{
  702|      3|    if (!isConversionAllowed(op, node0) || !isConversionAllowed(op, node1))
  ------------------
  |  Branch (702:9): [True: 0, False: 3]
  |  Branch (702:44): [True: 0, False: 3]
  ------------------
  703|      0|        return std::make_tuple(nullptr, nullptr);
  704|       |
  705|      3|    if (node0->getType() != node1->getType()) {
  ------------------
  |  Branch (705:9): [True: 0, False: 3]
  ------------------
  706|       |        // If differing structure, then no conversions.
  707|      0|        if (node0->isStruct() || node1->isStruct())
  ------------------
  |  Branch (707:13): [True: 0, False: 0]
  |  Branch (707:34): [True: 0, False: 0]
  ------------------
  708|      0|            return std::make_tuple(nullptr, nullptr);
  709|       |
  710|       |        // If differing arrays, then no conversions.
  711|      0|        if (node0->getType().isArray() || node1->getType().isArray())
  ------------------
  |  Branch (711:13): [True: 0, False: 0]
  |  Branch (711:43): [True: 0, False: 0]
  ------------------
  712|      0|            return std::make_tuple(nullptr, nullptr);
  713|       |
  714|       |        // No implicit conversions for operations involving cooperative matrices
  715|      0|        if (node0->getType().isCoopMat() || node1->getType().isCoopMat())
  ------------------
  |  Branch (715:13): [True: 0, False: 0]
  |  Branch (715:45): [True: 0, False: 0]
  ------------------
  716|      0|            return std::make_tuple(node0, node1);
  717|      0|    }
  718|       |
  719|      3|    auto promoteTo = std::make_tuple(EbtNumTypes, EbtNumTypes);
  720|       |
  721|      3|    switch (op) {
  722|       |    //
  723|       |    // List all the binary ops that can implicitly convert one operand to the other's type;
  724|       |    // This implements the 'policy' for implicit type conversion.
  725|       |    //
  726|      0|    case EOpLessThan:
  ------------------
  |  Branch (726:5): [True: 0, False: 3]
  ------------------
  727|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (727:5): [True: 0, False: 3]
  ------------------
  728|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (728:5): [True: 0, False: 3]
  ------------------
  729|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (729:5): [True: 0, False: 3]
  ------------------
  730|      0|    case EOpEqual:
  ------------------
  |  Branch (730:5): [True: 0, False: 3]
  ------------------
  731|      0|    case EOpNotEqual:
  ------------------
  |  Branch (731:5): [True: 0, False: 3]
  ------------------
  732|       |
  733|      3|    case EOpAdd:
  ------------------
  |  Branch (733:5): [True: 3, False: 0]
  ------------------
  734|      3|    case EOpSub:
  ------------------
  |  Branch (734:5): [True: 0, False: 3]
  ------------------
  735|      3|    case EOpMul:
  ------------------
  |  Branch (735:5): [True: 0, False: 3]
  ------------------
  736|      3|    case EOpDiv:
  ------------------
  |  Branch (736:5): [True: 0, False: 3]
  ------------------
  737|      3|    case EOpMod:
  ------------------
  |  Branch (737:5): [True: 0, False: 3]
  ------------------
  738|       |
  739|      3|    case EOpVectorTimesScalar:
  ------------------
  |  Branch (739:5): [True: 0, False: 3]
  ------------------
  740|      3|    case EOpVectorTimesMatrix:
  ------------------
  |  Branch (740:5): [True: 0, False: 3]
  ------------------
  741|      3|    case EOpMatrixTimesVector:
  ------------------
  |  Branch (741:5): [True: 0, False: 3]
  ------------------
  742|      3|    case EOpMatrixTimesScalar:
  ------------------
  |  Branch (742:5): [True: 0, False: 3]
  ------------------
  743|       |
  744|      3|    case EOpAnd:
  ------------------
  |  Branch (744:5): [True: 0, False: 3]
  ------------------
  745|      3|    case EOpInclusiveOr:
  ------------------
  |  Branch (745:5): [True: 0, False: 3]
  ------------------
  746|      3|    case EOpExclusiveOr:
  ------------------
  |  Branch (746:5): [True: 0, False: 3]
  ------------------
  747|       |
  748|      3|    case EOpSequence:          // used by ?:
  ------------------
  |  Branch (748:5): [True: 0, False: 3]
  ------------------
  749|       |
  750|      3|        if (node0->getBasicType() == node1->getBasicType())
  ------------------
  |  Branch (750:13): [True: 3, False: 0]
  ------------------
  751|      3|            return std::make_tuple(node0, node1);
  752|       |
  753|      0|        promoteTo = getConversionDestinationType(node0->getBasicType(), node1->getBasicType(), op);
  754|      0|        if (std::get<0>(promoteTo) == EbtNumTypes || std::get<1>(promoteTo) == EbtNumTypes)
  ------------------
  |  Branch (754:13): [True: 0, False: 0]
  |  Branch (754:54): [True: 0, False: 0]
  ------------------
  755|      0|            return std::make_tuple(nullptr, nullptr);
  756|       |
  757|      0|        break;
  758|       |
  759|      0|    case EOpLogicalAnd:
  ------------------
  |  Branch (759:5): [True: 0, False: 3]
  ------------------
  760|      0|    case EOpLogicalOr:
  ------------------
  |  Branch (760:5): [True: 0, False: 3]
  ------------------
  761|      0|    case EOpLogicalXor:
  ------------------
  |  Branch (761:5): [True: 0, False: 3]
  ------------------
  762|      0|        if (getSource() == EShSourceHlsl)
  ------------------
  |  Branch (762:13): [True: 0, False: 0]
  ------------------
  763|      0|            promoteTo = std::make_tuple(EbtBool, EbtBool);
  764|      0|        else
  765|      0|            return std::make_tuple(node0, node1);
  766|      0|        break;
  767|       |
  768|       |    // There are no conversions needed for GLSL; the shift amount just needs to be an
  769|       |    // integer type, as does the base.
  770|       |    // HLSL can promote bools to ints to make this work.
  771|      0|    case EOpLeftShift:
  ------------------
  |  Branch (771:5): [True: 0, False: 3]
  ------------------
  772|      0|    case EOpRightShift:
  ------------------
  |  Branch (772:5): [True: 0, False: 3]
  ------------------
  773|      0|        if (getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (773:13): [True: 0, False: 0]
  ------------------
  774|      0|            TBasicType node0BasicType = node0->getBasicType();
  775|      0|            if (node0BasicType == EbtBool)
  ------------------
  |  Branch (775:17): [True: 0, False: 0]
  ------------------
  776|      0|                node0BasicType = EbtInt;
  777|      0|            if (node1->getBasicType() == EbtBool)
  ------------------
  |  Branch (777:17): [True: 0, False: 0]
  ------------------
  778|      0|                promoteTo = std::make_tuple(node0BasicType, EbtInt);
  779|      0|            else
  780|      0|                promoteTo = std::make_tuple(node0BasicType, node1->getBasicType());
  781|      0|        } else {
  782|      0|            if (isTypeInt(node0->getBasicType()) && isTypeInt(node1->getBasicType()))
  ------------------
  |  Branch (782:17): [True: 0, False: 0]
  |  Branch (782:53): [True: 0, False: 0]
  ------------------
  783|      0|                return std::make_tuple(node0, node1);
  784|      0|            else
  785|      0|                return std::make_tuple(nullptr, nullptr);
  786|      0|        }
  787|      0|        break;
  788|       |
  789|      0|    default:
  ------------------
  |  Branch (789:5): [True: 0, False: 3]
  ------------------
  790|      0|        if (node0->getType() == node1->getType())
  ------------------
  |  Branch (790:13): [True: 0, False: 0]
  ------------------
  791|      0|            return std::make_tuple(node0, node1);
  792|       |
  793|      0|        return std::make_tuple(nullptr, nullptr);
  794|      3|    }
  795|       |
  796|      0|    TIntermTyped* newNode0;
  797|      0|    TIntermTyped* newNode1;
  798|       |
  799|      0|    if (std::get<0>(promoteTo) != node0->getType().getBasicType()) {
  ------------------
  |  Branch (799:9): [True: 0, False: 0]
  ------------------
  800|      0|        if (node0->getAsConstantUnion())
  ------------------
  |  Branch (800:13): [True: 0, False: 0]
  ------------------
  801|      0|            newNode0 = promoteConstantUnion(std::get<0>(promoteTo), node0->getAsConstantUnion());
  802|      0|        else
  803|      0|            newNode0 = createConversion(std::get<0>(promoteTo), node0);
  804|      0|    } else
  805|      0|        newNode0 = node0;
  806|       |
  807|      0|    if (std::get<1>(promoteTo) != node1->getType().getBasicType()) {
  ------------------
  |  Branch (807:9): [True: 0, False: 0]
  ------------------
  808|      0|        if (node1->getAsConstantUnion())
  ------------------
  |  Branch (808:13): [True: 0, False: 0]
  ------------------
  809|      0|            newNode1 = promoteConstantUnion(std::get<1>(promoteTo), node1->getAsConstantUnion());
  810|      0|        else
  811|      0|            newNode1 = createConversion(std::get<1>(promoteTo), node1);
  812|      0|    } else
  813|      0|        newNode1 = node1;
  814|       |
  815|      0|    return std::make_tuple(newNode0, newNode1);
  816|      3|}
_ZN7glslang13TIntermediate13addConversionENS_9TOperatorERKNS_5TTypeEPNS_12TIntermTypedE:
  834|  6.96k|{
  835|  6.96k|    if (!isConversionAllowed(op, node))
  ------------------
  |  Branch (835:9): [True: 0, False: 6.96k]
  ------------------
  836|      0|        return nullptr;
  837|       |
  838|       |    // Otherwise, if types are identical, no problem
  839|  6.96k|    if (type == node->getType())
  ------------------
  |  Branch (839:9): [True: 6.33k, False: 633]
  ------------------
  840|  6.33k|        return node;
  841|       |
  842|       |    // If one's a structure, then no conversions.
  843|    633|    if (type.isStruct() || node->isStruct())
  ------------------
  |  Branch (843:9): [True: 0, False: 633]
  |  Branch (843:28): [True: 0, False: 633]
  ------------------
  844|      0|        return nullptr;
  845|       |
  846|       |    // If one's an array, then no conversions.
  847|    633|    if (type.isArray() || node->getType().isArray())
  ------------------
  |  Branch (847:9): [True: 0, False: 633]
  |  Branch (847:27): [True: 0, False: 633]
  ------------------
  848|      0|        return nullptr;
  849|       |
  850|       |    // Reject implicit conversions to cooperative matrix types
  851|    633|    if (node->getType().isCoopMat() &&
  ------------------
  |  Branch (851:9): [True: 0, False: 633]
  ------------------
  852|      0|        op != EOpConstructCooperativeMatrixNV &&
  ------------------
  |  Branch (852:9): [True: 0, False: 0]
  ------------------
  853|      0|        op != EOpConstructCooperativeMatrixKHR &&
  ------------------
  |  Branch (853:9): [True: 0, False: 0]
  ------------------
  854|      0|        op != glslang::EOpCompositeConstructCoopMatQCOM)
  ------------------
  |  Branch (854:9): [True: 0, False: 0]
  ------------------
  855|      0|        return nullptr;
  856|       |
  857|    633|    if (node->getType().isTensorLayoutNV() ||
  ------------------
  |  Branch (857:9): [True: 0, False: 633]
  ------------------
  858|    633|        node->getType().isTensorViewNV())
  ------------------
  |  Branch (858:9): [True: 0, False: 633]
  ------------------
  859|      0|        return nullptr;
  860|       |
  861|       |    // Reject implicit conversions to cooperative vector types
  862|    633|    if (node->getType().isCoopVecNV() &&
  ------------------
  |  Branch (862:9): [True: 0, False: 633]
  ------------------
  863|      0|        op != EOpConstructCooperativeVectorNV)
  ------------------
  |  Branch (863:9): [True: 0, False: 0]
  ------------------
  864|      0|        return nullptr;
  865|       |
  866|       |    // Note: callers are responsible for other aspects of shape,
  867|       |    // like vector and matrix sizes.
  868|       |
  869|    633|    switch (op) {
  870|       |    //
  871|       |    // Explicit conversions (unary operations)
  872|       |    //
  873|      0|    case EOpConstructBool:
  ------------------
  |  Branch (873:5): [True: 0, False: 633]
  ------------------
  874|      3|    case EOpConstructFloat:
  ------------------
  |  Branch (874:5): [True: 3, False: 630]
  ------------------
  875|    435|    case EOpConstructInt:
  ------------------
  |  Branch (875:5): [True: 432, False: 201]
  ------------------
  876|    510|    case EOpConstructUint:
  ------------------
  |  Branch (876:5): [True: 75, False: 558]
  ------------------
  877|    510|    case EOpConstructDouble:
  ------------------
  |  Branch (877:5): [True: 0, False: 633]
  ------------------
  878|    510|    case EOpConstructFloat16:
  ------------------
  |  Branch (878:5): [True: 0, False: 633]
  ------------------
  879|    510|    case EOpConstructBFloat16:
  ------------------
  |  Branch (879:5): [True: 0, False: 633]
  ------------------
  880|    510|    case EOpConstructFloatE5M2:
  ------------------
  |  Branch (880:5): [True: 0, False: 633]
  ------------------
  881|    510|    case EOpConstructFloatE4M3:
  ------------------
  |  Branch (881:5): [True: 0, False: 633]
  ------------------
  882|    510|    case EOpConstructInt8:
  ------------------
  |  Branch (882:5): [True: 0, False: 633]
  ------------------
  883|    510|    case EOpConstructUint8:
  ------------------
  |  Branch (883:5): [True: 0, False: 633]
  ------------------
  884|    510|    case EOpConstructInt16:
  ------------------
  |  Branch (884:5): [True: 0, False: 633]
  ------------------
  885|    510|    case EOpConstructUint16:
  ------------------
  |  Branch (885:5): [True: 0, False: 633]
  ------------------
  886|    510|    case EOpConstructInt64:
  ------------------
  |  Branch (886:5): [True: 0, False: 633]
  ------------------
  887|    510|    case EOpConstructUint64:
  ------------------
  |  Branch (887:5): [True: 0, False: 633]
  ------------------
  888|    510|    case EOpConstructSaturated:
  ------------------
  |  Branch (888:5): [True: 0, False: 633]
  ------------------
  889|    510|        break;
  890|       |
  891|       |    //
  892|       |    // Implicit conversions
  893|       |    //
  894|      0|    case EOpLogicalNot:
  ------------------
  |  Branch (894:5): [True: 0, False: 633]
  ------------------
  895|       |
  896|      0|    case EOpFunctionCall:
  ------------------
  |  Branch (896:5): [True: 0, False: 633]
  ------------------
  897|       |
  898|      3|    case EOpReturn:
  ------------------
  |  Branch (898:5): [True: 3, False: 630]
  ------------------
  899|      3|    case EOpAssign:
  ------------------
  |  Branch (899:5): [True: 0, False: 633]
  ------------------
  900|    123|    case EOpAddAssign:
  ------------------
  |  Branch (900:5): [True: 120, False: 513]
  ------------------
  901|    123|    case EOpSubAssign:
  ------------------
  |  Branch (901:5): [True: 0, False: 633]
  ------------------
  902|    123|    case EOpMulAssign:
  ------------------
  |  Branch (902:5): [True: 0, False: 633]
  ------------------
  903|    123|    case EOpVectorTimesScalarAssign:
  ------------------
  |  Branch (903:5): [True: 0, False: 633]
  ------------------
  904|    123|    case EOpMatrixTimesScalarAssign:
  ------------------
  |  Branch (904:5): [True: 0, False: 633]
  ------------------
  905|    123|    case EOpDivAssign:
  ------------------
  |  Branch (905:5): [True: 0, False: 633]
  ------------------
  906|    123|    case EOpModAssign:
  ------------------
  |  Branch (906:5): [True: 0, False: 633]
  ------------------
  907|    123|    case EOpAndAssign:
  ------------------
  |  Branch (907:5): [True: 0, False: 633]
  ------------------
  908|    123|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (908:5): [True: 0, False: 633]
  ------------------
  909|    123|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (909:5): [True: 0, False: 633]
  ------------------
  910|       |
  911|    123|    case EOpAtan:
  ------------------
  |  Branch (911:5): [True: 0, False: 633]
  ------------------
  912|    123|    case EOpClamp:
  ------------------
  |  Branch (912:5): [True: 0, False: 633]
  ------------------
  913|    123|    case EOpCross:
  ------------------
  |  Branch (913:5): [True: 0, False: 633]
  ------------------
  914|    123|    case EOpDistance:
  ------------------
  |  Branch (914:5): [True: 0, False: 633]
  ------------------
  915|    123|    case EOpDot:
  ------------------
  |  Branch (915:5): [True: 0, False: 633]
  ------------------
  916|    123|    case EOpDst:
  ------------------
  |  Branch (916:5): [True: 0, False: 633]
  ------------------
  917|    123|    case EOpFaceForward:
  ------------------
  |  Branch (917:5): [True: 0, False: 633]
  ------------------
  918|    123|    case EOpFma:
  ------------------
  |  Branch (918:5): [True: 0, False: 633]
  ------------------
  919|    123|    case EOpFrexp:
  ------------------
  |  Branch (919:5): [True: 0, False: 633]
  ------------------
  920|    123|    case EOpLdexp:
  ------------------
  |  Branch (920:5): [True: 0, False: 633]
  ------------------
  921|    123|    case EOpMix:
  ------------------
  |  Branch (921:5): [True: 0, False: 633]
  ------------------
  922|    123|    case EOpLit:
  ------------------
  |  Branch (922:5): [True: 0, False: 633]
  ------------------
  923|    123|    case EOpMax:
  ------------------
  |  Branch (923:5): [True: 0, False: 633]
  ------------------
  924|    123|    case EOpMin:
  ------------------
  |  Branch (924:5): [True: 0, False: 633]
  ------------------
  925|    123|    case EOpMod:
  ------------------
  |  Branch (925:5): [True: 0, False: 633]
  ------------------
  926|    123|    case EOpModf:
  ------------------
  |  Branch (926:5): [True: 0, False: 633]
  ------------------
  927|    123|    case EOpPow:
  ------------------
  |  Branch (927:5): [True: 0, False: 633]
  ------------------
  928|    123|    case EOpReflect:
  ------------------
  |  Branch (928:5): [True: 0, False: 633]
  ------------------
  929|    123|    case EOpRefract:
  ------------------
  |  Branch (929:5): [True: 0, False: 633]
  ------------------
  930|    123|    case EOpSmoothStep:
  ------------------
  |  Branch (930:5): [True: 0, False: 633]
  ------------------
  931|    123|    case EOpStep:
  ------------------
  |  Branch (931:5): [True: 0, False: 633]
  ------------------
  932|       |
  933|    123|    case EOpSequence:
  ------------------
  |  Branch (933:5): [True: 0, False: 633]
  ------------------
  934|    123|    case EOpConstructStruct:
  ------------------
  |  Branch (934:5): [True: 0, False: 633]
  ------------------
  935|    123|    case EOpConstructCooperativeMatrixNV:
  ------------------
  |  Branch (935:5): [True: 0, False: 633]
  ------------------
  936|    123|    case EOpConstructCooperativeMatrixKHR:
  ------------------
  |  Branch (936:5): [True: 0, False: 633]
  ------------------
  937|    123|    case EOpConstructCooperativeVectorNV:
  ------------------
  |  Branch (937:5): [True: 0, False: 633]
  ------------------
  938|       |
  939|    123|        if (type.isReference() || node->getType().isReference()) {
  ------------------
  |  Branch (939:13): [True: 0, False: 123]
  |  Branch (939:35): [True: 0, False: 123]
  ------------------
  940|       |            // types must match to assign a reference
  941|      0|            if (type == node->getType())
  ------------------
  |  Branch (941:17): [True: 0, False: 0]
  ------------------
  942|      0|                return node;
  943|      0|            else
  944|      0|                return nullptr;
  945|      0|        }
  946|       |
  947|    123|        if (type.getBasicType() == node->getType().getBasicType())
  ------------------
  |  Branch (947:13): [True: 117, False: 6]
  ------------------
  948|    117|            return node;
  949|       |
  950|      6|        if (! canImplicitlyPromote(node->getBasicType(), type.getBasicType(), op))
  ------------------
  |  Branch (950:13): [True: 0, False: 6]
  ------------------
  951|      0|            return nullptr;
  952|      6|        break;
  953|       |
  954|       |    // For GLSL, there are no conversions needed; the shift amount just needs to be an
  955|       |    // integer type, as do the base/result.
  956|       |    // HLSL can convert the shift from a bool to an int.
  957|      6|    case EOpLeftShiftAssign:
  ------------------
  |  Branch (957:5): [True: 0, False: 633]
  ------------------
  958|      0|    case EOpRightShiftAssign:
  ------------------
  |  Branch (958:5): [True: 0, False: 633]
  ------------------
  959|      0|    {
  960|      0|        if (!(getSource() == EShSourceHlsl && node->getType().getBasicType() == EbtBool)) {
  ------------------
  |  Branch (960:15): [True: 0, False: 0]
  |  Branch (960:47): [True: 0, False: 0]
  ------------------
  961|      0|            if (isTypeInt(type.getBasicType()) && isTypeInt(node->getBasicType()))
  ------------------
  |  Branch (961:17): [True: 0, False: 0]
  |  Branch (961:51): [True: 0, False: 0]
  ------------------
  962|      0|                return node;
  963|      0|            else
  964|      0|                return nullptr;
  965|      0|        }
  966|      0|        break;
  967|      0|    }
  968|       |
  969|      0|    default:
  ------------------
  |  Branch (969:5): [True: 0, False: 633]
  ------------------
  970|       |        // default is to require a match; all exceptions should have case statements above
  971|       |
  972|      0|        if (type.getBasicType() == node->getType().getBasicType())
  ------------------
  |  Branch (972:13): [True: 0, False: 0]
  ------------------
  973|      0|            return node;
  974|      0|        else
  975|      0|            return nullptr;
  976|    633|    }
  977|       |
  978|    516|    bool canPromoteConstant = true;
  979|       |    // GL_EXT_shader_16bit_storage can't do OpConstantComposite with
  980|       |    // 16-bit types, so disable promotion for those types.
  981|       |    // Many issues with this, from JohnK:
  982|       |    //  - this isn't really right to discuss SPIR-V here
  983|       |    //  - this could easily be entirely about scalars, so is overstepping
  984|       |    //  - we should be looking at what the shader asked for, and saying whether or
  985|       |    //    not it can be done, in the parser, by calling requireExtensions(), not
  986|       |    //    changing language sementics on the fly by asking what extensions are in use
  987|       |    //  - at the time of this writing (14-Aug-2020), no test results are changed by this.
  988|    516|    switch (op) {
  989|      0|    case EOpConstructBFloat16:
  ------------------
  |  Branch (989:5): [True: 0, False: 516]
  ------------------
  990|      0|    case EOpConstructFloatE5M2:
  ------------------
  |  Branch (990:5): [True: 0, False: 516]
  ------------------
  991|      0|    case EOpConstructFloatE4M3:
  ------------------
  |  Branch (991:5): [True: 0, False: 516]
  ------------------
  992|      0|        canPromoteConstant = true;
  993|      0|        break;
  994|      0|    case EOpConstructFloat16:
  ------------------
  |  Branch (994:5): [True: 0, False: 516]
  ------------------
  995|      0|        canPromoteConstant = numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (995:30): [True: 0, False: 0]
  ------------------
  996|      0|                             numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float16);
  ------------------
  |  Branch (996:30): [True: 0, False: 0]
  ------------------
  997|      0|        break;
  998|      0|    case EOpConstructInt8:
  ------------------
  |  Branch (998:5): [True: 0, False: 516]
  ------------------
  999|      0|    case EOpConstructUint8:
  ------------------
  |  Branch (999:5): [True: 0, False: 516]
  ------------------
 1000|      0|        canPromoteConstant = numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1000:30): [True: 0, False: 0]
  ------------------
 1001|      0|                             numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int8);
  ------------------
  |  Branch (1001:30): [True: 0, False: 0]
  ------------------
 1002|      0|        break;
 1003|      0|    case EOpConstructInt16:
  ------------------
  |  Branch (1003:5): [True: 0, False: 516]
  ------------------
 1004|      0|    case EOpConstructUint16:
  ------------------
  |  Branch (1004:5): [True: 0, False: 516]
  ------------------
 1005|      0|        canPromoteConstant = numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1005:30): [True: 0, False: 0]
  ------------------
 1006|      0|                             numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int16);
  ------------------
  |  Branch (1006:30): [True: 0, False: 0]
  ------------------
 1007|      0|        break;
 1008|    516|    default:
  ------------------
  |  Branch (1008:5): [True: 516, False: 0]
  ------------------
 1009|    516|        break;
 1010|    516|    }
 1011|       |
 1012|    516|    if (canPromoteConstant && node->getAsConstantUnion())
  ------------------
  |  Branch (1012:9): [True: 516, False: 0]
  |  Branch (1012:31): [True: 75, False: 441]
  ------------------
 1013|     75|        return promoteConstantUnion(type.getBasicType(), node->getAsConstantUnion());
 1014|       |
 1015|       |    //
 1016|       |    // Add a new newNode for the conversion.
 1017|       |    //
 1018|    441|    TIntermTyped* newNode = createConversion(type.getBasicType(), node);
 1019|       |
 1020|    441|    return newNode;
 1021|    516|}
_ZN7glslang13TIntermediate21addUniShapeConversionENS_9TOperatorERKNS_5TTypeEPNS_12TIntermTypedE:
 1036|  1.86k|{
 1037|       |    // some source languages don't do this
 1038|  1.86k|    switch (getSource()) {
 1039|      0|    case EShSourceHlsl:
  ------------------
  |  Branch (1039:5): [True: 0, False: 1.86k]
  ------------------
 1040|      0|        break;
 1041|  1.86k|    case EShSourceGlsl:
  ------------------
  |  Branch (1041:5): [True: 1.86k, False: 0]
  ------------------
 1042|  1.86k|    default:
  ------------------
  |  Branch (1042:5): [True: 0, False: 1.86k]
  ------------------
 1043|  1.86k|        return node;
 1044|  1.86k|    }
 1045|       |
 1046|       |    // some operations don't do this
 1047|      0|    switch (op) {
 1048|      0|    case EOpFunctionCall:
  ------------------
  |  Branch (1048:5): [True: 0, False: 0]
  ------------------
 1049|      0|    case EOpReturn:
  ------------------
  |  Branch (1049:5): [True: 0, False: 0]
  ------------------
 1050|      0|        break;
 1051|       |
 1052|      0|    case EOpMulAssign:
  ------------------
  |  Branch (1052:5): [True: 0, False: 0]
  ------------------
 1053|       |        // want to support vector *= scalar native ops in AST and lower, not smear, similarly for
 1054|       |        // matrix *= scalar, etc.
 1055|       |
 1056|      0|    case EOpAddAssign:
  ------------------
  |  Branch (1056:5): [True: 0, False: 0]
  ------------------
 1057|      0|    case EOpSubAssign:
  ------------------
  |  Branch (1057:5): [True: 0, False: 0]
  ------------------
 1058|      0|    case EOpDivAssign:
  ------------------
  |  Branch (1058:5): [True: 0, False: 0]
  ------------------
 1059|      0|    case EOpAndAssign:
  ------------------
  |  Branch (1059:5): [True: 0, False: 0]
  ------------------
 1060|      0|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (1060:5): [True: 0, False: 0]
  ------------------
 1061|      0|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (1061:5): [True: 0, False: 0]
  ------------------
 1062|      0|    case EOpRightShiftAssign:
  ------------------
  |  Branch (1062:5): [True: 0, False: 0]
  ------------------
 1063|      0|    case EOpLeftShiftAssign:
  ------------------
  |  Branch (1063:5): [True: 0, False: 0]
  ------------------
 1064|      0|        if (node->getVectorSize() == 1)
  ------------------
  |  Branch (1064:13): [True: 0, False: 0]
  ------------------
 1065|      0|            return node;
 1066|      0|        break;
 1067|       |
 1068|      0|    case EOpAssign:
  ------------------
  |  Branch (1068:5): [True: 0, False: 0]
  ------------------
 1069|      0|        break;
 1070|       |
 1071|      0|    case EOpMix:
  ------------------
  |  Branch (1071:5): [True: 0, False: 0]
  ------------------
 1072|      0|        break;
 1073|       |
 1074|      0|    default:
  ------------------
  |  Branch (1074:5): [True: 0, False: 0]
  ------------------
 1075|      0|        return node;
 1076|      0|    }
 1077|       |
 1078|      0|    return addShapeConversion(type, node);
 1079|      0|}
_ZN7glslang13TIntermediate20addBiShapeConversionENS_9TOperatorERPNS_12TIntermTypedES4_:
 1089|      3|{
 1090|       |    // some source languages don't do this
 1091|      3|    switch (getSource()) {
 1092|      0|    case EShSourceHlsl:
  ------------------
  |  Branch (1092:5): [True: 0, False: 3]
  ------------------
 1093|      0|        break;
 1094|      3|    case EShSourceGlsl:
  ------------------
  |  Branch (1094:5): [True: 3, False: 0]
  ------------------
 1095|      3|    default:
  ------------------
  |  Branch (1095:5): [True: 0, False: 3]
  ------------------
 1096|      3|        return;
 1097|      3|    }
 1098|       |
 1099|       |    // some operations don't do this
 1100|       |    // 'break' will mean attempt bidirectional conversion
 1101|      0|    switch (op) {
 1102|      0|    case EOpMulAssign:
  ------------------
  |  Branch (1102:5): [True: 0, False: 0]
  ------------------
 1103|      0|    case EOpAssign:
  ------------------
  |  Branch (1103:5): [True: 0, False: 0]
  ------------------
 1104|      0|    case EOpAddAssign:
  ------------------
  |  Branch (1104:5): [True: 0, False: 0]
  ------------------
 1105|      0|    case EOpSubAssign:
  ------------------
  |  Branch (1105:5): [True: 0, False: 0]
  ------------------
 1106|      0|    case EOpDivAssign:
  ------------------
  |  Branch (1106:5): [True: 0, False: 0]
  ------------------
 1107|      0|    case EOpAndAssign:
  ------------------
  |  Branch (1107:5): [True: 0, False: 0]
  ------------------
 1108|      0|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (1108:5): [True: 0, False: 0]
  ------------------
 1109|      0|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (1109:5): [True: 0, False: 0]
  ------------------
 1110|      0|    case EOpRightShiftAssign:
  ------------------
  |  Branch (1110:5): [True: 0, False: 0]
  ------------------
 1111|      0|    case EOpLeftShiftAssign:
  ------------------
  |  Branch (1111:5): [True: 0, False: 0]
  ------------------
 1112|       |        // switch to unidirectional conversion (the lhs can't change)
 1113|      0|        rhsNode = addUniShapeConversion(op, lhsNode->getType(), rhsNode);
 1114|      0|        return;
 1115|       |
 1116|      0|    case EOpMul:
  ------------------
  |  Branch (1116:5): [True: 0, False: 0]
  ------------------
 1117|       |        // matrix multiply does not change shapes
 1118|      0|        if (lhsNode->isMatrix() && rhsNode->isMatrix())
  ------------------
  |  Branch (1118:13): [True: 0, False: 0]
  |  Branch (1118:36): [True: 0, False: 0]
  ------------------
 1119|      0|            return;
 1120|      0|        [[fallthrough]];
 1121|      0|    case EOpAdd:
  ------------------
  |  Branch (1121:5): [True: 0, False: 0]
  ------------------
 1122|      0|    case EOpSub:
  ------------------
  |  Branch (1122:5): [True: 0, False: 0]
  ------------------
 1123|      0|    case EOpDiv:
  ------------------
  |  Branch (1123:5): [True: 0, False: 0]
  ------------------
 1124|       |        // want to support vector * scalar native ops in AST and lower, not smear, similarly for
 1125|       |        // matrix * vector, etc.
 1126|      0|        if (lhsNode->getVectorSize() == 1 || rhsNode->getVectorSize() == 1)
  ------------------
  |  Branch (1126:13): [True: 0, False: 0]
  |  Branch (1126:46): [True: 0, False: 0]
  ------------------
 1127|      0|            return;
 1128|      0|        break;
 1129|       |
 1130|      0|    case EOpRightShift:
  ------------------
  |  Branch (1130:5): [True: 0, False: 0]
  ------------------
 1131|      0|    case EOpLeftShift:
  ------------------
  |  Branch (1131:5): [True: 0, False: 0]
  ------------------
 1132|       |        // can natively support the right operand being a scalar and the left a vector,
 1133|       |        // but not the reverse
 1134|      0|        if (rhsNode->getVectorSize() == 1)
  ------------------
  |  Branch (1134:13): [True: 0, False: 0]
  ------------------
 1135|      0|            return;
 1136|      0|        break;
 1137|       |
 1138|      0|    case EOpLessThan:
  ------------------
  |  Branch (1138:5): [True: 0, False: 0]
  ------------------
 1139|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (1139:5): [True: 0, False: 0]
  ------------------
 1140|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (1140:5): [True: 0, False: 0]
  ------------------
 1141|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (1141:5): [True: 0, False: 0]
  ------------------
 1142|       |
 1143|      0|    case EOpEqual:
  ------------------
  |  Branch (1143:5): [True: 0, False: 0]
  ------------------
 1144|      0|    case EOpNotEqual:
  ------------------
  |  Branch (1144:5): [True: 0, False: 0]
  ------------------
 1145|       |
 1146|      0|    case EOpLogicalAnd:
  ------------------
  |  Branch (1146:5): [True: 0, False: 0]
  ------------------
 1147|      0|    case EOpLogicalOr:
  ------------------
  |  Branch (1147:5): [True: 0, False: 0]
  ------------------
 1148|      0|    case EOpLogicalXor:
  ------------------
  |  Branch (1148:5): [True: 0, False: 0]
  ------------------
 1149|       |
 1150|      0|    case EOpAnd:
  ------------------
  |  Branch (1150:5): [True: 0, False: 0]
  ------------------
 1151|      0|    case EOpInclusiveOr:
  ------------------
  |  Branch (1151:5): [True: 0, False: 0]
  ------------------
 1152|      0|    case EOpExclusiveOr:
  ------------------
  |  Branch (1152:5): [True: 0, False: 0]
  ------------------
 1153|       |
 1154|      0|    case EOpMix:
  ------------------
  |  Branch (1154:5): [True: 0, False: 0]
  ------------------
 1155|      0|        break;
 1156|       |
 1157|      0|    default:
  ------------------
  |  Branch (1157:5): [True: 0, False: 0]
  ------------------
 1158|      0|        return;
 1159|      0|    }
 1160|       |
 1161|       |    // Do bidirectional conversions
 1162|      0|    if (lhsNode->getType().isScalarOrVec1() || rhsNode->getType().isScalarOrVec1()) {
  ------------------
  |  Branch (1162:9): [True: 0, False: 0]
  |  Branch (1162:48): [True: 0, False: 0]
  ------------------
 1163|      0|        if (lhsNode->getType().isScalarOrVec1())
  ------------------
  |  Branch (1163:13): [True: 0, False: 0]
  ------------------
 1164|      0|            lhsNode = addShapeConversion(rhsNode->getType(), lhsNode);
 1165|      0|        else
 1166|      0|            rhsNode = addShapeConversion(lhsNode->getType(), rhsNode);
 1167|      0|    }
 1168|      0|    lhsNode = addShapeConversion(rhsNode->getType(), lhsNode);
 1169|      0|    rhsNode = addShapeConversion(lhsNode->getType(), rhsNode);
 1170|      0|}
_ZNK7glslang13TIntermediate19isIntegralPromotionENS_10TBasicTypeES1_:
 1275|      6|{
 1276|       |    // integral promotions
 1277|      6|    if (to == EbtInt) {
  ------------------
  |  Branch (1277:9): [True: 0, False: 6]
  ------------------
 1278|      0|        switch(from) {
 1279|      0|        case EbtInt8:
  ------------------
  |  Branch (1279:9): [True: 0, False: 0]
  ------------------
 1280|      0|        case EbtInt16:
  ------------------
  |  Branch (1280:9): [True: 0, False: 0]
  ------------------
 1281|      0|        case EbtUint8:
  ------------------
  |  Branch (1281:9): [True: 0, False: 0]
  ------------------
 1282|      0|        case EbtUint16:
  ------------------
  |  Branch (1282:9): [True: 0, False: 0]
  ------------------
 1283|      0|            return true;
 1284|      0|        default:
  ------------------
  |  Branch (1284:9): [True: 0, False: 0]
  ------------------
 1285|      0|            break;
 1286|      0|        }
 1287|      0|    }
 1288|      6|    return false;
 1289|      6|}
_ZNK7glslang13TIntermediate13isFPPromotionENS_10TBasicTypeES1_:
 1292|      6|{
 1293|       |    // floating-point promotions
 1294|      6|    if (to == EbtDouble) {
  ------------------
  |  Branch (1294:9): [True: 0, False: 6]
  ------------------
 1295|      0|        switch(from) {
 1296|      0|        case EbtBFloat16:
  ------------------
  |  Branch (1296:9): [True: 0, False: 0]
  ------------------
 1297|      0|        case EbtFloatE5M2:
  ------------------
  |  Branch (1297:9): [True: 0, False: 0]
  ------------------
 1298|      0|        case EbtFloatE4M3:
  ------------------
  |  Branch (1298:9): [True: 0, False: 0]
  ------------------
 1299|      0|        case EbtFloat16:
  ------------------
  |  Branch (1299:9): [True: 0, False: 0]
  ------------------
 1300|      0|        case EbtFloat:
  ------------------
  |  Branch (1300:9): [True: 0, False: 0]
  ------------------
 1301|      0|            return true;
 1302|      0|        default:
  ------------------
  |  Branch (1302:9): [True: 0, False: 0]
  ------------------
 1303|      0|            break;
 1304|      0|        }
 1305|      0|    }
 1306|      6|    return false;
 1307|      6|}
_ZNK7glslang13TIntermediate20isIntegralConversionENS_10TBasicTypeES1_:
 1310|      6|{
 1311|      6|    switch (from) {
 1312|      6|    case EbtInt:
  ------------------
  |  Branch (1312:5): [True: 6, False: 0]
  ------------------
 1313|      6|        switch(to) {
 1314|      0|        case EbtUint:
  ------------------
  |  Branch (1314:9): [True: 0, False: 6]
  ------------------
 1315|      0|            return version >= 400 || getSource() == EShSourceHlsl;
  ------------------
  |  Branch (1315:20): [True: 0, False: 0]
  |  Branch (1315:38): [True: 0, False: 0]
  ------------------
 1316|      0|        case EbtInt64:
  ------------------
  |  Branch (1316:9): [True: 0, False: 6]
  ------------------
 1317|      0|        case EbtUint64:
  ------------------
  |  Branch (1317:9): [True: 0, False: 6]
  ------------------
 1318|      0|            return true;
 1319|      6|        default:
  ------------------
  |  Branch (1319:9): [True: 6, False: 0]
  ------------------
 1320|      6|            break;
 1321|      6|        }
 1322|      6|        break;
 1323|      6|    case EbtUint:
  ------------------
  |  Branch (1323:5): [True: 0, False: 6]
  ------------------
 1324|      0|        switch(to) {
 1325|      0|        case EbtInt64:
  ------------------
  |  Branch (1325:9): [True: 0, False: 0]
  ------------------
 1326|      0|        case EbtUint64:
  ------------------
  |  Branch (1326:9): [True: 0, False: 0]
  ------------------
 1327|      0|            return true;
 1328|      0|        default:
  ------------------
  |  Branch (1328:9): [True: 0, False: 0]
  ------------------
 1329|      0|            break;
 1330|      0|        }
 1331|      0|        break;
 1332|      0|    case EbtInt8:
  ------------------
  |  Branch (1332:5): [True: 0, False: 6]
  ------------------
 1333|      0|        switch (to) {
 1334|      0|        case EbtUint8:
  ------------------
  |  Branch (1334:9): [True: 0, False: 0]
  ------------------
 1335|      0|        case EbtInt16:
  ------------------
  |  Branch (1335:9): [True: 0, False: 0]
  ------------------
 1336|      0|        case EbtUint16:
  ------------------
  |  Branch (1336:9): [True: 0, False: 0]
  ------------------
 1337|      0|        case EbtUint:
  ------------------
  |  Branch (1337:9): [True: 0, False: 0]
  ------------------
 1338|      0|        case EbtInt64:
  ------------------
  |  Branch (1338:9): [True: 0, False: 0]
  ------------------
 1339|      0|        case EbtUint64:
  ------------------
  |  Branch (1339:9): [True: 0, False: 0]
  ------------------
 1340|      0|            return true;
 1341|      0|        default:
  ------------------
  |  Branch (1341:9): [True: 0, False: 0]
  ------------------
 1342|      0|            break;
 1343|      0|        }
 1344|      0|        break;
 1345|      0|    case EbtUint8:
  ------------------
  |  Branch (1345:5): [True: 0, False: 6]
  ------------------
 1346|      0|        switch (to) {
 1347|      0|        case EbtInt16:
  ------------------
  |  Branch (1347:9): [True: 0, False: 0]
  ------------------
 1348|      0|        case EbtUint16:
  ------------------
  |  Branch (1348:9): [True: 0, False: 0]
  ------------------
 1349|      0|        case EbtUint:
  ------------------
  |  Branch (1349:9): [True: 0, False: 0]
  ------------------
 1350|      0|        case EbtInt64:
  ------------------
  |  Branch (1350:9): [True: 0, False: 0]
  ------------------
 1351|      0|        case EbtUint64:
  ------------------
  |  Branch (1351:9): [True: 0, False: 0]
  ------------------
 1352|      0|            return true;
 1353|      0|        default:
  ------------------
  |  Branch (1353:9): [True: 0, False: 0]
  ------------------
 1354|      0|            break;
 1355|      0|        }
 1356|      0|        break;
 1357|      0|    case EbtInt16:
  ------------------
  |  Branch (1357:5): [True: 0, False: 6]
  ------------------
 1358|      0|        switch(to) {
 1359|      0|        case EbtUint16:
  ------------------
  |  Branch (1359:9): [True: 0, False: 0]
  ------------------
 1360|      0|        case EbtUint:
  ------------------
  |  Branch (1360:9): [True: 0, False: 0]
  ------------------
 1361|      0|        case EbtInt64:
  ------------------
  |  Branch (1361:9): [True: 0, False: 0]
  ------------------
 1362|      0|        case EbtUint64:
  ------------------
  |  Branch (1362:9): [True: 0, False: 0]
  ------------------
 1363|      0|            return true;
 1364|      0|        default:
  ------------------
  |  Branch (1364:9): [True: 0, False: 0]
  ------------------
 1365|      0|            break;
 1366|      0|        }
 1367|      0|        break;
 1368|      0|    case EbtUint16:
  ------------------
  |  Branch (1368:5): [True: 0, False: 6]
  ------------------
 1369|      0|        switch(to) {
 1370|      0|        case EbtUint:
  ------------------
  |  Branch (1370:9): [True: 0, False: 0]
  ------------------
 1371|      0|        case EbtInt64:
  ------------------
  |  Branch (1371:9): [True: 0, False: 0]
  ------------------
 1372|      0|        case EbtUint64:
  ------------------
  |  Branch (1372:9): [True: 0, False: 0]
  ------------------
 1373|      0|            return true;
 1374|      0|        default:
  ------------------
  |  Branch (1374:9): [True: 0, False: 0]
  ------------------
 1375|      0|            break;
 1376|      0|        }
 1377|      0|        break;
 1378|      0|    case EbtInt64:
  ------------------
  |  Branch (1378:5): [True: 0, False: 6]
  ------------------
 1379|      0|        if (to == EbtUint64) {
  ------------------
  |  Branch (1379:13): [True: 0, False: 0]
  ------------------
 1380|      0|            return true;
 1381|      0|        }
 1382|      0|        break;
 1383|      0|    default:
  ------------------
  |  Branch (1383:5): [True: 0, False: 6]
  ------------------
 1384|      0|        break;
 1385|      6|    }
 1386|      6|    return false;
 1387|      6|}
_ZNK7glslang13TIntermediate14isFPConversionENS_10TBasicTypeES1_:
 1390|      6|{
 1391|      6|    if (to == EbtFloat && (from == EbtFloat16 || from == EbtBFloat16 || from == EbtFloatE5M2 || from == EbtFloatE4M3)) {
  ------------------
  |  Branch (1391:9): [True: 6, False: 0]
  |  Branch (1391:28): [True: 0, False: 6]
  |  Branch (1391:50): [True: 0, False: 6]
  |  Branch (1391:73): [True: 0, False: 6]
  |  Branch (1391:97): [True: 0, False: 6]
  ------------------
 1392|      0|        return true;
 1393|      6|    } else {
 1394|      6|        return false;
 1395|      6|    }
 1396|      6|}
_ZNK7glslang13TIntermediate22isFPIntegralConversionENS_10TBasicTypeES1_:
 1399|      6|{
 1400|      6|    switch (from) {
 1401|      6|    case EbtInt:
  ------------------
  |  Branch (1401:5): [True: 6, False: 0]
  ------------------
 1402|      6|    case EbtUint:
  ------------------
  |  Branch (1402:5): [True: 0, False: 6]
  ------------------
 1403|      6|        switch(to) {
 1404|      6|        case EbtFloat:
  ------------------
  |  Branch (1404:9): [True: 6, False: 0]
  ------------------
 1405|      6|        case EbtDouble:
  ------------------
  |  Branch (1405:9): [True: 0, False: 6]
  ------------------
 1406|      6|            return true;
 1407|      0|        default:
  ------------------
  |  Branch (1407:9): [True: 0, False: 6]
  ------------------
 1408|      0|            break;
 1409|      6|        }
 1410|      0|        break;
 1411|      0|    case EbtInt8:
  ------------------
  |  Branch (1411:5): [True: 0, False: 6]
  ------------------
 1412|      0|    case EbtUint8:
  ------------------
  |  Branch (1412:5): [True: 0, False: 6]
  ------------------
 1413|      0|    case EbtInt16:
  ------------------
  |  Branch (1413:5): [True: 0, False: 6]
  ------------------
 1414|      0|    case EbtUint16:
  ------------------
  |  Branch (1414:5): [True: 0, False: 6]
  ------------------
 1415|      0|        switch (to) {
 1416|      0|        case EbtFloat16:
  ------------------
  |  Branch (1416:9): [True: 0, False: 0]
  ------------------
 1417|      0|        case EbtFloat:
  ------------------
  |  Branch (1417:9): [True: 0, False: 0]
  ------------------
 1418|      0|        case EbtDouble:
  ------------------
  |  Branch (1418:9): [True: 0, False: 0]
  ------------------
 1419|      0|            return true;
 1420|      0|        default:
  ------------------
  |  Branch (1420:9): [True: 0, False: 0]
  ------------------
 1421|      0|            break;
 1422|      0|        }
 1423|      0|        break;
 1424|      0|    case EbtInt64:
  ------------------
  |  Branch (1424:5): [True: 0, False: 6]
  ------------------
 1425|      0|    case EbtUint64:
  ------------------
  |  Branch (1425:5): [True: 0, False: 6]
  ------------------
 1426|      0|        if (to == EbtDouble) {
  ------------------
  |  Branch (1426:13): [True: 0, False: 0]
  ------------------
 1427|      0|            return true;
 1428|      0|        }
 1429|      0|        break;
 1430|      0|    default:
  ------------------
  |  Branch (1430:5): [True: 0, False: 6]
  ------------------
 1431|      0|        break;
 1432|      6|    }
 1433|      0|    return false;
 1434|      6|}
_ZNK7glslang13TIntermediate20canImplicitlyPromoteENS_10TBasicTypeES1_NS_9TOperatorE:
 1441|      6|{
 1442|      6|    if ((isEsProfile() && version < 310 ) || version == 110)
  ------------------
  |  Branch (1442:10): [True: 0, False: 6]
  |  Branch (1442:27): [True: 0, False: 0]
  |  Branch (1442:46): [True: 0, False: 6]
  ------------------
 1443|      0|        return false;
 1444|       |
 1445|      6|    if (from == to)
  ------------------
  |  Branch (1445:9): [True: 0, False: 6]
  ------------------
 1446|      0|        return true;
 1447|       |
 1448|       |    // TODO: Move more policies into language-specific handlers.
 1449|       |    // Some languages allow more general (or potentially, more specific) conversions under some conditions.
 1450|      6|    if (getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (1450:9): [True: 0, False: 6]
  ------------------
 1451|      0|        const bool fromConvertable = (from == EbtFloat || from == EbtDouble || from == EbtInt || from == EbtUint || from == EbtBool);
  ------------------
  |  Branch (1451:39): [True: 0, False: 0]
  |  Branch (1451:59): [True: 0, False: 0]
  |  Branch (1451:80): [True: 0, False: 0]
  |  Branch (1451:98): [True: 0, False: 0]
  |  Branch (1451:117): [True: 0, False: 0]
  ------------------
 1452|      0|        const bool toConvertable = (to == EbtFloat || to == EbtDouble || to == EbtInt || to == EbtUint || to == EbtBool);
  ------------------
  |  Branch (1452:37): [True: 0, False: 0]
  |  Branch (1452:55): [True: 0, False: 0]
  |  Branch (1452:74): [True: 0, False: 0]
  |  Branch (1452:90): [True: 0, False: 0]
  |  Branch (1452:107): [True: 0, False: 0]
  ------------------
 1453|       |
 1454|      0|        if (fromConvertable && toConvertable) {
  ------------------
  |  Branch (1454:13): [True: 0, False: 0]
  |  Branch (1454:32): [True: 0, False: 0]
  ------------------
 1455|      0|            switch (op) {
 1456|      0|            case EOpAndAssign:               // assignments can perform arbitrary conversions
  ------------------
  |  Branch (1456:13): [True: 0, False: 0]
  ------------------
 1457|      0|            case EOpInclusiveOrAssign:       // ...
  ------------------
  |  Branch (1457:13): [True: 0, False: 0]
  ------------------
 1458|      0|            case EOpExclusiveOrAssign:       // ...
  ------------------
  |  Branch (1458:13): [True: 0, False: 0]
  ------------------
 1459|      0|            case EOpAssign:                  // ...
  ------------------
  |  Branch (1459:13): [True: 0, False: 0]
  ------------------
 1460|      0|            case EOpAddAssign:               // ...
  ------------------
  |  Branch (1460:13): [True: 0, False: 0]
  ------------------
 1461|      0|            case EOpSubAssign:               // ...
  ------------------
  |  Branch (1461:13): [True: 0, False: 0]
  ------------------
 1462|      0|            case EOpMulAssign:               // ...
  ------------------
  |  Branch (1462:13): [True: 0, False: 0]
  ------------------
 1463|      0|            case EOpVectorTimesScalarAssign: // ...
  ------------------
  |  Branch (1463:13): [True: 0, False: 0]
  ------------------
 1464|      0|            case EOpMatrixTimesScalarAssign: // ...
  ------------------
  |  Branch (1464:13): [True: 0, False: 0]
  ------------------
 1465|      0|            case EOpDivAssign:               // ...
  ------------------
  |  Branch (1465:13): [True: 0, False: 0]
  ------------------
 1466|      0|            case EOpModAssign:               // ...
  ------------------
  |  Branch (1466:13): [True: 0, False: 0]
  ------------------
 1467|      0|            case EOpReturn:                  // function returns can also perform arbitrary conversions
  ------------------
  |  Branch (1467:13): [True: 0, False: 0]
  ------------------
 1468|      0|            case EOpFunctionCall:            // conversion of a calling parameter
  ------------------
  |  Branch (1468:13): [True: 0, False: 0]
  ------------------
 1469|      0|            case EOpLogicalNot:
  ------------------
  |  Branch (1469:13): [True: 0, False: 0]
  ------------------
 1470|      0|            case EOpLogicalAnd:
  ------------------
  |  Branch (1470:13): [True: 0, False: 0]
  ------------------
 1471|      0|            case EOpLogicalOr:
  ------------------
  |  Branch (1471:13): [True: 0, False: 0]
  ------------------
 1472|      0|            case EOpLogicalXor:
  ------------------
  |  Branch (1472:13): [True: 0, False: 0]
  ------------------
 1473|      0|            case EOpConstructStruct:
  ------------------
  |  Branch (1473:13): [True: 0, False: 0]
  ------------------
 1474|      0|                return true;
 1475|      0|            default:
  ------------------
  |  Branch (1475:13): [True: 0, False: 0]
  ------------------
 1476|      0|                break;
 1477|      0|            }
 1478|      0|        }
 1479|      0|    }
 1480|       |
 1481|      6|    if (getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (1481:9): [True: 0, False: 6]
  ------------------
 1482|       |        // HLSL
 1483|      0|        if (from == EbtBool && (to == EbtInt || to == EbtUint || to == EbtFloat))
  ------------------
  |  Branch (1483:13): [True: 0, False: 0]
  |  Branch (1483:33): [True: 0, False: 0]
  |  Branch (1483:49): [True: 0, False: 0]
  |  Branch (1483:66): [True: 0, False: 0]
  ------------------
 1484|      0|            return true;
 1485|      6|    } else {
 1486|       |        // GLSL
 1487|      6|        if (isIntegralPromotion(from, to) ||
  ------------------
  |  Branch (1487:13): [True: 0, False: 6]
  ------------------
 1488|      6|            isFPPromotion(from, to) ||
  ------------------
  |  Branch (1488:13): [True: 0, False: 6]
  ------------------
 1489|      6|            isIntegralConversion(from, to) ||
  ------------------
  |  Branch (1489:13): [True: 0, False: 6]
  ------------------
 1490|      6|            isFPConversion(from, to) ||
  ------------------
  |  Branch (1490:13): [True: 0, False: 6]
  ------------------
 1491|      6|            isFPIntegralConversion(from, to)) {
  ------------------
  |  Branch (1491:13): [True: 6, False: 0]
  ------------------
 1492|       |
 1493|      6|            if (numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1493:17): [True: 0, False: 6]
  ------------------
 1494|      6|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int8) ||
  ------------------
  |  Branch (1494:17): [True: 0, False: 6]
  ------------------
 1495|      6|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int16) ||
  ------------------
  |  Branch (1495:17): [True: 0, False: 6]
  ------------------
 1496|      6|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int32) ||
  ------------------
  |  Branch (1496:17): [True: 0, False: 6]
  ------------------
 1497|      6|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int64) ||
  ------------------
  |  Branch (1497:17): [True: 0, False: 6]
  ------------------
 1498|      6|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float16) ||
  ------------------
  |  Branch (1498:17): [True: 0, False: 6]
  ------------------
 1499|      6|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float32) ||
  ------------------
  |  Branch (1499:17): [True: 0, False: 6]
  ------------------
 1500|      6|                numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float64)) {
  ------------------
  |  Branch (1500:17): [True: 0, False: 6]
  ------------------
 1501|      0|                return true;
 1502|      0|            }
 1503|      6|        }
 1504|      6|    }
 1505|       |
 1506|      6|    if (isEsProfile()) {
  ------------------
  |  Branch (1506:9): [True: 0, False: 6]
  ------------------
 1507|      0|        switch (to) {
 1508|      0|            case EbtFloat:
  ------------------
  |  Branch (1508:13): [True: 0, False: 0]
  ------------------
 1509|      0|                switch (from) {
 1510|      0|                case EbtInt:
  ------------------
  |  Branch (1510:17): [True: 0, False: 0]
  ------------------
 1511|      0|                case EbtUint:
  ------------------
  |  Branch (1511:17): [True: 0, False: 0]
  ------------------
 1512|      0|                    return numericFeatures.contains(TNumericFeatures::shader_implicit_conversions);
 1513|      0|                default:
  ------------------
  |  Branch (1513:17): [True: 0, False: 0]
  ------------------
 1514|      0|                    return false;
 1515|      0|                }
 1516|      0|            case EbtUint:
  ------------------
  |  Branch (1516:13): [True: 0, False: 0]
  ------------------
 1517|      0|                switch (from) {
 1518|      0|                case EbtInt:
  ------------------
  |  Branch (1518:17): [True: 0, False: 0]
  ------------------
 1519|      0|                    return numericFeatures.contains(TNumericFeatures::shader_implicit_conversions);
 1520|      0|                default:
  ------------------
  |  Branch (1520:17): [True: 0, False: 0]
  ------------------
 1521|      0|                    return false;
 1522|      0|                }
 1523|      0|            default:
  ------------------
  |  Branch (1523:13): [True: 0, False: 0]
  ------------------
 1524|      0|                return false;
 1525|      0|        }        
 1526|      6|    } else {
 1527|      6|        switch (to) {
 1528|      0|        case EbtDouble:
  ------------------
  |  Branch (1528:9): [True: 0, False: 6]
  ------------------
 1529|      0|            switch (from) {
 1530|      0|            case EbtInt:
  ------------------
  |  Branch (1530:13): [True: 0, False: 0]
  ------------------
 1531|      0|            case EbtUint:
  ------------------
  |  Branch (1531:13): [True: 0, False: 0]
  ------------------
 1532|      0|            case EbtInt64:
  ------------------
  |  Branch (1532:13): [True: 0, False: 0]
  ------------------
 1533|      0|            case EbtUint64:
  ------------------
  |  Branch (1533:13): [True: 0, False: 0]
  ------------------
 1534|      0|            case EbtFloat:
  ------------------
  |  Branch (1534:13): [True: 0, False: 0]
  ------------------
 1535|      0|                return version >= 400 || numericFeatures.contains(TNumericFeatures::gpu_shader_fp64);
  ------------------
  |  Branch (1535:24): [True: 0, False: 0]
  |  Branch (1535:42): [True: 0, False: 0]
  ------------------
 1536|      0|            case EbtInt16:
  ------------------
  |  Branch (1536:13): [True: 0, False: 0]
  ------------------
 1537|      0|            case EbtUint16:
  ------------------
  |  Branch (1537:13): [True: 0, False: 0]
  ------------------
 1538|      0|                return (version >= 400 || numericFeatures.contains(TNumericFeatures::gpu_shader_fp64)) &&
  ------------------
  |  Branch (1538:25): [True: 0, False: 0]
  |  Branch (1538:43): [True: 0, False: 0]
  ------------------
 1539|      0|                                         (numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types) || 
  ------------------
  |  Branch (1539:43): [True: 0, False: 0]
  ------------------
 1540|      0|                                          numericFeatures.contains(TNumericFeatures::gpu_shader_int16));
  ------------------
  |  Branch (1540:43): [True: 0, False: 0]
  ------------------
 1541|      0|            case EbtFloat16:
  ------------------
  |  Branch (1541:13): [True: 0, False: 0]
  ------------------
 1542|      0|                return (version >= 400 || numericFeatures.contains(TNumericFeatures::gpu_shader_fp64)) &&
  ------------------
  |  Branch (1542:25): [True: 0, False: 0]
  |  Branch (1542:43): [True: 0, False: 0]
  ------------------
 1543|      0|                                        (numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types) || 
  ------------------
  |  Branch (1543:42): [True: 0, False: 0]
  ------------------
 1544|      0|                                        numericFeatures.contains(TNumericFeatures::gpu_shader_half_float));
  ------------------
  |  Branch (1544:41): [True: 0, False: 0]
  ------------------
 1545|      0|            case EbtBFloat16:
  ------------------
  |  Branch (1545:13): [True: 0, False: 0]
  ------------------
 1546|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (1546:13): [True: 0, False: 0]
  ------------------
 1547|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (1547:13): [True: 0, False: 0]
  ------------------
 1548|      0|                return true;
 1549|      0|            case EbtInt8:
  ------------------
  |  Branch (1549:13): [True: 0, False: 0]
  ------------------
 1550|      0|            case EbtUint8:
  ------------------
  |  Branch (1550:13): [True: 0, False: 0]
  ------------------
 1551|      0|                return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
 1552|      0|            default:
  ------------------
  |  Branch (1552:13): [True: 0, False: 0]
  ------------------
 1553|      0|                return false;
 1554|      0|           }
 1555|      6|        case EbtFloat:
  ------------------
  |  Branch (1555:9): [True: 6, False: 0]
  ------------------
 1556|      6|            switch (from) {
 1557|      6|            case EbtInt:
  ------------------
  |  Branch (1557:13): [True: 6, False: 0]
  ------------------
 1558|      6|            case EbtUint:
  ------------------
  |  Branch (1558:13): [True: 0, False: 6]
  ------------------
 1559|      6|                 return true;
 1560|      0|            case EbtBool:
  ------------------
  |  Branch (1560:13): [True: 0, False: 6]
  ------------------
 1561|      0|                 return getSource() == EShSourceHlsl;
 1562|      0|            case EbtInt16:
  ------------------
  |  Branch (1562:13): [True: 0, False: 6]
  ------------------
 1563|      0|            case EbtUint16:
  ------------------
  |  Branch (1563:13): [True: 0, False: 6]
  ------------------
 1564|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) ||
  ------------------
  |  Branch (1564:24): [True: 0, False: 0]
  ------------------
 1565|      0|                       numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
  ------------------
  |  Branch (1565:24): [True: 0, False: 0]
  ------------------
 1566|      0|            case EbtFloat16:
  ------------------
  |  Branch (1566:13): [True: 0, False: 6]
  ------------------
 1567|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_half_float) ||
  ------------------
  |  Branch (1567:24): [True: 0, False: 0]
  ------------------
 1568|      0|                    numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types) ||
  ------------------
  |  Branch (1568:21): [True: 0, False: 0]
  ------------------
 1569|      0|                    getSource() == EShSourceHlsl;
  ------------------
  |  Branch (1569:21): [True: 0, False: 0]
  ------------------
 1570|      0|            case EbtBFloat16:
  ------------------
  |  Branch (1570:13): [True: 0, False: 6]
  ------------------
 1571|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (1571:13): [True: 0, False: 6]
  ------------------
 1572|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (1572:13): [True: 0, False: 6]
  ------------------
 1573|      0|                return true;
 1574|      0|            case EbtInt8:
  ------------------
  |  Branch (1574:13): [True: 0, False: 6]
  ------------------
 1575|      0|            case EbtUint8:
  ------------------
  |  Branch (1575:13): [True: 0, False: 6]
  ------------------
 1576|      0|                return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
 1577|      0|            default:
  ------------------
  |  Branch (1577:13): [True: 0, False: 6]
  ------------------
 1578|      0|                 return false;
 1579|      6|            }
 1580|      0|        case EbtUint:
  ------------------
  |  Branch (1580:9): [True: 0, False: 6]
  ------------------
 1581|      0|            switch (from) {
 1582|      0|            case EbtInt:
  ------------------
  |  Branch (1582:13): [True: 0, False: 0]
  ------------------
 1583|      0|                return version >= 400 || getSource() == EShSourceHlsl || 
  ------------------
  |  Branch (1583:24): [True: 0, False: 0]
  |  Branch (1583:42): [True: 0, False: 0]
  ------------------
 1584|      0|						IsRequestedExtension(E_GL_ARB_gpu_shader5) ||
  ------------------
  |  Branch (1584:7): [True: 0, False: 0]
  ------------------
 1585|      0|						numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
  ------------------
  |  Branch (1585:7): [True: 0, False: 0]
  ------------------
 1586|      0|            case EbtBool:
  ------------------
  |  Branch (1586:13): [True: 0, False: 0]
  ------------------
 1587|      0|                return getSource() == EShSourceHlsl;
 1588|      0|            case EbtInt16:
  ------------------
  |  Branch (1588:13): [True: 0, False: 0]
  ------------------
 1589|      0|            case EbtUint16:
  ------------------
  |  Branch (1589:13): [True: 0, False: 0]
  ------------------
 1590|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) ||
  ------------------
  |  Branch (1590:24): [True: 0, False: 0]
  ------------------
 1591|      0|                       numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
  ------------------
  |  Branch (1591:24): [True: 0, False: 0]
  ------------------
 1592|      0|            case EbtInt8:
  ------------------
  |  Branch (1592:13): [True: 0, False: 0]
  ------------------
 1593|      0|            case EbtUint8:
  ------------------
  |  Branch (1593:13): [True: 0, False: 0]
  ------------------
 1594|      0|                return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
 1595|      0|            default:
  ------------------
  |  Branch (1595:13): [True: 0, False: 0]
  ------------------
 1596|      0|                return false;
 1597|      0|            }
 1598|      0|        case EbtInt:
  ------------------
  |  Branch (1598:9): [True: 0, False: 6]
  ------------------
 1599|      0|            switch (from) {
 1600|      0|            case EbtBool:
  ------------------
  |  Branch (1600:13): [True: 0, False: 0]
  ------------------
 1601|      0|                return getSource() == EShSourceHlsl;
 1602|      0|            case EbtInt16:
  ------------------
  |  Branch (1602:13): [True: 0, False: 0]
  ------------------
 1603|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) ||
  ------------------
  |  Branch (1603:24): [True: 0, False: 0]
  ------------------
 1604|      0|                       numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
  ------------------
  |  Branch (1604:24): [True: 0, False: 0]
  ------------------
 1605|      0|            case EbtInt8:
  ------------------
  |  Branch (1605:13): [True: 0, False: 0]
  ------------------
 1606|      0|                return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
 1607|      0|            default:
  ------------------
  |  Branch (1607:13): [True: 0, False: 0]
  ------------------
 1608|      0|                return false;
 1609|      0|            }
 1610|      0|        case EbtUint64:
  ------------------
  |  Branch (1610:9): [True: 0, False: 6]
  ------------------
 1611|      0|            switch (from) {
 1612|      0|            case EbtInt:
  ------------------
  |  Branch (1612:13): [True: 0, False: 0]
  ------------------
 1613|      0|            case EbtUint:
  ------------------
  |  Branch (1613:13): [True: 0, False: 0]
  ------------------
 1614|      0|            case EbtInt64:
  ------------------
  |  Branch (1614:13): [True: 0, False: 0]
  ------------------
 1615|      0|                return true;
 1616|      0|            case EbtInt16:
  ------------------
  |  Branch (1616:13): [True: 0, False: 0]
  ------------------
 1617|      0|            case EbtUint16:
  ------------------
  |  Branch (1617:13): [True: 0, False: 0]
  ------------------
 1618|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) ||
  ------------------
  |  Branch (1618:24): [True: 0, False: 0]
  ------------------
 1619|      0|                	numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
  ------------------
  |  Branch (1619:18): [True: 0, False: 0]
  ------------------
 1620|      0|            case EbtInt8:
  ------------------
  |  Branch (1620:13): [True: 0, False: 0]
  ------------------
 1621|      0|            case EbtUint8:
  ------------------
  |  Branch (1621:13): [True: 0, False: 0]
  ------------------
 1622|      0|                return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
 1623|      0|            default:
  ------------------
  |  Branch (1623:13): [True: 0, False: 0]
  ------------------
 1624|      0|                return false;
 1625|      0|            }
 1626|      0|        case EbtInt64:
  ------------------
  |  Branch (1626:9): [True: 0, False: 6]
  ------------------
 1627|      0|            switch (from) {
 1628|      0|            case EbtInt:
  ------------------
  |  Branch (1628:13): [True: 0, False: 0]
  ------------------
 1629|      0|                return true;
 1630|      0|            case EbtInt8:
  ------------------
  |  Branch (1630:13): [True: 0, False: 0]
  ------------------
 1631|      0|                return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
 1632|      0|            case EbtInt16:
  ------------------
  |  Branch (1632:13): [True: 0, False: 0]
  ------------------
 1633|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) ||
  ------------------
  |  Branch (1633:24): [True: 0, False: 0]
  ------------------
 1634|      0|				       numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types);
  ------------------
  |  Branch (1634:12): [True: 0, False: 0]
  ------------------
 1635|      0|            default:
  ------------------
  |  Branch (1635:13): [True: 0, False: 0]
  ------------------
 1636|      0|                return false;
 1637|      0|            }
 1638|      0|        case EbtFloat16:
  ------------------
  |  Branch (1638:9): [True: 0, False: 6]
  ------------------
 1639|      0|            switch (from) {
 1640|      0|            case EbtInt16:
  ------------------
  |  Branch (1640:13): [True: 0, False: 0]
  ------------------
 1641|      0|            case EbtUint16:
  ------------------
  |  Branch (1641:13): [True: 0, False: 0]
  ------------------
 1642|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16);
 1643|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (1643:13): [True: 0, False: 0]
  ------------------
 1644|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (1644:13): [True: 0, False: 0]
  ------------------
 1645|      0|                return true;
 1646|      0|            default:
  ------------------
  |  Branch (1646:13): [True: 0, False: 0]
  ------------------
 1647|      0|                break;
 1648|      0|            }
 1649|      0|            return false;
 1650|      0|        case EbtBFloat16:
  ------------------
  |  Branch (1650:9): [True: 0, False: 6]
  ------------------
 1651|      0|            switch (from) {
 1652|      0|            case EbtFloatE5M2:
  ------------------
  |  Branch (1652:13): [True: 0, False: 0]
  ------------------
 1653|      0|            case EbtFloatE4M3:
  ------------------
  |  Branch (1653:13): [True: 0, False: 0]
  ------------------
 1654|      0|                return true;
 1655|      0|            default:
  ------------------
  |  Branch (1655:13): [True: 0, False: 0]
  ------------------
 1656|      0|                break;
 1657|      0|            }
 1658|      0|            return false;
 1659|      0|        case EbtUint16:
  ------------------
  |  Branch (1659:9): [True: 0, False: 6]
  ------------------
 1660|      0|            switch (from) {
 1661|      0|            case EbtInt16:
  ------------------
  |  Branch (1661:13): [True: 0, False: 0]
  ------------------
 1662|      0|                return numericFeatures.contains(TNumericFeatures::gpu_shader_int16);
 1663|      0|            default:
  ------------------
  |  Branch (1663:13): [True: 0, False: 0]
  ------------------
 1664|      0|                break;
 1665|      0|            }
 1666|      0|            return false;
 1667|      0|        default:
  ------------------
  |  Branch (1667:9): [True: 0, False: 6]
  ------------------
 1668|      0|            return false;
 1669|      6|        }
 1670|      6|    }
 1671|       |
 1672|      0|    return false;
 1673|      6|}
_ZNK7glslang13TIntermediate22mapTypeToConstructorOpERKNS_5TTypeE:
 1860|  1.61k|{
 1861|  1.61k|    TOperator op = EOpNull;
 1862|       |
 1863|  1.61k|    if (type.getQualifier().isNonUniform())
  ------------------
  |  Branch (1863:9): [True: 0, False: 1.61k]
  ------------------
 1864|      0|        return EOpConstructNonuniform;
 1865|       |
 1866|  1.61k|    if (type.isCoopMatNV())
  ------------------
  |  Branch (1866:9): [True: 0, False: 1.61k]
  ------------------
 1867|      0|        return EOpConstructCooperativeMatrixNV;
 1868|       |
 1869|  1.61k|    if (type.isCoopMatKHR())
  ------------------
  |  Branch (1869:9): [True: 0, False: 1.61k]
  ------------------
 1870|      0|        return EOpConstructCooperativeMatrixKHR;
 1871|       |
 1872|  1.61k|    if (type.isCoopVecOrLongVector())
  ------------------
  |  Branch (1872:9): [True: 0, False: 1.61k]
  ------------------
 1873|      0|        return EOpConstructCooperativeVectorNV;
 1874|       |
 1875|  1.61k|    switch (type.getBasicType()) {
 1876|      0|    case EbtStruct:
  ------------------
  |  Branch (1876:5): [True: 0, False: 1.61k]
  ------------------
 1877|      0|        op = EOpConstructStruct;
 1878|      0|        break;
 1879|     90|    case EbtSampler:
  ------------------
  |  Branch (1879:5): [True: 90, False: 1.52k]
  ------------------
 1880|     90|        if (type.getSampler().isCombined())
  ------------------
  |  Branch (1880:13): [True: 90, False: 0]
  ------------------
 1881|     90|            op = EOpConstructTextureSampler;
 1882|     90|        break;
 1883|    450|    case EbtFloat:
  ------------------
  |  Branch (1883:5): [True: 450, False: 1.16k]
  ------------------
 1884|    450|        if (type.isMatrix()) {
  ------------------
  |  Branch (1884:13): [True: 0, False: 450]
  ------------------
 1885|      0|            switch (type.getMatrixCols()) {
 1886|      0|            case 2:
  ------------------
  |  Branch (1886:13): [True: 0, False: 0]
  ------------------
 1887|      0|                switch (type.getMatrixRows()) {
 1888|      0|                case 2: op = EOpConstructMat2x2; break;
  ------------------
  |  Branch (1888:17): [True: 0, False: 0]
  ------------------
 1889|      0|                case 3: op = EOpConstructMat2x3; break;
  ------------------
  |  Branch (1889:17): [True: 0, False: 0]
  ------------------
 1890|      0|                case 4: op = EOpConstructMat2x4; break;
  ------------------
  |  Branch (1890:17): [True: 0, False: 0]
  ------------------
 1891|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1891:17): [True: 0, False: 0]
  ------------------
 1892|      0|                }
 1893|      0|                break;
 1894|      0|            case 3:
  ------------------
  |  Branch (1894:13): [True: 0, False: 0]
  ------------------
 1895|      0|                switch (type.getMatrixRows()) {
 1896|      0|                case 2: op = EOpConstructMat3x2; break;
  ------------------
  |  Branch (1896:17): [True: 0, False: 0]
  ------------------
 1897|      0|                case 3: op = EOpConstructMat3x3; break;
  ------------------
  |  Branch (1897:17): [True: 0, False: 0]
  ------------------
 1898|      0|                case 4: op = EOpConstructMat3x4; break;
  ------------------
  |  Branch (1898:17): [True: 0, False: 0]
  ------------------
 1899|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1899:17): [True: 0, False: 0]
  ------------------
 1900|      0|                }
 1901|      0|                break;
 1902|      0|            case 4:
  ------------------
  |  Branch (1902:13): [True: 0, False: 0]
  ------------------
 1903|      0|                switch (type.getMatrixRows()) {
 1904|      0|                case 2: op = EOpConstructMat4x2; break;
  ------------------
  |  Branch (1904:17): [True: 0, False: 0]
  ------------------
 1905|      0|                case 3: op = EOpConstructMat4x3; break;
  ------------------
  |  Branch (1905:17): [True: 0, False: 0]
  ------------------
 1906|      0|                case 4: op = EOpConstructMat4x4; break;
  ------------------
  |  Branch (1906:17): [True: 0, False: 0]
  ------------------
 1907|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1907:17): [True: 0, False: 0]
  ------------------
 1908|      0|                }
 1909|      0|                break;
 1910|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (1910:13): [True: 0, False: 0]
  ------------------
 1911|      0|            }
 1912|    450|        } else {
 1913|    450|            switch(type.getVectorSize()) {
 1914|      0|            case 1: op = EOpConstructFloat; break;
  ------------------
  |  Branch (1914:13): [True: 0, False: 450]
  ------------------
 1915|     18|            case 2: op = EOpConstructVec2;  break;
  ------------------
  |  Branch (1915:13): [True: 18, False: 432]
  ------------------
 1916|      0|            case 3: op = EOpConstructVec3;  break;
  ------------------
  |  Branch (1916:13): [True: 0, False: 450]
  ------------------
 1917|    432|            case 4: op = EOpConstructVec4;  break;
  ------------------
  |  Branch (1917:13): [True: 432, False: 18]
  ------------------
 1918|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (1918:13): [True: 0, False: 450]
  ------------------
 1919|    450|            }
 1920|    450|        }
 1921|    450|        break;
 1922|  1.02k|    case EbtInt:
  ------------------
  |  Branch (1922:5): [True: 1.02k, False: 590]
  ------------------
 1923|  1.02k|        if (type.getMatrixCols()) {
  ------------------
  |  Branch (1923:13): [True: 0, False: 1.02k]
  ------------------
 1924|      0|            switch (type.getMatrixCols()) {
  ------------------
  |  Branch (1924:21): [True: 0, False: 0]
  ------------------
 1925|      0|            case 2:
  ------------------
  |  Branch (1925:13): [True: 0, False: 0]
  ------------------
 1926|      0|                switch (type.getMatrixRows()) {
 1927|      0|                case 2: op = EOpConstructIMat2x2; break;
  ------------------
  |  Branch (1927:17): [True: 0, False: 0]
  ------------------
 1928|      0|                case 3: op = EOpConstructIMat2x3; break;
  ------------------
  |  Branch (1928:17): [True: 0, False: 0]
  ------------------
 1929|      0|                case 4: op = EOpConstructIMat2x4; break;
  ------------------
  |  Branch (1929:17): [True: 0, False: 0]
  ------------------
 1930|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1930:17): [True: 0, False: 0]
  ------------------
 1931|      0|                }
 1932|      0|                break;
 1933|      0|            case 3:
  ------------------
  |  Branch (1933:13): [True: 0, False: 0]
  ------------------
 1934|      0|                switch (type.getMatrixRows()) {
 1935|      0|                case 2: op = EOpConstructIMat3x2; break;
  ------------------
  |  Branch (1935:17): [True: 0, False: 0]
  ------------------
 1936|      0|                case 3: op = EOpConstructIMat3x3; break;
  ------------------
  |  Branch (1936:17): [True: 0, False: 0]
  ------------------
 1937|      0|                case 4: op = EOpConstructIMat3x4; break;
  ------------------
  |  Branch (1937:17): [True: 0, False: 0]
  ------------------
 1938|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1938:17): [True: 0, False: 0]
  ------------------
 1939|      0|                }
 1940|      0|                break;
 1941|      0|            case 4:
  ------------------
  |  Branch (1941:13): [True: 0, False: 0]
  ------------------
 1942|      0|                switch (type.getMatrixRows()) {
 1943|      0|                case 2: op = EOpConstructIMat4x2; break;
  ------------------
  |  Branch (1943:17): [True: 0, False: 0]
  ------------------
 1944|      0|                case 3: op = EOpConstructIMat4x3; break;
  ------------------
  |  Branch (1944:17): [True: 0, False: 0]
  ------------------
 1945|      0|                case 4: op = EOpConstructIMat4x4; break;
  ------------------
  |  Branch (1945:17): [True: 0, False: 0]
  ------------------
 1946|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1946:17): [True: 0, False: 0]
  ------------------
 1947|      0|                }
 1948|      0|                break;
 1949|      0|            }
 1950|  1.02k|        } else {
 1951|  1.02k|            switch(type.getVectorSize()) {
 1952|    399|            case 1: op = EOpConstructInt;   break;
  ------------------
  |  Branch (1952:13): [True: 399, False: 628]
  ------------------
 1953|    276|            case 2: op = EOpConstructIVec2; break;
  ------------------
  |  Branch (1953:13): [True: 276, False: 751]
  ------------------
 1954|    340|            case 3: op = EOpConstructIVec3; break;
  ------------------
  |  Branch (1954:13): [True: 340, False: 687]
  ------------------
 1955|     12|            case 4: op = EOpConstructIVec4; break;
  ------------------
  |  Branch (1955:13): [True: 12, False: 1.01k]
  ------------------
 1956|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (1956:13): [True: 0, False: 1.02k]
  ------------------
 1957|  1.02k|            }
 1958|  1.02k|        }
 1959|  1.02k|        break;
 1960|  1.02k|    case EbtUint:
  ------------------
  |  Branch (1960:5): [True: 50, False: 1.56k]
  ------------------
 1961|     50|        if (type.getMatrixCols()) {
  ------------------
  |  Branch (1961:13): [True: 0, False: 50]
  ------------------
 1962|      0|            switch (type.getMatrixCols()) {
  ------------------
  |  Branch (1962:21): [True: 0, False: 0]
  ------------------
 1963|      0|            case 2:
  ------------------
  |  Branch (1963:13): [True: 0, False: 0]
  ------------------
 1964|      0|                switch (type.getMatrixRows()) {
 1965|      0|                case 2: op = EOpConstructUMat2x2; break;
  ------------------
  |  Branch (1965:17): [True: 0, False: 0]
  ------------------
 1966|      0|                case 3: op = EOpConstructUMat2x3; break;
  ------------------
  |  Branch (1966:17): [True: 0, False: 0]
  ------------------
 1967|      0|                case 4: op = EOpConstructUMat2x4; break;
  ------------------
  |  Branch (1967:17): [True: 0, False: 0]
  ------------------
 1968|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1968:17): [True: 0, False: 0]
  ------------------
 1969|      0|                }
 1970|      0|                break;
 1971|      0|            case 3:
  ------------------
  |  Branch (1971:13): [True: 0, False: 0]
  ------------------
 1972|      0|                switch (type.getMatrixRows()) {
 1973|      0|                case 2: op = EOpConstructUMat3x2; break;
  ------------------
  |  Branch (1973:17): [True: 0, False: 0]
  ------------------
 1974|      0|                case 3: op = EOpConstructUMat3x3; break;
  ------------------
  |  Branch (1974:17): [True: 0, False: 0]
  ------------------
 1975|      0|                case 4: op = EOpConstructUMat3x4; break;
  ------------------
  |  Branch (1975:17): [True: 0, False: 0]
  ------------------
 1976|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1976:17): [True: 0, False: 0]
  ------------------
 1977|      0|                }
 1978|      0|                break;
 1979|      0|            case 4:
  ------------------
  |  Branch (1979:13): [True: 0, False: 0]
  ------------------
 1980|      0|                switch (type.getMatrixRows()) {
 1981|      0|                case 2: op = EOpConstructUMat4x2; break;
  ------------------
  |  Branch (1981:17): [True: 0, False: 0]
  ------------------
 1982|      0|                case 3: op = EOpConstructUMat4x3; break;
  ------------------
  |  Branch (1982:17): [True: 0, False: 0]
  ------------------
 1983|      0|                case 4: op = EOpConstructUMat4x4; break;
  ------------------
  |  Branch (1983:17): [True: 0, False: 0]
  ------------------
 1984|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (1984:17): [True: 0, False: 0]
  ------------------
 1985|      0|                }
 1986|      0|                break;
 1987|      0|            }
 1988|     50|        } else {
 1989|     50|            switch(type.getVectorSize()) {
 1990|      0|            case 1: op = EOpConstructUint;  break;
  ------------------
  |  Branch (1990:13): [True: 0, False: 50]
  ------------------
 1991|      0|            case 2: op = EOpConstructUVec2; break;
  ------------------
  |  Branch (1991:13): [True: 0, False: 50]
  ------------------
 1992|     50|            case 3: op = EOpConstructUVec3; break;
  ------------------
  |  Branch (1992:13): [True: 50, False: 0]
  ------------------
 1993|      0|            case 4: op = EOpConstructUVec4; break;
  ------------------
  |  Branch (1993:13): [True: 0, False: 50]
  ------------------
 1994|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (1994:13): [True: 0, False: 50]
  ------------------
 1995|     50|            }
 1996|     50|        }
 1997|     50|        break;
 1998|     50|    case EbtBool:
  ------------------
  |  Branch (1998:5): [True: 0, False: 1.61k]
  ------------------
 1999|      0|        if (type.getMatrixCols()) {
  ------------------
  |  Branch (1999:13): [True: 0, False: 0]
  ------------------
 2000|      0|            switch (type.getMatrixCols()) {
  ------------------
  |  Branch (2000:21): [True: 0, False: 0]
  ------------------
 2001|      0|            case 2:
  ------------------
  |  Branch (2001:13): [True: 0, False: 0]
  ------------------
 2002|      0|                switch (type.getMatrixRows()) {
 2003|      0|                case 2: op = EOpConstructBMat2x2; break;
  ------------------
  |  Branch (2003:17): [True: 0, False: 0]
  ------------------
 2004|      0|                case 3: op = EOpConstructBMat2x3; break;
  ------------------
  |  Branch (2004:17): [True: 0, False: 0]
  ------------------
 2005|      0|                case 4: op = EOpConstructBMat2x4; break;
  ------------------
  |  Branch (2005:17): [True: 0, False: 0]
  ------------------
 2006|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2006:17): [True: 0, False: 0]
  ------------------
 2007|      0|                }
 2008|      0|                break;
 2009|      0|            case 3:
  ------------------
  |  Branch (2009:13): [True: 0, False: 0]
  ------------------
 2010|      0|                switch (type.getMatrixRows()) {
 2011|      0|                case 2: op = EOpConstructBMat3x2; break;
  ------------------
  |  Branch (2011:17): [True: 0, False: 0]
  ------------------
 2012|      0|                case 3: op = EOpConstructBMat3x3; break;
  ------------------
  |  Branch (2012:17): [True: 0, False: 0]
  ------------------
 2013|      0|                case 4: op = EOpConstructBMat3x4; break;
  ------------------
  |  Branch (2013:17): [True: 0, False: 0]
  ------------------
 2014|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2014:17): [True: 0, False: 0]
  ------------------
 2015|      0|                }
 2016|      0|                break;
 2017|      0|            case 4:
  ------------------
  |  Branch (2017:13): [True: 0, False: 0]
  ------------------
 2018|      0|                switch (type.getMatrixRows()) {
 2019|      0|                case 2: op = EOpConstructBMat4x2; break;
  ------------------
  |  Branch (2019:17): [True: 0, False: 0]
  ------------------
 2020|      0|                case 3: op = EOpConstructBMat4x3; break;
  ------------------
  |  Branch (2020:17): [True: 0, False: 0]
  ------------------
 2021|      0|                case 4: op = EOpConstructBMat4x4; break;
  ------------------
  |  Branch (2021:17): [True: 0, False: 0]
  ------------------
 2022|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2022:17): [True: 0, False: 0]
  ------------------
 2023|      0|                }
 2024|      0|                break;
 2025|      0|            }
 2026|      0|        } else {
 2027|      0|            switch(type.getVectorSize()) {
 2028|      0|            case 1:  op = EOpConstructBool;  break;
  ------------------
  |  Branch (2028:13): [True: 0, False: 0]
  ------------------
 2029|      0|            case 2:  op = EOpConstructBVec2; break;
  ------------------
  |  Branch (2029:13): [True: 0, False: 0]
  ------------------
 2030|      0|            case 3:  op = EOpConstructBVec3; break;
  ------------------
  |  Branch (2030:13): [True: 0, False: 0]
  ------------------
 2031|      0|            case 4:  op = EOpConstructBVec4; break;
  ------------------
  |  Branch (2031:13): [True: 0, False: 0]
  ------------------
 2032|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (2032:13): [True: 0, False: 0]
  ------------------
 2033|      0|            }
 2034|      0|        }
 2035|      0|        break;
 2036|      0|    case EbtDouble:
  ------------------
  |  Branch (2036:5): [True: 0, False: 1.61k]
  ------------------
 2037|      0|        if (type.getMatrixCols()) {
  ------------------
  |  Branch (2037:13): [True: 0, False: 0]
  ------------------
 2038|      0|            switch (type.getMatrixCols()) {
  ------------------
  |  Branch (2038:21): [True: 0, False: 0]
  ------------------
 2039|      0|            case 2:
  ------------------
  |  Branch (2039:13): [True: 0, False: 0]
  ------------------
 2040|      0|                switch (type.getMatrixRows()) {
 2041|      0|                case 2: op = EOpConstructDMat2x2; break;
  ------------------
  |  Branch (2041:17): [True: 0, False: 0]
  ------------------
 2042|      0|                case 3: op = EOpConstructDMat2x3; break;
  ------------------
  |  Branch (2042:17): [True: 0, False: 0]
  ------------------
 2043|      0|                case 4: op = EOpConstructDMat2x4; break;
  ------------------
  |  Branch (2043:17): [True: 0, False: 0]
  ------------------
 2044|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2044:17): [True: 0, False: 0]
  ------------------
 2045|      0|                }
 2046|      0|                break;
 2047|      0|            case 3:
  ------------------
  |  Branch (2047:13): [True: 0, False: 0]
  ------------------
 2048|      0|                switch (type.getMatrixRows()) {
 2049|      0|                case 2: op = EOpConstructDMat3x2; break;
  ------------------
  |  Branch (2049:17): [True: 0, False: 0]
  ------------------
 2050|      0|                case 3: op = EOpConstructDMat3x3; break;
  ------------------
  |  Branch (2050:17): [True: 0, False: 0]
  ------------------
 2051|      0|                case 4: op = EOpConstructDMat3x4; break;
  ------------------
  |  Branch (2051:17): [True: 0, False: 0]
  ------------------
 2052|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2052:17): [True: 0, False: 0]
  ------------------
 2053|      0|                }
 2054|      0|                break;
 2055|      0|            case 4:
  ------------------
  |  Branch (2055:13): [True: 0, False: 0]
  ------------------
 2056|      0|                switch (type.getMatrixRows()) {
 2057|      0|                case 2: op = EOpConstructDMat4x2; break;
  ------------------
  |  Branch (2057:17): [True: 0, False: 0]
  ------------------
 2058|      0|                case 3: op = EOpConstructDMat4x3; break;
  ------------------
  |  Branch (2058:17): [True: 0, False: 0]
  ------------------
 2059|      0|                case 4: op = EOpConstructDMat4x4; break;
  ------------------
  |  Branch (2059:17): [True: 0, False: 0]
  ------------------
 2060|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2060:17): [True: 0, False: 0]
  ------------------
 2061|      0|                }
 2062|      0|                break;
 2063|      0|            }
 2064|      0|        } else {
 2065|      0|            switch(type.getVectorSize()) {
 2066|      0|            case 1: op = EOpConstructDouble; break;
  ------------------
  |  Branch (2066:13): [True: 0, False: 0]
  ------------------
 2067|      0|            case 2: op = EOpConstructDVec2;  break;
  ------------------
  |  Branch (2067:13): [True: 0, False: 0]
  ------------------
 2068|      0|            case 3: op = EOpConstructDVec3;  break;
  ------------------
  |  Branch (2068:13): [True: 0, False: 0]
  ------------------
 2069|      0|            case 4: op = EOpConstructDVec4;  break;
  ------------------
  |  Branch (2069:13): [True: 0, False: 0]
  ------------------
 2070|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (2070:13): [True: 0, False: 0]
  ------------------
 2071|      0|            }
 2072|      0|        }
 2073|      0|        break;
 2074|      0|    case EbtFloat16:
  ------------------
  |  Branch (2074:5): [True: 0, False: 1.61k]
  ------------------
 2075|      0|        if (type.getMatrixCols()) {
  ------------------
  |  Branch (2075:13): [True: 0, False: 0]
  ------------------
 2076|      0|            switch (type.getMatrixCols()) {
  ------------------
  |  Branch (2076:21): [True: 0, False: 0]
  ------------------
 2077|      0|            case 2:
  ------------------
  |  Branch (2077:13): [True: 0, False: 0]
  ------------------
 2078|      0|                switch (type.getMatrixRows()) {
 2079|      0|                case 2: op = EOpConstructF16Mat2x2; break;
  ------------------
  |  Branch (2079:17): [True: 0, False: 0]
  ------------------
 2080|      0|                case 3: op = EOpConstructF16Mat2x3; break;
  ------------------
  |  Branch (2080:17): [True: 0, False: 0]
  ------------------
 2081|      0|                case 4: op = EOpConstructF16Mat2x4; break;
  ------------------
  |  Branch (2081:17): [True: 0, False: 0]
  ------------------
 2082|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2082:17): [True: 0, False: 0]
  ------------------
 2083|      0|                }
 2084|      0|                break;
 2085|      0|            case 3:
  ------------------
  |  Branch (2085:13): [True: 0, False: 0]
  ------------------
 2086|      0|                switch (type.getMatrixRows()) {
 2087|      0|                case 2: op = EOpConstructF16Mat3x2; break;
  ------------------
  |  Branch (2087:17): [True: 0, False: 0]
  ------------------
 2088|      0|                case 3: op = EOpConstructF16Mat3x3; break;
  ------------------
  |  Branch (2088:17): [True: 0, False: 0]
  ------------------
 2089|      0|                case 4: op = EOpConstructF16Mat3x4; break;
  ------------------
  |  Branch (2089:17): [True: 0, False: 0]
  ------------------
 2090|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2090:17): [True: 0, False: 0]
  ------------------
 2091|      0|                }
 2092|      0|                break;
 2093|      0|            case 4:
  ------------------
  |  Branch (2093:13): [True: 0, False: 0]
  ------------------
 2094|      0|                switch (type.getMatrixRows()) {
 2095|      0|                case 2: op = EOpConstructF16Mat4x2; break;
  ------------------
  |  Branch (2095:17): [True: 0, False: 0]
  ------------------
 2096|      0|                case 3: op = EOpConstructF16Mat4x3; break;
  ------------------
  |  Branch (2096:17): [True: 0, False: 0]
  ------------------
 2097|      0|                case 4: op = EOpConstructF16Mat4x4; break;
  ------------------
  |  Branch (2097:17): [True: 0, False: 0]
  ------------------
 2098|      0|                default: break; // some compilers want this
  ------------------
  |  Branch (2098:17): [True: 0, False: 0]
  ------------------
 2099|      0|                }
 2100|      0|                break;
 2101|      0|            }
 2102|      0|        }
 2103|      0|        else {
 2104|      0|            switch (type.getVectorSize()) {
 2105|      0|            case 1: op = EOpConstructFloat16;  break;
  ------------------
  |  Branch (2105:13): [True: 0, False: 0]
  ------------------
 2106|      0|            case 2: op = EOpConstructF16Vec2;  break;
  ------------------
  |  Branch (2106:13): [True: 0, False: 0]
  ------------------
 2107|      0|            case 3: op = EOpConstructF16Vec3;  break;
  ------------------
  |  Branch (2107:13): [True: 0, False: 0]
  ------------------
 2108|      0|            case 4: op = EOpConstructF16Vec4;  break;
  ------------------
  |  Branch (2108:13): [True: 0, False: 0]
  ------------------
 2109|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (2109:13): [True: 0, False: 0]
  ------------------
 2110|      0|            }
 2111|      0|        }
 2112|      0|        break;
 2113|      0|    case EbtBFloat16:
  ------------------
  |  Branch (2113:5): [True: 0, False: 1.61k]
  ------------------
 2114|      0|        switch (type.getVectorSize()) {
 2115|      0|        case 1: op = EOpConstructBFloat16;  break;
  ------------------
  |  Branch (2115:9): [True: 0, False: 0]
  ------------------
 2116|      0|        case 2: op = EOpConstructBF16Vec2;  break;
  ------------------
  |  Branch (2116:9): [True: 0, False: 0]
  ------------------
 2117|      0|        case 3: op = EOpConstructBF16Vec3;  break;
  ------------------
  |  Branch (2117:9): [True: 0, False: 0]
  ------------------
 2118|      0|        case 4: op = EOpConstructBF16Vec4;  break;
  ------------------
  |  Branch (2118:9): [True: 0, False: 0]
  ------------------
 2119|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2119:9): [True: 0, False: 0]
  ------------------
 2120|      0|        }
 2121|      0|        break;
 2122|      0|    case EbtFloatE5M2:
  ------------------
  |  Branch (2122:5): [True: 0, False: 1.61k]
  ------------------
 2123|      0|        switch (type.getVectorSize()) {
 2124|      0|        case 1: op = EOpConstructFloatE5M2;  break;
  ------------------
  |  Branch (2124:9): [True: 0, False: 0]
  ------------------
 2125|      0|        case 2: op = EOpConstructFloatE5M2Vec2;  break;
  ------------------
  |  Branch (2125:9): [True: 0, False: 0]
  ------------------
 2126|      0|        case 3: op = EOpConstructFloatE5M2Vec3;  break;
  ------------------
  |  Branch (2126:9): [True: 0, False: 0]
  ------------------
 2127|      0|        case 4: op = EOpConstructFloatE5M2Vec4;  break;
  ------------------
  |  Branch (2127:9): [True: 0, False: 0]
  ------------------
 2128|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2128:9): [True: 0, False: 0]
  ------------------
 2129|      0|        }
 2130|      0|        break;
 2131|      0|    case EbtFloatE4M3:
  ------------------
  |  Branch (2131:5): [True: 0, False: 1.61k]
  ------------------
 2132|      0|        switch (type.getVectorSize()) {
 2133|      0|        case 1: op = EOpConstructFloatE4M3;  break;
  ------------------
  |  Branch (2133:9): [True: 0, False: 0]
  ------------------
 2134|      0|        case 2: op = EOpConstructFloatE4M3Vec2;  break;
  ------------------
  |  Branch (2134:9): [True: 0, False: 0]
  ------------------
 2135|      0|        case 3: op = EOpConstructFloatE4M3Vec3;  break;
  ------------------
  |  Branch (2135:9): [True: 0, False: 0]
  ------------------
 2136|      0|        case 4: op = EOpConstructFloatE4M3Vec4;  break;
  ------------------
  |  Branch (2136:9): [True: 0, False: 0]
  ------------------
 2137|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2137:9): [True: 0, False: 0]
  ------------------
 2138|      0|        }
 2139|      0|        break;
 2140|      0|    case EbtInt8:
  ------------------
  |  Branch (2140:5): [True: 0, False: 1.61k]
  ------------------
 2141|      0|        switch(type.getVectorSize()) {
 2142|      0|        case 1: op = EOpConstructInt8;   break;
  ------------------
  |  Branch (2142:9): [True: 0, False: 0]
  ------------------
 2143|      0|        case 2: op = EOpConstructI8Vec2; break;
  ------------------
  |  Branch (2143:9): [True: 0, False: 0]
  ------------------
 2144|      0|        case 3: op = EOpConstructI8Vec3; break;
  ------------------
  |  Branch (2144:9): [True: 0, False: 0]
  ------------------
 2145|      0|        case 4: op = EOpConstructI8Vec4; break;
  ------------------
  |  Branch (2145:9): [True: 0, False: 0]
  ------------------
 2146|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2146:9): [True: 0, False: 0]
  ------------------
 2147|      0|        }
 2148|      0|        break;
 2149|      0|    case EbtUint8:
  ------------------
  |  Branch (2149:5): [True: 0, False: 1.61k]
  ------------------
 2150|      0|        switch(type.getVectorSize()) {
 2151|      0|        case 1: op = EOpConstructUint8;  break;
  ------------------
  |  Branch (2151:9): [True: 0, False: 0]
  ------------------
 2152|      0|        case 2: op = EOpConstructU8Vec2; break;
  ------------------
  |  Branch (2152:9): [True: 0, False: 0]
  ------------------
 2153|      0|        case 3: op = EOpConstructU8Vec3; break;
  ------------------
  |  Branch (2153:9): [True: 0, False: 0]
  ------------------
 2154|      0|        case 4: op = EOpConstructU8Vec4; break;
  ------------------
  |  Branch (2154:9): [True: 0, False: 0]
  ------------------
 2155|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2155:9): [True: 0, False: 0]
  ------------------
 2156|      0|        }
 2157|      0|        break;
 2158|      0|    case EbtInt16:
  ------------------
  |  Branch (2158:5): [True: 0, False: 1.61k]
  ------------------
 2159|      0|        switch(type.getVectorSize()) {
 2160|      0|        case 1: op = EOpConstructInt16;   break;
  ------------------
  |  Branch (2160:9): [True: 0, False: 0]
  ------------------
 2161|      0|        case 2: op = EOpConstructI16Vec2; break;
  ------------------
  |  Branch (2161:9): [True: 0, False: 0]
  ------------------
 2162|      0|        case 3: op = EOpConstructI16Vec3; break;
  ------------------
  |  Branch (2162:9): [True: 0, False: 0]
  ------------------
 2163|      0|        case 4: op = EOpConstructI16Vec4; break;
  ------------------
  |  Branch (2163:9): [True: 0, False: 0]
  ------------------
 2164|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2164:9): [True: 0, False: 0]
  ------------------
 2165|      0|        }
 2166|      0|        break;
 2167|      0|    case EbtUint16:
  ------------------
  |  Branch (2167:5): [True: 0, False: 1.61k]
  ------------------
 2168|      0|        switch(type.getVectorSize()) {
 2169|      0|        case 1: op = EOpConstructUint16;  break;
  ------------------
  |  Branch (2169:9): [True: 0, False: 0]
  ------------------
 2170|      0|        case 2: op = EOpConstructU16Vec2; break;
  ------------------
  |  Branch (2170:9): [True: 0, False: 0]
  ------------------
 2171|      0|        case 3: op = EOpConstructU16Vec3; break;
  ------------------
  |  Branch (2171:9): [True: 0, False: 0]
  ------------------
 2172|      0|        case 4: op = EOpConstructU16Vec4; break;
  ------------------
  |  Branch (2172:9): [True: 0, False: 0]
  ------------------
 2173|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2173:9): [True: 0, False: 0]
  ------------------
 2174|      0|        }
 2175|      0|        break;
 2176|      0|    case EbtInt64:
  ------------------
  |  Branch (2176:5): [True: 0, False: 1.61k]
  ------------------
 2177|      0|        switch(type.getVectorSize()) {
 2178|      0|        case 1: op = EOpConstructInt64;   break;
  ------------------
  |  Branch (2178:9): [True: 0, False: 0]
  ------------------
 2179|      0|        case 2: op = EOpConstructI64Vec2; break;
  ------------------
  |  Branch (2179:9): [True: 0, False: 0]
  ------------------
 2180|      0|        case 3: op = EOpConstructI64Vec3; break;
  ------------------
  |  Branch (2180:9): [True: 0, False: 0]
  ------------------
 2181|      0|        case 4: op = EOpConstructI64Vec4; break;
  ------------------
  |  Branch (2181:9): [True: 0, False: 0]
  ------------------
 2182|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2182:9): [True: 0, False: 0]
  ------------------
 2183|      0|        }
 2184|      0|        break;
 2185|      0|    case EbtUint64:
  ------------------
  |  Branch (2185:5): [True: 0, False: 1.61k]
  ------------------
 2186|      0|        switch(type.getVectorSize()) {
 2187|      0|        case 1: op = EOpConstructUint64;  break;
  ------------------
  |  Branch (2187:9): [True: 0, False: 0]
  ------------------
 2188|      0|        case 2: op = EOpConstructU64Vec2; break;
  ------------------
  |  Branch (2188:9): [True: 0, False: 0]
  ------------------
 2189|      0|        case 3: op = EOpConstructU64Vec3; break;
  ------------------
  |  Branch (2189:9): [True: 0, False: 0]
  ------------------
 2190|      0|        case 4: op = EOpConstructU64Vec4; break;
  ------------------
  |  Branch (2190:9): [True: 0, False: 0]
  ------------------
 2191|      0|        default: break; // some compilers want this
  ------------------
  |  Branch (2191:9): [True: 0, False: 0]
  ------------------
 2192|      0|        }
 2193|      0|        break;
 2194|      0|    case EbtReference:
  ------------------
  |  Branch (2194:5): [True: 0, False: 1.61k]
  ------------------
 2195|      0|        op = EOpConstructReference;
 2196|      0|        break;
 2197|       |
 2198|      0|    case EbtAccStruct:
  ------------------
  |  Branch (2198:5): [True: 0, False: 1.61k]
  ------------------
 2199|      0|        op = EOpConstructAccStruct;
 2200|      0|        break;
 2201|      0|    default:
  ------------------
  |  Branch (2201:5): [True: 0, False: 1.61k]
  ------------------
 2202|      0|        break;
 2203|  1.61k|    }
 2204|       |
 2205|  1.61k|    return op;
 2206|  1.61k|}
_ZN7glslang13TIntermediate13growAggregateEP11TIntermNodeS2_:
 2216|  22.2k|{
 2217|  22.2k|    if (left == nullptr && right == nullptr)
  ------------------
  |  Branch (2217:9): [True: 13.7k, False: 8.50k]
  |  Branch (2217:28): [True: 13.5k, False: 265]
  ------------------
 2218|  13.5k|        return nullptr;
 2219|       |
 2220|  8.76k|    TIntermAggregate* aggNode = nullptr;
 2221|  8.76k|    if (left != nullptr)
  ------------------
  |  Branch (2221:9): [True: 8.50k, False: 265]
  ------------------
 2222|  8.50k|        aggNode = left->getAsAggregate();
 2223|  8.76k|    if (aggNode == nullptr || aggNode->getOp() != EOpNull) {
  ------------------
  |  Branch (2223:9): [True: 2.26k, False: 6.50k]
  |  Branch (2223:31): [True: 285, False: 6.21k]
  ------------------
 2224|  2.55k|        aggNode = new TIntermAggregate;
 2225|  2.55k|        if (left != nullptr)
  ------------------
  |  Branch (2225:13): [True: 2.28k, False: 265]
  ------------------
 2226|  2.28k|            aggNode->getSequence().push_back(left);
 2227|  2.55k|    }
 2228|       |
 2229|  8.76k|    if (right != nullptr)
  ------------------
  |  Branch (2229:9): [True: 8.76k, False: 3]
  ------------------
 2230|  8.76k|        aggNode->getSequence().push_back(right);
 2231|       |
 2232|  8.76k|    return aggNode;
 2233|  22.2k|}
_ZN7glslang13TIntermediate13growAggregateEP11TIntermNodeS2_RKNS_10TSourceLocE:
 2236|  18.9k|{
 2237|  18.9k|    TIntermAggregate* aggNode = growAggregate(left, right);
 2238|  18.9k|    if (aggNode)
  ------------------
  |  Branch (2238:9): [True: 5.47k, False: 13.5k]
  ------------------
 2239|  5.47k|        aggNode->setLoc(loc);
 2240|       |
 2241|  18.9k|    return aggNode;
 2242|  18.9k|}
_ZN7glslang13TIntermediate13makeAggregateEP11TIntermNode:
 2284|    246|{
 2285|    246|    if (node == nullptr)
  ------------------
  |  Branch (2285:9): [True: 0, False: 246]
  ------------------
 2286|      0|        return nullptr;
 2287|       |
 2288|    246|    TIntermAggregate* aggNode = new TIntermAggregate;
 2289|    246|    aggNode->getSequence().push_back(node);
 2290|    246|    aggNode->setLoc(node->getLoc());
 2291|       |
 2292|    246|    return aggNode;
 2293|    246|}
_ZNK7glslang13TIntermediate16addConstantUnionERKNS_16TConstUnionArrayERKNS_5TTypeERKNS_10TSourceLocEb:
 2467|  10.9k|{
 2468|  10.9k|    TIntermConstantUnion* node = new TIntermConstantUnion(unionArray, t);
 2469|  10.9k|    node->getQualifier().storage = EvqConst;
 2470|  10.9k|    node->setLoc(loc);
 2471|  10.9k|    if (literal)
  ------------------
  |  Branch (2471:9): [True: 8.91k, False: 2.05k]
  ------------------
 2472|  8.91k|        node->setLiteral();
 2473|       |
 2474|  10.9k|    return node;
 2475|  10.9k|}
_ZNK7glslang13TIntermediate16addConstantUnionEiRKNS_10TSourceLocEb:
 2509|  9.08k|{
 2510|  9.08k|    TConstUnionArray unionArray(1);
 2511|  9.08k|    unionArray[0].setIConst(i);
 2512|       |
 2513|  9.08k|    return addConstantUnion(unionArray, TType(EbtInt, EvqConst), loc, literal);
 2514|  9.08k|}
_ZNK7glslang13TIntermediate16addConstantUnionEjRKNS_10TSourceLocEb:
 2517|    322|{
 2518|    322|    TConstUnionArray unionArray(1);
 2519|    322|    unionArray[0].setUConst(u);
 2520|       |
 2521|    322|    return addConstantUnion(unionArray, TType(EbtUint, EvqConst), loc, literal);
 2522|    322|}
_ZNK7glslang13TIntermediate16addConstantUnionEdNS_10TBasicTypeERKNS_10TSourceLocEb:
 2549|    411|{
 2550|    411|    assert(baseType == EbtFloat || baseType == EbtDouble || baseType == EbtFloat16 || baseType == EbtBFloat16 || baseType == EbtFloatE5M2 || baseType == EbtFloatE4M3);
 2551|       |
 2552|    411|    if (isEsProfile() && (baseType == EbtFloat || baseType == EbtFloat16)) {
  ------------------
  |  Branch (2552:9): [True: 0, False: 411]
  |  Branch (2552:27): [True: 0, False: 0]
  |  Branch (2552:51): [True: 0, False: 0]
  ------------------
 2553|      0|        int exponent = 0;
 2554|      0|        frexp(d, &exponent);
 2555|      0|        int minExp = baseType == EbtFloat ? -126 : -14;
  ------------------
  |  Branch (2555:22): [True: 0, False: 0]
  ------------------
 2556|      0|        int maxExp = baseType == EbtFloat ? 127 : 15;
  ------------------
  |  Branch (2556:22): [True: 0, False: 0]
  ------------------
 2557|      0|        if (exponent > maxExp) { //overflow, d = inf
  ------------------
  |  Branch (2557:13): [True: 0, False: 0]
  ------------------
 2558|      0|            d = std::numeric_limits<double>::infinity();
 2559|      0|        } else if (exponent < minExp) { //underflow, d = 0.0;
  ------------------
  |  Branch (2559:20): [True: 0, False: 0]
  ------------------
 2560|      0|            d = 0.0;
 2561|      0|        }
 2562|      0|    }
 2563|       |
 2564|    411|    TConstUnionArray unionArray(1);
 2565|    411|    unionArray[0].setDConst(d);
 2566|       |
 2567|    411|    return addConstantUnion(unionArray, TType(baseType, EvqConst), loc, literal);
 2568|    411|}
_ZN7glslang13TIntermediate12pushSelectorERNS_7TVectorIP11TIntermNodeEERKiRKNS_10TSourceLocE:
 2580|    222|{
 2581|    222|    TIntermConstantUnion* constIntNode = addConstantUnion(selector, loc);
 2582|    222|    sequence.push_back(constIntNode);
 2583|    222|}
_ZN7glslang13TIntermediate9addBranchENS_9TOperatorEPNS_12TIntermTypedERKNS_10TSourceLocE:
 2705|    234|{
 2706|    234|    TIntermBranch* node = new TIntermBranch(branchOp, expression);
 2707|    234|    node->setLoc(loc);
 2708|       |
 2709|    234|    return node;
 2710|    234|}
_ZN7glslang13TIntermBranch15updatePrecisionENS_19TPrecisionQualifierE:
 2715|    234|{
 2716|    234|    TIntermTyped* exp = getExpression();
 2717|    234|    if (exp == nullptr)
  ------------------
  |  Branch (2717:9): [True: 0, False: 234]
  ------------------
 2718|      0|        return;
 2719|       |
 2720|    234|    if (exp->getBasicType() == EbtInt || exp->getBasicType() == EbtUint ||
  ------------------
  |  Branch (2720:9): [True: 18, False: 216]
  |  Branch (2720:42): [True: 0, False: 216]
  ------------------
 2721|    234|        exp->getBasicType() == EbtFloat) {
  ------------------
  |  Branch (2721:9): [True: 216, False: 0]
  ------------------
 2722|    234|        if (parentPrecision != EpqNone && exp->getQualifier().precision == EpqNone) {
  ------------------
  |  Branch (2722:13): [True: 234, False: 0]
  |  Branch (2722:43): [True: 3, False: 231]
  ------------------
 2723|      3|            exp->propagatePrecision(parentPrecision);
 2724|      3|        }
 2725|    234|    }
 2726|    234|}
_ZN7glslang13TIntermediate21addSymbolLinkageNodesERPNS_16TIntermAggregateE11EShLanguageRNS_12TSymbolTableE:
 2848|     22|{
 2849|       |    // Add top-level nodes for declarations that must be checked cross
 2850|       |    // compilation unit by a linker, yet might not have been referenced
 2851|       |    // by the AST.
 2852|       |    //
 2853|       |    // Almost entirely, translation of symbols is driven by what's present
 2854|       |    // in the AST traversal, not by translating the symbol table.
 2855|       |    //
 2856|       |    // However, there are some special cases:
 2857|       |    //  - From the specification: "Special built-in inputs gl_VertexID and
 2858|       |    //    gl_InstanceID are also considered active vertex attributes."
 2859|       |    //  - Linker-based type mismatch error reporting needs to see all
 2860|       |    //    uniforms/ins/outs variables and blocks.
 2861|       |    //  - ftransform() can make gl_Vertex and gl_ModelViewProjectionMatrix active.
 2862|       |    //
 2863|       |
 2864|       |    // if (ftransformUsed) {
 2865|       |        // TODO: 1.1 lowering functionality: track ftransform() usage
 2866|       |    //    addSymbolLinkageNode(root, symbolTable, "gl_Vertex");
 2867|       |    //    addSymbolLinkageNode(root, symbolTable, "gl_ModelViewProjectionMatrix");
 2868|       |    //}
 2869|       |
 2870|     22|    if (language == EShLangVertex) {
  ------------------
  |  Branch (2870:9): [True: 11, False: 11]
  ------------------
 2871|     11|        addSymbolLinkageNode(linkage, symbolTable, "gl_VertexID");
 2872|     11|        if ((version < 140 && requestedExtensions.find(E_GL_EXT_draw_instanced) != requestedExtensions.end()) || version >= 140)
  ------------------
  |  Branch (2872:13): [True: 11, False: 0]
  |  Branch (2872:14): [True: 0, False: 11]
  |  Branch (2872:31): [True: 0, False: 0]
  |  Branch (2872:114): [True: 11, False: 0]
  ------------------
 2873|     11|            addSymbolLinkageNode(linkage, symbolTable, "gl_InstanceID");
 2874|     11|    }
 2875|       |
 2876|       |    // Add a child to the root node for the linker objects
 2877|     22|    linkage->setOperator(EOpLinkerObjects);
 2878|     22|    treeRoot = growAggregate(treeRoot, linkage);
 2879|     22|}
_ZN7glslang13TIntermediate20addSymbolLinkageNodeERPNS_16TIntermAggregateERNS_12TSymbolTableERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 2887|     22|{
 2888|     22|    TSymbol* symbol = symbolTable.find(name);
 2889|     22|    if (symbol)
  ------------------
  |  Branch (2889:9): [True: 0, False: 22]
  ------------------
 2890|      0|        addSymbolLinkageNode(linkage, *symbol->getAsVariable());
 2891|     22|}
_ZN7glslang13TIntermediate20addSymbolLinkageNodeERPNS_16TIntermAggregateERKNS_7TSymbolE:
 2894|    360|{
 2895|    360|    const TVariable* variable = symbol.getAsVariable();
 2896|    360|    if (! variable) {
  ------------------
  |  Branch (2896:9): [True: 0, False: 360]
  ------------------
 2897|       |        // This must be a member of an anonymous block, and we need to add the whole block
 2898|      0|        const TAnonMember* anon = symbol.getAsAnonMember();
 2899|      0|        variable = &anon->getAnonContainer();
 2900|      0|    }
 2901|    360|    TIntermSymbol* node = addSymbol(*variable);
 2902|    360|    linkage = growAggregate(linkage, node);
 2903|    360|}
_ZN7glslang13TIntermediate14addToCallGraphER9TInfoSinkRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS_14pool_allocatorIcEEEESB_:
 2910|    147|{
 2911|       |    // Duplicates are okay, but faster to not keep them, and they come grouped by caller,
 2912|       |    // as long as new ones are push on the same end we check on for duplicates
 2913|  3.53k|    for (TGraph::const_iterator call = callGraph.begin(); call != callGraph.end(); ++call) {
  ------------------
  |  Branch (2913:59): [True: 3.39k, False: 141]
  ------------------
 2914|  3.39k|        if (call->caller != caller)
  ------------------
  |  Branch (2914:13): [True: 0, False: 3.39k]
  ------------------
 2915|      0|            break;
 2916|  3.39k|        if (call->callee == callee)
  ------------------
  |  Branch (2916:13): [True: 6, False: 3.38k]
  ------------------
 2917|      6|            return;
 2918|  3.39k|    }
 2919|       |
 2920|    141|    callGraph.emplace_front(caller, callee);
 2921|    141|}
_ZNK7glslang15TIntermOperator13isConstructorEv:
 3151|  1.03k|{
 3152|  1.03k|    return op > EOpConstructGuardStart && op < EOpConstructGuardEnd;
  ------------------
  |  Branch (3152:12): [True: 654, False: 384]
  |  Branch (3152:43): [True: 654, False: 0]
  ------------------
 3153|  1.03k|}
_ZN7glslang13TIntermediate7promoteEPNS_15TIntermOperatorE:
 3163|  1.96k|{
 3164|  1.96k|    if (node == nullptr)
  ------------------
  |  Branch (3164:9): [True: 0, False: 1.96k]
  ------------------
 3165|      0|        return false;
 3166|       |
 3167|  1.96k|    if (node->getAsUnaryNode())
  ------------------
  |  Branch (3167:9): [True: 103, False: 1.86k]
  ------------------
 3168|    103|        return promoteUnary(*node->getAsUnaryNode());
 3169|       |
 3170|  1.86k|    if (node->getAsBinaryNode())
  ------------------
  |  Branch (3170:9): [True: 1.86k, False: 0]
  ------------------
 3171|  1.86k|        return promoteBinary(*node->getAsBinaryNode());
 3172|       |
 3173|      0|    if (node->getAsAggregate())
  ------------------
  |  Branch (3173:9): [True: 0, False: 0]
  ------------------
 3174|      0|        return promoteAggregate(*node->getAsAggregate());
 3175|       |
 3176|      0|    return false;
 3177|      0|}
_ZN7glslang13TIntermediate12promoteUnaryERNS_12TIntermUnaryE:
 3183|    103|{
 3184|    103|    const TOperator op    = node.getOp();
 3185|    103|    TIntermTyped* operand = node.getOperand();
 3186|       |
 3187|    103|    switch (op) {
 3188|      0|    case EOpLogicalNot:
  ------------------
  |  Branch (3188:5): [True: 0, False: 103]
  ------------------
 3189|       |        // Convert operand to a boolean type
 3190|      0|        if (operand->getBasicType() != EbtBool) {
  ------------------
  |  Branch (3190:13): [True: 0, False: 0]
  ------------------
 3191|       |            // Add constructor to boolean type. If that fails, we can't do it, so return false.
 3192|      0|            TIntermTyped* converted = addConversion(op, TType(EbtBool), operand);
 3193|      0|            if (converted == nullptr)
  ------------------
  |  Branch (3193:17): [True: 0, False: 0]
  ------------------
 3194|      0|                return false;
 3195|       |
 3196|       |            // Use the result of converting the node to a bool.
 3197|      0|            node.setOperand(operand = converted); // also updates stack variable
 3198|      0|        }
 3199|      0|        break;
 3200|      0|    case EOpBitwiseNot:
  ------------------
  |  Branch (3200:5): [True: 0, False: 103]
  ------------------
 3201|      0|        if (!isTypeInt(operand->getBasicType()))
  ------------------
  |  Branch (3201:13): [True: 0, False: 0]
  ------------------
 3202|      0|            return false;
 3203|      0|        break;
 3204|    103|    case EOpNegative:
  ------------------
  |  Branch (3204:5): [True: 103, False: 0]
  ------------------
 3205|    103|    case EOpPostIncrement:
  ------------------
  |  Branch (3205:5): [True: 0, False: 103]
  ------------------
 3206|    103|    case EOpPostDecrement:
  ------------------
  |  Branch (3206:5): [True: 0, False: 103]
  ------------------
 3207|    103|    case EOpPreIncrement:
  ------------------
  |  Branch (3207:5): [True: 0, False: 103]
  ------------------
 3208|    103|    case EOpPreDecrement:
  ------------------
  |  Branch (3208:5): [True: 0, False: 103]
  ------------------
 3209|    103|        if (!isTypeInt(operand->getBasicType()) &&
  ------------------
  |  Branch (3209:13): [True: 0, False: 103]
  ------------------
 3210|      0|            operand->getBasicType() != EbtFloat &&
  ------------------
  |  Branch (3210:13): [True: 0, False: 0]
  ------------------
 3211|      0|            operand->getBasicType() != EbtFloat16 &&
  ------------------
  |  Branch (3211:13): [True: 0, False: 0]
  ------------------
 3212|      0|            operand->getBasicType() != EbtDouble)
  ------------------
  |  Branch (3212:13): [True: 0, False: 0]
  ------------------
 3213|       |
 3214|      0|            return false;
 3215|    103|        break;
 3216|    103|    default:
  ------------------
  |  Branch (3216:5): [True: 0, False: 103]
  ------------------
 3217|       |        // HLSL uses this path for initial function signature finding for built-ins
 3218|       |        // taking a single argument, which generally don't participate in
 3219|       |        // operator-based type promotion (type conversion will occur later).
 3220|       |        // For now, scalar argument cases are relying on the setType() call below.
 3221|      0|        if (getSource() == EShSourceHlsl)
  ------------------
  |  Branch (3221:13): [True: 0, False: 0]
  ------------------
 3222|      0|            break;
 3223|       |
 3224|       |        // GLSL only allows integer arguments for the cases identified above in the
 3225|       |        // case statements.
 3226|      0|        if (operand->getBasicType() != EbtFloat)
  ------------------
  |  Branch (3226:13): [True: 0, False: 0]
  ------------------
 3227|      0|            return false;
 3228|    103|    }
 3229|       |
 3230|    103|    node.setType(operand->getType());
 3231|    103|    node.getWritableType().getQualifier().makeTemporary();
 3232|       |
 3233|    103|    return true;
 3234|    103|}
_ZN7glslang12TIntermUnary15updatePrecisionEv:
 3238|    538|{
 3239|    538|    if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
  ------------------
  |  Branch (3239:9): [True: 535, False: 3]
  |  Branch (3239:37): [True: 0, False: 3]
  ------------------
 3240|    538|        getBasicType() == EbtFloat) {
  ------------------
  |  Branch (3240:9): [True: 3, False: 0]
  ------------------
 3241|    538|        if (operand->getQualifier().precision > getQualifier().precision)
  ------------------
  |  Branch (3241:13): [True: 435, False: 103]
  ------------------
 3242|    435|            getQualifier().precision = operand->getQualifier().precision;
 3243|    538|    }
 3244|    538|}
_ZN7glslang13TIntermediate13promoteBinaryERNS_13TIntermBinaryE:
 3250|  1.86k|{
 3251|  1.86k|    TOperator     op    = node.getOp();
 3252|  1.86k|    TIntermTyped* left  = node.getLeft();
 3253|  1.86k|    TIntermTyped* right = node.getRight();
 3254|       |
 3255|       |    // Arrays and structures have to be exact matches.
 3256|  1.86k|    if ((left->isArray() || right->isArray() || left->getBasicType() == EbtStruct || right->getBasicType() == EbtStruct)
  ------------------
  |  Branch (3256:10): [True: 0, False: 1.86k]
  |  Branch (3256:29): [True: 0, False: 1.86k]
  |  Branch (3256:49): [True: 0, False: 1.86k]
  |  Branch (3256:86): [True: 0, False: 1.86k]
  ------------------
 3257|      0|        && left->getType() != right->getType())
  ------------------
  |  Branch (3257:12): [True: 0, False: 0]
  ------------------
 3258|      0|        return false;
 3259|       |
 3260|       |    // Base assumption:  just make the type the same as the left
 3261|       |    // operand.  Only deviations from this will be coded.
 3262|  1.86k|    node.setType(left->getType());
 3263|  1.86k|    node.getWritableType().getQualifier().clear();
 3264|       |
 3265|       |    // Composite and opaque types don't having pending operator changes, e.g.,
 3266|       |    // array, structure, and samplers.  Just establish final type and correctness.
 3267|  1.86k|    if (left->isArray() || left->getBasicType() == EbtStruct || left->getBasicType() == EbtSampler) {
  ------------------
  |  Branch (3267:9): [True: 0, False: 1.86k]
  |  Branch (3267:28): [True: 0, False: 1.86k]
  |  Branch (3267:65): [True: 0, False: 1.86k]
  ------------------
 3268|      0|        switch (op) {
 3269|      0|        case EOpEqual:
  ------------------
  |  Branch (3269:9): [True: 0, False: 0]
  ------------------
 3270|      0|        case EOpNotEqual:
  ------------------
  |  Branch (3270:9): [True: 0, False: 0]
  ------------------
 3271|      0|            if (left->getBasicType() == EbtSampler) {
  ------------------
  |  Branch (3271:17): [True: 0, False: 0]
  ------------------
 3272|       |                // can't compare samplers
 3273|      0|                return false;
 3274|      0|            } else {
 3275|       |                // Promote to conditional
 3276|      0|                node.setType(TType(EbtBool));
 3277|      0|            }
 3278|       |
 3279|      0|            return true;
 3280|       |
 3281|      0|        case EOpAssign:
  ------------------
  |  Branch (3281:9): [True: 0, False: 0]
  ------------------
 3282|       |            // Keep type from above
 3283|       |
 3284|      0|            return true;
 3285|       |
 3286|      0|        default:
  ------------------
  |  Branch (3286:9): [True: 0, False: 0]
  ------------------
 3287|      0|            return false;
 3288|      0|        }
 3289|      0|    }
 3290|       |
 3291|       |    //
 3292|       |    // We now have only scalars, vectors, and matrices to worry about.
 3293|       |    //
 3294|       |
 3295|       |    // HLSL implicitly promotes bool -> int for numeric operations.
 3296|       |    // (Implicit conversions to make the operands match each other's types were already done.)
 3297|  1.86k|    if (getSource() == EShSourceHlsl &&
  ------------------
  |  Branch (3297:9): [True: 0, False: 1.86k]
  ------------------
 3298|      0|        (left->getBasicType() == EbtBool || right->getBasicType() == EbtBool)) {
  ------------------
  |  Branch (3298:10): [True: 0, False: 0]
  |  Branch (3298:45): [True: 0, False: 0]
  ------------------
 3299|      0|        switch (op) {
 3300|      0|        case EOpLessThan:
  ------------------
  |  Branch (3300:9): [True: 0, False: 0]
  ------------------
 3301|      0|        case EOpGreaterThan:
  ------------------
  |  Branch (3301:9): [True: 0, False: 0]
  ------------------
 3302|      0|        case EOpLessThanEqual:
  ------------------
  |  Branch (3302:9): [True: 0, False: 0]
  ------------------
 3303|      0|        case EOpGreaterThanEqual:
  ------------------
  |  Branch (3303:9): [True: 0, False: 0]
  ------------------
 3304|       |
 3305|      0|        case EOpRightShift:
  ------------------
  |  Branch (3305:9): [True: 0, False: 0]
  ------------------
 3306|      0|        case EOpLeftShift:
  ------------------
  |  Branch (3306:9): [True: 0, False: 0]
  ------------------
 3307|       |
 3308|      0|        case EOpMod:
  ------------------
  |  Branch (3308:9): [True: 0, False: 0]
  ------------------
 3309|       |
 3310|      0|        case EOpAnd:
  ------------------
  |  Branch (3310:9): [True: 0, False: 0]
  ------------------
 3311|      0|        case EOpInclusiveOr:
  ------------------
  |  Branch (3311:9): [True: 0, False: 0]
  ------------------
 3312|      0|        case EOpExclusiveOr:
  ------------------
  |  Branch (3312:9): [True: 0, False: 0]
  ------------------
 3313|       |
 3314|      0|        case EOpAdd:
  ------------------
  |  Branch (3314:9): [True: 0, False: 0]
  ------------------
 3315|      0|        case EOpSub:
  ------------------
  |  Branch (3315:9): [True: 0, False: 0]
  ------------------
 3316|      0|        case EOpDiv:
  ------------------
  |  Branch (3316:9): [True: 0, False: 0]
  ------------------
 3317|      0|        case EOpMul:
  ------------------
  |  Branch (3317:9): [True: 0, False: 0]
  ------------------
 3318|      0|            if (left->getBasicType() == EbtBool)
  ------------------
  |  Branch (3318:17): [True: 0, False: 0]
  ------------------
 3319|      0|                left  = createConversion(EbtInt, left);
 3320|      0|            if (right->getBasicType() == EbtBool)
  ------------------
  |  Branch (3320:17): [True: 0, False: 0]
  ------------------
 3321|      0|                right = createConversion(EbtInt, right);
 3322|      0|            if (left == nullptr || right == nullptr)
  ------------------
  |  Branch (3322:17): [True: 0, False: 0]
  |  Branch (3322:36): [True: 0, False: 0]
  ------------------
 3323|      0|                return false;
 3324|      0|            node.setLeft(left);
 3325|      0|            node.setRight(right);
 3326|       |
 3327|       |            // Update the original base assumption on result type..
 3328|      0|            node.setType(left->getType());
 3329|      0|            node.getWritableType().getQualifier().clear();
 3330|       |
 3331|      0|            break;
 3332|       |
 3333|      0|        default:
  ------------------
  |  Branch (3333:9): [True: 0, False: 0]
  ------------------
 3334|      0|            break;
 3335|      0|        }
 3336|      0|    }
 3337|       |
 3338|       |    // Do general type checks against individual operands (comparing left and right is coming up, checking mixed shapes after that)
 3339|  1.86k|    switch (op) {
 3340|      0|    case EOpLessThan:
  ------------------
  |  Branch (3340:5): [True: 0, False: 1.86k]
  ------------------
 3341|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (3341:5): [True: 0, False: 1.86k]
  ------------------
 3342|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (3342:5): [True: 0, False: 1.86k]
  ------------------
 3343|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (3343:5): [True: 0, False: 1.86k]
  ------------------
 3344|       |        // Relational comparisons need numeric types and will promote to scalar Boolean.
 3345|      0|        if (left->getBasicType() == EbtBool)
  ------------------
  |  Branch (3345:13): [True: 0, False: 0]
  ------------------
 3346|      0|            return false;
 3347|       |
 3348|      0|        node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize()));
 3349|      0|        break;
 3350|       |
 3351|      0|    case EOpEqual:
  ------------------
  |  Branch (3351:5): [True: 0, False: 1.86k]
  ------------------
 3352|      0|    case EOpNotEqual:
  ------------------
  |  Branch (3352:5): [True: 0, False: 1.86k]
  ------------------
 3353|      0|        if (getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (3353:13): [True: 0, False: 0]
  ------------------
 3354|      0|            const int resultWidth = std::max(left->getVectorSize(), right->getVectorSize());
 3355|       |
 3356|       |            // In HLSL, == or != on vectors means component-wise comparison.
 3357|      0|            if (resultWidth > 1) {
  ------------------
  |  Branch (3357:17): [True: 0, False: 0]
  ------------------
 3358|      0|                op = (op == EOpEqual) ? EOpVectorEqual : EOpVectorNotEqual;
  ------------------
  |  Branch (3358:22): [True: 0, False: 0]
  ------------------
 3359|      0|                node.setOp(op);
 3360|      0|            }
 3361|       |
 3362|      0|            node.setType(TType(EbtBool, EvqTemporary, resultWidth));
 3363|      0|        } else {
 3364|       |            // All the above comparisons result in a bool (but not the vector compares)
 3365|      0|            node.setType(TType(EbtBool));
 3366|      0|        }
 3367|      0|        break;
 3368|       |
 3369|      0|    case EOpLogicalAnd:
  ------------------
  |  Branch (3369:5): [True: 0, False: 1.86k]
  ------------------
 3370|      0|    case EOpLogicalOr:
  ------------------
  |  Branch (3370:5): [True: 0, False: 1.86k]
  ------------------
 3371|      0|    case EOpLogicalXor:
  ------------------
  |  Branch (3371:5): [True: 0, False: 1.86k]
  ------------------
 3372|       |        // logical ops operate only on Booleans or vectors of Booleans.
 3373|      0|        if (left->getBasicType() != EbtBool || left->isMatrix())
  ------------------
  |  Branch (3373:13): [True: 0, False: 0]
  |  Branch (3373:48): [True: 0, False: 0]
  ------------------
 3374|      0|                return false;
 3375|       |
 3376|      0|        if (getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (3376:13): [True: 0, False: 0]
  ------------------
 3377|       |            // logical ops operate only on scalar Booleans and will promote to scalar Boolean.
 3378|      0|            if (left->isVector())
  ------------------
  |  Branch (3378:17): [True: 0, False: 0]
  ------------------
 3379|      0|                return false;
 3380|      0|        }
 3381|       |
 3382|      0|        node.setType(TType(EbtBool, EvqTemporary, left->getVectorSize()));
 3383|      0|        break;
 3384|       |
 3385|      0|    case EOpRightShift:
  ------------------
  |  Branch (3385:5): [True: 0, False: 1.86k]
  ------------------
 3386|      0|    case EOpLeftShift:
  ------------------
  |  Branch (3386:5): [True: 0, False: 1.86k]
  ------------------
 3387|      0|    case EOpRightShiftAssign:
  ------------------
  |  Branch (3387:5): [True: 0, False: 1.86k]
  ------------------
 3388|      0|    case EOpLeftShiftAssign:
  ------------------
  |  Branch (3388:5): [True: 0, False: 1.86k]
  ------------------
 3389|       |
 3390|      0|    case EOpMod:
  ------------------
  |  Branch (3390:5): [True: 0, False: 1.86k]
  ------------------
 3391|      0|    case EOpModAssign:
  ------------------
  |  Branch (3391:5): [True: 0, False: 1.86k]
  ------------------
 3392|       |
 3393|      0|    case EOpAnd:
  ------------------
  |  Branch (3393:5): [True: 0, False: 1.86k]
  ------------------
 3394|      0|    case EOpInclusiveOr:
  ------------------
  |  Branch (3394:5): [True: 0, False: 1.86k]
  ------------------
 3395|      0|    case EOpExclusiveOr:
  ------------------
  |  Branch (3395:5): [True: 0, False: 1.86k]
  ------------------
 3396|      0|    case EOpAndAssign:
  ------------------
  |  Branch (3396:5): [True: 0, False: 1.86k]
  ------------------
 3397|      0|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (3397:5): [True: 0, False: 1.86k]
  ------------------
 3398|      0|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (3398:5): [True: 0, False: 1.86k]
  ------------------
 3399|      0|        if (getSource() == EShSourceHlsl)
  ------------------
  |  Branch (3399:13): [True: 0, False: 0]
  ------------------
 3400|      0|            break;
 3401|       |
 3402|       |        // Check for integer-only operands.
 3403|      0|        if (!isTypeInt(left->getBasicType()) && !isTypeInt(right->getBasicType()))
  ------------------
  |  Branch (3403:13): [True: 0, False: 0]
  |  Branch (3403:49): [True: 0, False: 0]
  ------------------
 3404|      0|            return false;
 3405|      0|        if (left->isMatrix() || right->isMatrix())
  ------------------
  |  Branch (3405:13): [True: 0, False: 0]
  |  Branch (3405:33): [True: 0, False: 0]
  ------------------
 3406|      0|            return false;
 3407|       |
 3408|      0|        break;
 3409|       |
 3410|      3|    case EOpAdd:
  ------------------
  |  Branch (3410:5): [True: 3, False: 1.86k]
  ------------------
 3411|      3|    case EOpSub:
  ------------------
  |  Branch (3411:5): [True: 0, False: 1.86k]
  ------------------
 3412|      3|    case EOpDiv:
  ------------------
  |  Branch (3412:5): [True: 0, False: 1.86k]
  ------------------
 3413|      3|    case EOpMul:
  ------------------
  |  Branch (3413:5): [True: 0, False: 1.86k]
  ------------------
 3414|  1.62k|    case EOpAddAssign:
  ------------------
  |  Branch (3414:5): [True: 1.62k, False: 240]
  ------------------
 3415|  1.62k|    case EOpSubAssign:
  ------------------
  |  Branch (3415:5): [True: 0, False: 1.86k]
  ------------------
 3416|  1.62k|    case EOpMulAssign:
  ------------------
  |  Branch (3416:5): [True: 0, False: 1.86k]
  ------------------
 3417|  1.62k|    case EOpDivAssign:
  ------------------
  |  Branch (3417:5): [True: 0, False: 1.86k]
  ------------------
 3418|       |        // check for non-Boolean operands
 3419|  1.62k|        if (left->getBasicType() == EbtBool || right->getBasicType() == EbtBool)
  ------------------
  |  Branch (3419:13): [True: 0, False: 1.62k]
  |  Branch (3419:48): [True: 0, False: 1.62k]
  ------------------
 3420|      0|            return false;
 3421|  1.62k|        break;
 3422|       |
 3423|  1.62k|    default:
  ------------------
  |  Branch (3423:5): [True: 237, False: 1.62k]
  ------------------
 3424|    237|        break;
 3425|  1.86k|    }
 3426|       |
 3427|       |    // Compare left and right, and finish with the cases where the operand types must match
 3428|  1.86k|    switch (op) {
 3429|      0|    case EOpLessThan:
  ------------------
  |  Branch (3429:5): [True: 0, False: 1.86k]
  ------------------
 3430|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (3430:5): [True: 0, False: 1.86k]
  ------------------
 3431|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (3431:5): [True: 0, False: 1.86k]
  ------------------
 3432|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (3432:5): [True: 0, False: 1.86k]
  ------------------
 3433|       |
 3434|      0|    case EOpEqual:
  ------------------
  |  Branch (3434:5): [True: 0, False: 1.86k]
  ------------------
 3435|      0|    case EOpNotEqual:
  ------------------
  |  Branch (3435:5): [True: 0, False: 1.86k]
  ------------------
 3436|      0|    case EOpVectorEqual:
  ------------------
  |  Branch (3436:5): [True: 0, False: 1.86k]
  ------------------
 3437|      0|    case EOpVectorNotEqual:
  ------------------
  |  Branch (3437:5): [True: 0, False: 1.86k]
  ------------------
 3438|       |
 3439|      0|    case EOpLogicalAnd:
  ------------------
  |  Branch (3439:5): [True: 0, False: 1.86k]
  ------------------
 3440|      0|    case EOpLogicalOr:
  ------------------
  |  Branch (3440:5): [True: 0, False: 1.86k]
  ------------------
 3441|      0|    case EOpLogicalXor:
  ------------------
  |  Branch (3441:5): [True: 0, False: 1.86k]
  ------------------
 3442|      0|        return left->getType() == right->getType();
 3443|       |
 3444|      0|    case EOpMod:
  ------------------
  |  Branch (3444:5): [True: 0, False: 1.86k]
  ------------------
 3445|      0|    case EOpModAssign:
  ------------------
  |  Branch (3445:5): [True: 0, False: 1.86k]
  ------------------
 3446|       |
 3447|      0|    case EOpAnd:
  ------------------
  |  Branch (3447:5): [True: 0, False: 1.86k]
  ------------------
 3448|      0|    case EOpInclusiveOr:
  ------------------
  |  Branch (3448:5): [True: 0, False: 1.86k]
  ------------------
 3449|      0|    case EOpExclusiveOr:
  ------------------
  |  Branch (3449:5): [True: 0, False: 1.86k]
  ------------------
 3450|      0|    case EOpAndAssign:
  ------------------
  |  Branch (3450:5): [True: 0, False: 1.86k]
  ------------------
 3451|      0|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (3451:5): [True: 0, False: 1.86k]
  ------------------
 3452|      0|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (3452:5): [True: 0, False: 1.86k]
  ------------------
 3453|       |
 3454|      3|    case EOpAdd:
  ------------------
  |  Branch (3454:5): [True: 3, False: 1.86k]
  ------------------
 3455|      3|    case EOpSub:
  ------------------
  |  Branch (3455:5): [True: 0, False: 1.86k]
  ------------------
 3456|      3|    case EOpDiv:
  ------------------
  |  Branch (3456:5): [True: 0, False: 1.86k]
  ------------------
 3457|       |
 3458|  1.62k|    case EOpAddAssign:
  ------------------
  |  Branch (3458:5): [True: 1.62k, False: 240]
  ------------------
 3459|  1.62k|    case EOpSubAssign:
  ------------------
  |  Branch (3459:5): [True: 0, False: 1.86k]
  ------------------
 3460|  1.62k|    case EOpDivAssign:
  ------------------
  |  Branch (3460:5): [True: 0, False: 1.86k]
  ------------------
 3461|       |        // Quick out in case the types do match
 3462|  1.62k|        if (left->getType() == right->getType())
  ------------------
  |  Branch (3462:13): [True: 1.51k, False: 114]
  ------------------
 3463|  1.51k|            return true;
 3464|       |
 3465|    114|        [[fallthrough]];
 3466|       |
 3467|    114|    case EOpMul:
  ------------------
  |  Branch (3467:5): [True: 0, False: 1.86k]
  ------------------
 3468|    114|    case EOpMulAssign:
  ------------------
  |  Branch (3468:5): [True: 0, False: 1.86k]
  ------------------
 3469|       |        // At least the basic type has to match
 3470|    114|        if (left->getBasicType() != right->getBasicType())
  ------------------
  |  Branch (3470:13): [True: 0, False: 114]
  ------------------
 3471|      0|            return false;
 3472|    114|        break;
 3473|       |
 3474|    237|    default:
  ------------------
  |  Branch (3474:5): [True: 237, False: 1.62k]
  ------------------
 3475|    237|        break;
 3476|  1.86k|    }
 3477|       |
 3478|    351|    if (left->getType().isCoopMat() || right->getType().isCoopMat()) {
  ------------------
  |  Branch (3478:9): [True: 0, False: 351]
  |  Branch (3478:40): [True: 0, False: 351]
  ------------------
 3479|       |        // Operations on two cooperative matrices must have identical types
 3480|      0|        if (left->getType().isCoopMat() && right->getType().isCoopMat() &&
  ------------------
  |  Branch (3480:13): [True: 0, False: 0]
  |  Branch (3480:44): [True: 0, False: 0]
  ------------------
 3481|      0|            left->getType() != right->getType()) {
  ------------------
  |  Branch (3481:13): [True: 0, False: 0]
  ------------------
 3482|      0|            return false;
 3483|      0|        }
 3484|      0|        switch (op) {
 3485|      0|        case EOpMul:
  ------------------
  |  Branch (3485:9): [True: 0, False: 0]
  ------------------
 3486|      0|        case EOpMulAssign:
  ------------------
  |  Branch (3486:9): [True: 0, False: 0]
  ------------------
 3487|       |            // Mul not supported in NV_cooperative_matrix
 3488|      0|            if (left->getType().isCoopMatNV() && right->getType().isCoopMatNV()) {
  ------------------
  |  Branch (3488:17): [True: 0, False: 0]
  |  Branch (3488:50): [True: 0, False: 0]
  ------------------
 3489|      0|                return false;
 3490|      0|            }
 3491|       |            // NV_cooperative_matrix supports MulAssign is for mat*=scalar only.
 3492|       |            // KHR_cooperative_matrix supports it for mat*=mat as well.
 3493|      0|            if (op == EOpMulAssign && right->getType().isCoopMatNV()) {
  ------------------
  |  Branch (3493:17): [True: 0, False: 0]
  |  Branch (3493:39): [True: 0, False: 0]
  ------------------
 3494|      0|                return false;
 3495|      0|            }
 3496|       |            // Use MatrixTimesScalar if either operand is not a matrix. Otherwise use Mul.
 3497|      0|            if (!left->getType().isCoopMat() || !right->getType().isCoopMat()) {
  ------------------
  |  Branch (3497:17): [True: 0, False: 0]
  |  Branch (3497:49): [True: 0, False: 0]
  ------------------
 3498|      0|                node.setOp(op == EOpMulAssign ? EOpMatrixTimesScalarAssign : EOpMatrixTimesScalar);
  ------------------
  |  Branch (3498:28): [True: 0, False: 0]
  ------------------
 3499|      0|            }
 3500|       |            // In case of scalar*matrix, take the result type from the matrix.
 3501|      0|            if (right->getType().isCoopMat()) {
  ------------------
  |  Branch (3501:17): [True: 0, False: 0]
  ------------------
 3502|      0|                node.setType(right->getType());
 3503|      0|            }
 3504|      0|            return true;
 3505|      0|        case EOpAdd:
  ------------------
  |  Branch (3505:9): [True: 0, False: 0]
  ------------------
 3506|      0|        case EOpSub:
  ------------------
  |  Branch (3506:9): [True: 0, False: 0]
  ------------------
 3507|      0|        case EOpDiv:
  ------------------
  |  Branch (3507:9): [True: 0, False: 0]
  ------------------
 3508|      0|        case EOpAssign:
  ------------------
  |  Branch (3508:9): [True: 0, False: 0]
  ------------------
 3509|       |            // These require both to be cooperative matrices
 3510|      0|            if (!left->getType().isCoopMat() || !right->getType().isCoopMat()) {
  ------------------
  |  Branch (3510:17): [True: 0, False: 0]
  |  Branch (3510:49): [True: 0, False: 0]
  ------------------
 3511|      0|                return false;
 3512|      0|            }
 3513|      0|            return true;
 3514|      0|        default:
  ------------------
  |  Branch (3514:9): [True: 0, False: 0]
  ------------------
 3515|      0|            break;
 3516|      0|        }
 3517|      0|        return false;
 3518|      0|    }
 3519|       |
 3520|    351|    if (left->getType().isCoopVecNV() || right->getType().isCoopVecNV()) {
  ------------------
  |  Branch (3520:9): [True: 0, False: 351]
  |  Branch (3520:42): [True: 0, False: 351]
  ------------------
 3521|       |        // Operations on two cooperative vectors must have identical types
 3522|      0|        if (left->getType().isCoopVecNV() && right->getType().isCoopVecNV() &&
  ------------------
  |  Branch (3522:13): [True: 0, False: 0]
  |  Branch (3522:46): [True: 0, False: 0]
  ------------------
 3523|      0|            left->getType() != right->getType()) {
  ------------------
  |  Branch (3523:13): [True: 0, False: 0]
  ------------------
 3524|      0|            return false;
 3525|      0|        }
 3526|      0|        switch (op) {
 3527|      0|        case EOpMul:
  ------------------
  |  Branch (3527:9): [True: 0, False: 0]
  ------------------
 3528|      0|        case EOpMulAssign:
  ------------------
  |  Branch (3528:9): [True: 0, False: 0]
  ------------------
 3529|       |            // Use VectorTimesScalar if either operand is not a vector. Otherwise use Mul.
 3530|      0|            if (!left->getType().isCoopVecNV() || !right->getType().isCoopVecNV()) {
  ------------------
  |  Branch (3530:17): [True: 0, False: 0]
  |  Branch (3530:51): [True: 0, False: 0]
  ------------------
 3531|      0|                node.setOp(op == EOpMulAssign ? EOpVectorTimesScalarAssign : EOpVectorTimesScalar);
  ------------------
  |  Branch (3531:28): [True: 0, False: 0]
  ------------------
 3532|      0|            }
 3533|       |            // In case of scalar*vector, take the result type from the vector.
 3534|      0|            if (right->getType().isCoopVecNV()) {
  ------------------
  |  Branch (3534:17): [True: 0, False: 0]
  ------------------
 3535|      0|                node.setType(right->getType());
 3536|      0|            }
 3537|      0|            return true;
 3538|      0|        case EOpLeftShift:
  ------------------
  |  Branch (3538:9): [True: 0, False: 0]
  ------------------
 3539|      0|        case EOpLeftShiftAssign:
  ------------------
  |  Branch (3539:9): [True: 0, False: 0]
  ------------------
 3540|      0|        case EOpRightShift:
  ------------------
  |  Branch (3540:9): [True: 0, False: 0]
  ------------------
 3541|      0|        case EOpRightShiftAssign:
  ------------------
  |  Branch (3541:9): [True: 0, False: 0]
  ------------------
 3542|      0|        case EOpAdd:
  ------------------
  |  Branch (3542:9): [True: 0, False: 0]
  ------------------
 3543|      0|        case EOpSub:
  ------------------
  |  Branch (3543:9): [True: 0, False: 0]
  ------------------
 3544|      0|        case EOpDiv:
  ------------------
  |  Branch (3544:9): [True: 0, False: 0]
  ------------------
 3545|      0|        case EOpAssign:
  ------------------
  |  Branch (3545:9): [True: 0, False: 0]
  ------------------
 3546|       |            // These require both to be cooperative vectors
 3547|      0|            if (!left->getType().isCoopVecNV() || !right->getType().isCoopVecNV()) {
  ------------------
  |  Branch (3547:17): [True: 0, False: 0]
  |  Branch (3547:51): [True: 0, False: 0]
  ------------------
 3548|      0|                return false;
 3549|      0|            }
 3550|      0|            return true;
 3551|      0|        default:
  ------------------
  |  Branch (3551:9): [True: 0, False: 0]
  ------------------
 3552|      0|            break;
 3553|      0|        }
 3554|      0|        return false;
 3555|      0|    }
 3556|       |
 3557|    351|    bool vectorAndLongVectorMatch = TType::vectorAndLongVectorMatch(left->getType(), right->getType());
 3558|       |
 3559|       |    // Finish handling the case, for all ops, where both operands are scalars.
 3560|    351|    if (left->isScalar() && right->isScalar())
  ------------------
  |  Branch (3560:9): [True: 12, False: 339]
  |  Branch (3560:29): [True: 12, False: 0]
  ------------------
 3561|     12|        return true;
 3562|       |
 3563|       |    // Finish handling the case, for all ops, where there are two vectors of different sizes
 3564|    339|    if (left->isVector() && right->isVector() && left->getVectorSize() != right->getVectorSize() && right->getVectorSize() > 1)
  ------------------
  |  Branch (3564:9): [True: 339, False: 0]
  |  Branch (3564:29): [True: 225, False: 114]
  |  Branch (3564:50): [True: 0, False: 225]
  |  Branch (3564:101): [True: 0, False: 0]
  ------------------
 3565|      0|        return false;
 3566|       |
 3567|       |    // Finish handling the case, for all ops, where there are two vectors of different sizes
 3568|    339|    if (left->getType().isLongVector() && right->getType().isLongVector() && !left->getType().sameLongVectorShape(right->getType()))
  ------------------
  |  Branch (3568:9): [True: 0, False: 339]
  |  Branch (3568:43): [True: 0, False: 0]
  |  Branch (3568:78): [True: 0, False: 0]
  ------------------
 3569|      0|        return false;
 3570|       |
 3571|       |    //
 3572|       |    // We now have a mix of scalars, vectors, or matrices, for non-relational operations.
 3573|       |    //
 3574|       |
 3575|       |    // Can these two operands be combined, what is the resulting type?
 3576|    339|    TBasicType basicType = left->getBasicType();
 3577|    339|    switch (op) {
 3578|      0|    case EOpMul:
  ------------------
  |  Branch (3578:5): [True: 0, False: 339]
  ------------------
 3579|      0|        if (!left->isMatrix() && right->isMatrix()) {
  ------------------
  |  Branch (3579:13): [True: 0, False: 0]
  |  Branch (3579:34): [True: 0, False: 0]
  ------------------
 3580|      0|            if (left->isVector()) {
  ------------------
  |  Branch (3580:17): [True: 0, False: 0]
  ------------------
 3581|      0|                if (left->getVectorSize() != right->getMatrixRows())
  ------------------
  |  Branch (3581:21): [True: 0, False: 0]
  ------------------
 3582|      0|                    return false;
 3583|      0|                node.setOp(op = EOpVectorTimesMatrix);
 3584|      0|                node.setType(TType(basicType, EvqTemporary, right->getMatrixCols()));
 3585|      0|            } else {
 3586|      0|                node.setOp(op = EOpMatrixTimesScalar);
 3587|      0|                node.setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), right->getMatrixRows()));
 3588|      0|            }
 3589|      0|        } else if (left->isMatrix() && !right->isMatrix()) {
  ------------------
  |  Branch (3589:20): [True: 0, False: 0]
  |  Branch (3589:40): [True: 0, False: 0]
  ------------------
 3590|      0|            if (right->isVector()) {
  ------------------
  |  Branch (3590:17): [True: 0, False: 0]
  ------------------
 3591|      0|                if (left->getMatrixCols() != right->getVectorSize())
  ------------------
  |  Branch (3591:21): [True: 0, False: 0]
  ------------------
 3592|      0|                    return false;
 3593|      0|                node.setOp(op = EOpMatrixTimesVector);
 3594|      0|                node.setType(TType(basicType, EvqTemporary, left->getMatrixRows()));
 3595|      0|            } else {
 3596|      0|                node.setOp(op = EOpMatrixTimesScalar);
 3597|      0|            }
 3598|      0|        } else if (left->isMatrix() && right->isMatrix()) {
  ------------------
  |  Branch (3598:20): [True: 0, False: 0]
  |  Branch (3598:40): [True: 0, False: 0]
  ------------------
 3599|      0|            if (left->getMatrixCols() != right->getMatrixRows())
  ------------------
  |  Branch (3599:17): [True: 0, False: 0]
  ------------------
 3600|      0|                return false;
 3601|      0|            node.setOp(op = EOpMatrixTimesMatrix);
 3602|      0|            node.setType(TType(basicType, EvqTemporary, 0, right->getMatrixCols(), left->getMatrixRows()));
 3603|      0|        } else if (! left->isMatrix() && ! right->isMatrix()) {
  ------------------
  |  Branch (3603:20): [True: 0, False: 0]
  |  Branch (3603:42): [True: 0, False: 0]
  ------------------
 3604|      0|            if (left->isVector() && right->isVector()) {
  ------------------
  |  Branch (3604:17): [True: 0, False: 0]
  |  Branch (3604:37): [True: 0, False: 0]
  ------------------
 3605|      0|                ; // leave as component product
 3606|      0|            } else if (left->isVector() || right->isVector()) {
  ------------------
  |  Branch (3606:24): [True: 0, False: 0]
  |  Branch (3606:44): [True: 0, False: 0]
  ------------------
 3607|      0|                node.setOp(op = EOpVectorTimesScalar);
 3608|      0|                if (right->isVector())
  ------------------
  |  Branch (3608:21): [True: 0, False: 0]
  ------------------
 3609|      0|                    node.setType(TType(basicType, EvqTemporary, right->getVectorSize()));
 3610|      0|            }
 3611|      0|        } else {
 3612|      0|            return false;
 3613|      0|        }
 3614|      0|        break;
 3615|      0|    case EOpMulAssign:
  ------------------
  |  Branch (3615:5): [True: 0, False: 339]
  ------------------
 3616|      0|        if (! left->isMatrix() && right->isMatrix()) {
  ------------------
  |  Branch (3616:13): [True: 0, False: 0]
  |  Branch (3616:35): [True: 0, False: 0]
  ------------------
 3617|      0|            if (left->isVector()) {
  ------------------
  |  Branch (3617:17): [True: 0, False: 0]
  ------------------
 3618|      0|                if (left->getVectorSize() != right->getMatrixRows() || left->getVectorSize() != right->getMatrixCols())
  ------------------
  |  Branch (3618:21): [True: 0, False: 0]
  |  Branch (3618:72): [True: 0, False: 0]
  ------------------
 3619|      0|                    return false;
 3620|      0|                node.setOp(op = EOpVectorTimesMatrixAssign);
 3621|      0|            } else {
 3622|      0|                return false;
 3623|      0|            }
 3624|      0|        } else if (left->isMatrix() && !right->isMatrix()) {
  ------------------
  |  Branch (3624:20): [True: 0, False: 0]
  |  Branch (3624:40): [True: 0, False: 0]
  ------------------
 3625|      0|            if (right->isVector()) {
  ------------------
  |  Branch (3625:17): [True: 0, False: 0]
  ------------------
 3626|      0|                return false;
 3627|      0|            } else {
 3628|      0|                node.setOp(op = EOpMatrixTimesScalarAssign);
 3629|      0|            }
 3630|      0|        } else if (left->isMatrix() && right->isMatrix()) {
  ------------------
  |  Branch (3630:20): [True: 0, False: 0]
  |  Branch (3630:40): [True: 0, False: 0]
  ------------------
 3631|      0|            if (left->getMatrixCols() != right->getMatrixCols() || left->getMatrixCols() != right->getMatrixRows())
  ------------------
  |  Branch (3631:17): [True: 0, False: 0]
  |  Branch (3631:68): [True: 0, False: 0]
  ------------------
 3632|      0|                return false;
 3633|      0|            node.setOp(op = EOpMatrixTimesMatrixAssign);
 3634|      0|        } else if (!left->isMatrix() && !right->isMatrix()) {
  ------------------
  |  Branch (3634:20): [True: 0, False: 0]
  |  Branch (3634:41): [True: 0, False: 0]
  ------------------
 3635|      0|            if (left->isVector() && right->isVector()) {
  ------------------
  |  Branch (3635:17): [True: 0, False: 0]
  |  Branch (3635:37): [True: 0, False: 0]
  ------------------
 3636|       |                // leave as component product
 3637|      0|            } else if (left->isVector() || right->isVector()) {
  ------------------
  |  Branch (3637:24): [True: 0, False: 0]
  |  Branch (3637:44): [True: 0, False: 0]
  ------------------
 3638|      0|                if (! left->isVector())
  ------------------
  |  Branch (3638:21): [True: 0, False: 0]
  ------------------
 3639|      0|                    return false;
 3640|      0|                node.setOp(op = EOpVectorTimesScalarAssign);
 3641|      0|            }
 3642|      0|        } else {
 3643|      0|            return false;
 3644|      0|        }
 3645|      0|        break;
 3646|       |
 3647|      0|    case EOpRightShift:
  ------------------
  |  Branch (3647:5): [True: 0, False: 339]
  ------------------
 3648|      0|    case EOpLeftShift:
  ------------------
  |  Branch (3648:5): [True: 0, False: 339]
  ------------------
 3649|      0|    case EOpRightShiftAssign:
  ------------------
  |  Branch (3649:5): [True: 0, False: 339]
  ------------------
 3650|      0|    case EOpLeftShiftAssign:
  ------------------
  |  Branch (3650:5): [True: 0, False: 339]
  ------------------
 3651|      0|        if (right->isVector() && (! left->isVector() || right->getVectorSize() != left->getVectorSize()))
  ------------------
  |  Branch (3651:13): [True: 0, False: 0]
  |  Branch (3651:35): [True: 0, False: 0]
  |  Branch (3651:57): [True: 0, False: 0]
  ------------------
 3652|      0|            return false;
 3653|      0|        break;
 3654|       |
 3655|    225|    case EOpAssign:
  ------------------
  |  Branch (3655:5): [True: 225, False: 114]
  ------------------
 3656|    225|        if ((left->getVectorSize() != right->getVectorSize() || left->getMatrixCols() != right->getMatrixCols() || left->getMatrixRows() != right->getMatrixRows()) &&
  ------------------
  |  Branch (3656:14): [True: 0, False: 225]
  |  Branch (3656:65): [True: 0, False: 225]
  |  Branch (3656:116): [True: 0, False: 225]
  ------------------
 3657|      0|            !vectorAndLongVectorMatch)
  ------------------
  |  Branch (3657:13): [True: 0, False: 0]
  ------------------
 3658|      0|            return false;
 3659|    225|        [[fallthrough]];
 3660|       |
 3661|    225|    case EOpAdd:
  ------------------
  |  Branch (3661:5): [True: 0, False: 339]
  ------------------
 3662|    225|    case EOpSub:
  ------------------
  |  Branch (3662:5): [True: 0, False: 339]
  ------------------
 3663|    225|    case EOpDiv:
  ------------------
  |  Branch (3663:5): [True: 0, False: 339]
  ------------------
 3664|    225|    case EOpMod:
  ------------------
  |  Branch (3664:5): [True: 0, False: 339]
  ------------------
 3665|    225|    case EOpAnd:
  ------------------
  |  Branch (3665:5): [True: 0, False: 339]
  ------------------
 3666|    225|    case EOpInclusiveOr:
  ------------------
  |  Branch (3666:5): [True: 0, False: 339]
  ------------------
 3667|    225|    case EOpExclusiveOr:
  ------------------
  |  Branch (3667:5): [True: 0, False: 339]
  ------------------
 3668|    339|    case EOpAddAssign:
  ------------------
  |  Branch (3668:5): [True: 114, False: 225]
  ------------------
 3669|    339|    case EOpSubAssign:
  ------------------
  |  Branch (3669:5): [True: 0, False: 339]
  ------------------
 3670|    339|    case EOpDivAssign:
  ------------------
  |  Branch (3670:5): [True: 0, False: 339]
  ------------------
 3671|    339|    case EOpModAssign:
  ------------------
  |  Branch (3671:5): [True: 0, False: 339]
  ------------------
 3672|    339|    case EOpAndAssign:
  ------------------
  |  Branch (3672:5): [True: 0, False: 339]
  ------------------
 3673|    339|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (3673:5): [True: 0, False: 339]
  ------------------
 3674|    339|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (3674:5): [True: 0, False: 339]
  ------------------
 3675|       |
 3676|    339|        if ((left->isMatrix() && right->isVector()) ||
  ------------------
  |  Branch (3676:14): [True: 0, False: 339]
  |  Branch (3676:34): [True: 0, False: 0]
  ------------------
 3677|    339|            (left->isVector() && right->isMatrix()) ||
  ------------------
  |  Branch (3677:14): [True: 339, False: 0]
  |  Branch (3677:34): [True: 0, False: 339]
  ------------------
 3678|    339|            left->getBasicType() != right->getBasicType())
  ------------------
  |  Branch (3678:13): [True: 0, False: 339]
  ------------------
 3679|      0|            return false;
 3680|    339|        if (left->isMatrix() && right->isMatrix() && (left->getMatrixCols() != right->getMatrixCols() || left->getMatrixRows() != right->getMatrixRows()))
  ------------------
  |  Branch (3680:13): [True: 0, False: 339]
  |  Branch (3680:33): [True: 0, False: 0]
  |  Branch (3680:55): [True: 0, False: 0]
  |  Branch (3680:106): [True: 0, False: 0]
  ------------------
 3681|      0|            return false;
 3682|    339|        if (left->isVector() && right->isVector() && left->getVectorSize() != right->getVectorSize())
  ------------------
  |  Branch (3682:13): [True: 339, False: 0]
  |  Branch (3682:33): [True: 225, False: 114]
  |  Branch (3682:54): [True: 0, False: 225]
  ------------------
 3683|      0|            return false;
 3684|    339|        if ((right->isVector() || right->isMatrix()) && !vectorAndLongVectorMatch) {
  ------------------
  |  Branch (3684:14): [True: 225, False: 114]
  |  Branch (3684:35): [True: 0, False: 114]
  |  Branch (3684:57): [True: 225, False: 0]
  ------------------
 3685|    225|            node.getWritableType().shallowCopy(right->getType());
 3686|    225|            node.getWritableType().getQualifier().makeTemporary();
 3687|    225|        }
 3688|    339|        break;
 3689|       |
 3690|      0|    default:
  ------------------
  |  Branch (3690:5): [True: 0, False: 339]
  ------------------
 3691|      0|        return false;
 3692|    339|    }
 3693|       |
 3694|       |    //
 3695|       |    // One more check for assignment.
 3696|       |    //
 3697|    339|    switch (op) {
 3698|       |    // The resulting type has to match the left operand.
 3699|    225|    case EOpAssign:
  ------------------
  |  Branch (3699:5): [True: 225, False: 114]
  ------------------
 3700|    339|    case EOpAddAssign:
  ------------------
  |  Branch (3700:5): [True: 114, False: 225]
  ------------------
 3701|    339|    case EOpSubAssign:
  ------------------
  |  Branch (3701:5): [True: 0, False: 339]
  ------------------
 3702|    339|    case EOpMulAssign:
  ------------------
  |  Branch (3702:5): [True: 0, False: 339]
  ------------------
 3703|    339|    case EOpDivAssign:
  ------------------
  |  Branch (3703:5): [True: 0, False: 339]
  ------------------
 3704|    339|    case EOpModAssign:
  ------------------
  |  Branch (3704:5): [True: 0, False: 339]
  ------------------
 3705|    339|    case EOpAndAssign:
  ------------------
  |  Branch (3705:5): [True: 0, False: 339]
  ------------------
 3706|    339|    case EOpInclusiveOrAssign:
  ------------------
  |  Branch (3706:5): [True: 0, False: 339]
  ------------------
 3707|    339|    case EOpExclusiveOrAssign:
  ------------------
  |  Branch (3707:5): [True: 0, False: 339]
  ------------------
 3708|    339|    case EOpLeftShiftAssign:
  ------------------
  |  Branch (3708:5): [True: 0, False: 339]
  ------------------
 3709|    339|    case EOpRightShiftAssign:
  ------------------
  |  Branch (3709:5): [True: 0, False: 339]
  ------------------
 3710|    339|        if (node.getType() != left->getType())
  ------------------
  |  Branch (3710:13): [True: 0, False: 339]
  ------------------
 3711|      0|            return false;
 3712|    339|        break;
 3713|    339|    default:
  ------------------
  |  Branch (3713:5): [True: 0, False: 339]
  ------------------
 3714|      0|        break;
 3715|    339|    }
 3716|       |
 3717|    339|    return true;
 3718|    339|}
_ZN7glslang13TIntermBinary15updatePrecisionEv:
 3815|  1.86k|{
 3816|  1.86k|     if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
  ------------------
  |  Branch (3816:10): [True: 216, False: 1.65k]
  |  Branch (3816:38): [True: 0, False: 1.65k]
  ------------------
 3817|  1.86k|         getBasicType() == EbtFloat) {
  ------------------
  |  Branch (3817:10): [True: 1.65k, False: 0]
  ------------------
 3818|  1.86k|       if (op == EOpRightShift || op == EOpLeftShift) {
  ------------------
  |  Branch (3818:12): [True: 0, False: 1.86k]
  |  Branch (3818:35): [True: 0, False: 1.86k]
  ------------------
 3819|       |         // For shifts get precision from left side only and thus no need to propagate
 3820|      0|         getQualifier().precision = left->getQualifier().precision;
 3821|  1.86k|       } else {
 3822|  1.86k|         getQualifier().precision = std::max(right->getQualifier().precision, left->getQualifier().precision);
 3823|  1.86k|         if (getQualifier().precision != EpqNone) {
  ------------------
  |  Branch (3823:14): [True: 1.86k, False: 3]
  ------------------
 3824|  1.86k|           left->propagatePrecision(getQualifier().precision);
 3825|  1.86k|           right->propagatePrecision(getQualifier().precision);
 3826|  1.86k|         }
 3827|  1.86k|       }
 3828|  1.86k|    }
 3829|  1.86k|}
_ZN7glslang12TIntermTyped18propagatePrecisionENS_19TPrecisionQualifierE:
 3835|  11.9k|{
 3836|  11.9k|    if (getQualifier().precision != EpqNone ||
  ------------------
  |  Branch (3836:9): [True: 9.37k, False: 2.58k]
  ------------------
 3837|  2.58k|        (getBasicType() != EbtInt && getBasicType() != EbtUint &&
  ------------------
  |  Branch (3837:10): [True: 1.71k, False: 867]
  |  Branch (3837:38): [True: 1.71k, False: 0]
  ------------------
 3838|  1.71k|         getBasicType() != EbtFloat && getBasicType() != EbtFloat16))
  ------------------
  |  Branch (3838:10): [True: 156, False: 1.56k]
  |  Branch (3838:40): [True: 156, False: 0]
  ------------------
 3839|  9.52k|        return;
 3840|       |
 3841|  2.42k|    getQualifier().precision = newPrecision;
 3842|       |
 3843|  2.42k|    TIntermBinary* binaryNode = getAsBinaryNode();
 3844|  2.42k|    if (binaryNode) {
  ------------------
  |  Branch (3844:9): [True: 0, False: 2.42k]
  ------------------
 3845|      0|        binaryNode->getLeft()->propagatePrecision(newPrecision);
 3846|      0|        binaryNode->getRight()->propagatePrecision(newPrecision);
 3847|       |
 3848|      0|        return;
 3849|      0|    }
 3850|       |
 3851|  2.42k|    TIntermUnary* unaryNode = getAsUnaryNode();
 3852|  2.42k|    if (unaryNode) {
  ------------------
  |  Branch (3852:9): [True: 126, False: 2.30k]
  ------------------
 3853|    126|        unaryNode->getOperand()->propagatePrecision(newPrecision);
 3854|       |
 3855|    126|        return;
 3856|    126|    }
 3857|       |
 3858|  2.30k|    TIntermAggregate* aggregateNode = getAsAggregate();
 3859|  2.30k|    if (aggregateNode) {
  ------------------
  |  Branch (3859:9): [True: 1.71k, False: 591]
  ------------------
 3860|  1.71k|        TIntermSequence operands = aggregateNode->getSequence();
 3861|  7.96k|        for (unsigned int i = 0; i < operands.size(); ++i) {
  ------------------
  |  Branch (3861:34): [True: 6.25k, False: 1.71k]
  ------------------
 3862|  6.25k|            TIntermTyped* typedNode = operands[i]->getAsTyped();
 3863|  6.25k|            if (! typedNode)
  ------------------
  |  Branch (3863:17): [True: 0, False: 6.25k]
  ------------------
 3864|      0|                break;
 3865|  6.25k|            typedNode->propagatePrecision(newPrecision);
 3866|  6.25k|        }
 3867|       |
 3868|  1.71k|        return;
 3869|  1.71k|    }
 3870|       |
 3871|    591|    TIntermSelection* selectionNode = getAsSelectionNode();
 3872|    591|    if (selectionNode) {
  ------------------
  |  Branch (3872:9): [True: 0, False: 591]
  ------------------
 3873|      0|        TIntermTyped* typedNode = selectionNode->getTrueBlock()->getAsTyped();
 3874|      0|        if (typedNode) {
  ------------------
  |  Branch (3874:13): [True: 0, False: 0]
  ------------------
 3875|      0|            typedNode->propagatePrecision(newPrecision);
 3876|      0|            typedNode = selectionNode->getFalseBlock()->getAsTyped();
 3877|      0|            if (typedNode)
  ------------------
  |  Branch (3877:17): [True: 0, False: 0]
  ------------------
 3878|      0|                typedNode->propagatePrecision(newPrecision);
 3879|      0|        }
 3880|       |
 3881|      0|        return;
 3882|      0|    }
 3883|    591|}
_ZNK7glslang13TIntermediate20promoteConstantUnionENS_10TBasicTypeEPNS_20TIntermConstantUnionE:
 3886|     75|{
 3887|     75|    const TConstUnionArray& rightUnionArray = node->getConstArray();
 3888|     75|    int size = node->getType().computeNumComponents();
 3889|       |
 3890|     75|    TConstUnionArray leftUnionArray(size);
 3891|       |
 3892|    150|    for (int i=0; i < size; i++) {
  ------------------
  |  Branch (3892:19): [True: 75, False: 75]
  ------------------
 3893|       |
 3894|     75|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
 3895|     75|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
 3896|       |
 3897|     75|#define TO_ALL(Get)   \
 3898|     75|        switch (promoteTo) { \
 3899|     75|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
 3900|     75|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
 3901|     75|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
 3902|     75|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
 3903|     75|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
 3904|     75|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
 3905|     75|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
 3906|     75|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
 3907|     75|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
 3908|     75|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
 3909|     75|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
 3910|     75|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
 3911|     75|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
 3912|     75|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
 3913|     75|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
 3914|     75|        default: return node; \
 3915|     75|        }
 3916|       |
 3917|     75|        switch (node->getType().getBasicType()) {
 3918|      0|        case EbtFloat: TO_ALL(getDConst); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3918:9): [True: 0, False: 75]
  ------------------
 3919|     75|        case EbtInt: TO_ALL(getIConst); break;
  ------------------
  |  | 3898|     75|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3911|     75|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|     75|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 75, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 75]
  |  |  ------------------
  |  | 3915|     75|        }
  ------------------
  |  Branch (3919:9): [True: 75, False: 0]
  ------------------
 3920|      0|        case EbtUint: TO_ALL(getUConst); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3920:9): [True: 0, False: 75]
  ------------------
 3921|      0|        case EbtBool: TO_ALL(getBConst); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3921:9): [True: 0, False: 75]
  ------------------
 3922|      0|        case EbtFloat16: TO_ALL(getDConst); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3922:9): [True: 0, False: 75]
  ------------------
 3923|      0|        case EbtBFloat16: TO_ALL(getDConst); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3923:9): [True: 0, False: 75]
  ------------------
 3924|      0|        case EbtFloatE5M2: TO_ALL(getDConst); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3924:9): [True: 0, False: 75]
  ------------------
 3925|      0|        case EbtFloatE4M3: TO_ALL(getDConst); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3925:9): [True: 0, False: 75]
  ------------------
 3926|      0|        case EbtDouble: TO_ALL(getDConst); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3926:9): [True: 0, False: 75]
  ------------------
 3927|      0|        case EbtInt8: TO_ALL(getI8Const); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3927:9): [True: 0, False: 75]
  ------------------
 3928|      0|        case EbtInt16: TO_ALL(getI16Const); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3928:9): [True: 0, False: 75]
  ------------------
 3929|      0|        case EbtInt64: TO_ALL(getI64Const); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3929:9): [True: 0, False: 75]
  ------------------
 3930|      0|        case EbtUint8: TO_ALL(getU8Const); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3930:9): [True: 0, False: 75]
  ------------------
 3931|      0|        case EbtUint16: TO_ALL(getU16Const); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3931:9): [True: 0, False: 75]
  ------------------
 3932|      0|        case EbtUint64: TO_ALL(getU64Const); break;
  ------------------
  |  | 3898|      0|        switch (promoteTo) { \
  |  | 3899|      0|        case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3899:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3900|      0|        case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3900:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3901|      0|        case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3901:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3902|      0|        case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3902:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3903|      0|        case EbtFloat: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3903:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3904|      0|        case EbtDouble: PROMOTE(setDConst, double, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3904:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3905|      0|        case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3905:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3906|      0|        case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3906:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3907|      0|        case EbtInt: PROMOTE(setIConst, int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3907:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3908|      0|        case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3908:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3909|      0|        case EbtUint8: PROMOTE(setU8Const, unsigned char, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3909:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3910|      0|        case EbtUint16: PROMOTE(setU16Const, unsigned short, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3910:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3911|      0|        case EbtUint: PROMOTE(setUConst, unsigned int, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3911:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3912|      0|        case EbtUint64: PROMOTE(setU64Const, unsigned long long, Get); break; \
  |  |  ------------------
  |  |  |  | 3894|      0|#define PROMOTE(Set, CType, Get) leftUnionArray[i].Set(static_cast<CType>(rightUnionArray[i].Get()))
  |  |  ------------------
  |  |  |  Branch (3912:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3913|      0|        case EbtBool: PROMOTE_TO_BOOL(Get); break; \
  |  |  ------------------
  |  |  |  | 3895|      0|#define PROMOTE_TO_BOOL(Get) leftUnionArray[i].setBConst(rightUnionArray[i].Get() != 0)
  |  |  ------------------
  |  |  |  Branch (3913:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3914|      0|        default: return node; \
  |  |  ------------------
  |  |  |  Branch (3914:9): [True: 0, False: 0]
  |  |  ------------------
  |  | 3915|      0|        }
  ------------------
  |  Branch (3932:9): [True: 0, False: 75]
  ------------------
 3933|      0|        default: return node;
  ------------------
  |  Branch (3933:9): [True: 0, False: 75]
  ------------------
 3934|     75|        }
 3935|     75|    }
 3936|       |
 3937|     75|    const TType& t = node->getType();
 3938|       |
 3939|     75|    return addConstantUnion(leftUnionArray, TType(promoteTo, t.getQualifier().storage, t.getVectorSize(), t.getMatrixCols(), t.getMatrixRows()),
 3940|     75|                            node->getLoc());
 3941|     75|}
_ZN7glslang16TIntermAggregate14setPragmaTableERKNS_12TPragmaTableE:
 3944|    240|{
 3945|       |    assert(pragmaTable == nullptr);
 3946|    240|    pragmaTable = new TPragmaTable;
 3947|    240|    *pragmaTable = pTable;
 3948|    240|}
_ZN7glslang13TIntermediate15getResourceNameENS_13TResourceTypeE:
 4012|    390|{
 4013|    390|    switch (res) {
 4014|     65|    case EResSampler:         return "shift-sampler-binding";
  ------------------
  |  Branch (4014:5): [True: 65, False: 325]
  ------------------
 4015|     65|    case EResTexture:         return "shift-texture-binding";
  ------------------
  |  Branch (4015:5): [True: 65, False: 325]
  ------------------
 4016|     65|    case EResImage:           return "shift-image-binding";
  ------------------
  |  Branch (4016:5): [True: 65, False: 325]
  ------------------
 4017|     65|    case EResUbo:             return "shift-ubo-binding";
  ------------------
  |  Branch (4017:5): [True: 65, False: 325]
  ------------------
 4018|     65|    case EResSsbo:            return "shift-ssbo-binding";
  ------------------
  |  Branch (4018:5): [True: 65, False: 325]
  ------------------
 4019|     65|    case EResUav:             return "shift-uav-binding";
  ------------------
  |  Branch (4019:5): [True: 65, False: 325]
  ------------------
 4020|      0|    case EResCombinedSampler: return "shift-combined-sampler-binding";
  ------------------
  |  Branch (4020:5): [True: 0, False: 390]
  ------------------
 4021|      0|    case EResAs:              return "shift-as-binding";
  ------------------
  |  Branch (4021:5): [True: 0, False: 390]
  ------------------
 4022|      0|    case EResTensor:          return nullptr;
  ------------------
  |  Branch (4022:5): [True: 0, False: 390]
  ------------------
 4023|      0|    default:
  ------------------
  |  Branch (4023:5): [True: 0, False: 390]
  ------------------
 4024|       |        assert(0); // internal error: should only be called with valid resource types.
 4025|      0|        return nullptr;
 4026|    390|    }
 4027|    390|}
_ZN7glslang13TIntermediate10addSwizzleIiEEPNS_12TIntermTypedERNS_17TSwizzleSelectorsIT_EERKNS_10TSourceLocE:
 2599|     93|{
 2600|     93|    TIntermAggregate* node = new TIntermAggregate(EOpSequence);
 2601|       |
 2602|     93|    node->setLoc(loc);
 2603|     93|    TIntermSequence &sequenceVector = node->getSequence();
 2604|       |
 2605|    315|    for (int i = 0; i < selector.size(); i++)
  ------------------
  |  Branch (2605:21): [True: 222, False: 93]
  ------------------
 2606|    222|        pushSelector(sequenceVector, selector[i], loc);
 2607|       |
 2608|     93|    return node;
 2609|     93|}

_ZN7glslang17TParseContextBase13outputMessageERKNS_10TSourceLocEPKcS5_S5_NS_11TPrefixTypeEP13__va_list_tag:
   55|  1.87M|{
   56|  1.87M|    const int maxSize = MaxTokenLength + 200;
   57|  1.87M|    char szExtraInfo[maxSize];
   58|       |
   59|  1.87M|    safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args);
   60|       |
   61|  1.87M|    infoSink.info.prefix(prefix);
   62|  1.87M|    infoSink.info.location(loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
   63|  1.87M|    infoSink.info << "'" << szToken <<  "' : " << szReason << " " << szExtraInfo << "\n";
   64|       |
   65|  1.87M|    if (prefix == EPrefixError) {
  ------------------
  |  Branch (65:9): [True: 1.87M, False: 0]
  ------------------
   66|  1.87M|        ++numErrors;
   67|  1.87M|    }
   68|  1.87M|}
_ZN7glslang17TParseContextBase5errorERKNS_10TSourceLocEPKcS5_S5_z:
   72|  1.70M|{
   73|  1.70M|    if (messages & EShMsgOnlyPreprocessor)
  ------------------
  |  Branch (73:9): [True: 39.2k, False: 1.66M]
  ------------------
   74|  39.2k|        return;
   75|       |    // If enhanced msg readability, only print one error
   76|  1.66M|    if (messages & EShMsgEnhanced && numErrors > 0)
  ------------------
  |  Branch (76:9): [True: 0, False: 1.66M]
  |  Branch (76:38): [True: 0, False: 0]
  ------------------
   77|      0|        return;
   78|  1.66M|    va_list args;
   79|  1.66M|    va_start(args, szExtraInfoFormat);
   80|  1.66M|    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
   81|  1.66M|    va_end(args);
   82|       |
   83|  1.66M|    if ((messages & EShMsgCascadingErrors) == 0)
  ------------------
  |  Branch (83:9): [True: 25, False: 1.66M]
  ------------------
   84|     25|        currentScanner->setEndOfInput();
   85|  1.66M|}
_ZN7glslang17TParseContextBase7ppErrorERKNS_10TSourceLocEPKcS5_S5_z:
  100|   212k|{
  101|   212k|    va_list args;
  102|   212k|    va_start(args, szExtraInfoFormat);
  103|   212k|    outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args);
  104|   212k|    va_end(args);
  105|       |
  106|   212k|    if ((messages & EShMsgCascadingErrors) == 0)
  ------------------
  |  Branch (106:9): [True: 0, False: 212k]
  ------------------
  107|      0|        currentScanner->setEndOfInput();
  108|   212k|}
_ZN7glslang17TParseContextBase16lValueErrorCheckERKNS_10TSourceLocEPKcPNS_12TIntermTypedE:
  126|  2.54k|{
  127|  2.54k|    TIntermBinary* binaryNode = node->getAsBinaryNode();
  128|       |
  129|  2.54k|    const char* symbol = nullptr;
  130|  2.54k|    TIntermSymbol* symNode = node->getAsSymbolNode();
  131|  2.54k|    if (symNode != nullptr)
  ------------------
  |  Branch (131:9): [True: 2.07k, False: 471]
  ------------------
  132|  2.07k|        symbol = symNode->getName().c_str();
  133|       |
  134|  2.54k|    const char* message = nullptr;
  135|  2.54k|    switch (node->getQualifier().storage) {
  136|      0|    case EvqConst:          message = "can't modify a const";        break;
  ------------------
  |  Branch (136:5): [True: 0, False: 2.54k]
  ------------------
  137|      0|    case EvqConstReadOnly:  message = "can't modify a const";        break;
  ------------------
  |  Branch (137:5): [True: 0, False: 2.54k]
  ------------------
  138|      0|    case EvqUniform:        message = "can't modify a uniform";      break;
  ------------------
  |  Branch (138:5): [True: 0, False: 2.54k]
  ------------------
  139|      0|    case EvqBuffer:
  ------------------
  |  Branch (139:5): [True: 0, False: 2.54k]
  ------------------
  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: 2.54k]
  ------------------
  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|  2.54k|    default:
  ------------------
  |  Branch (150:5): [True: 2.54k, False: 0]
  ------------------
  151|       |        //
  152|       |        // Type that can't be written to?
  153|       |        //
  154|  2.54k|        switch (node->getBasicType()) {
  155|      0|        case EbtSampler:
  ------------------
  |  Branch (155:9): [True: 0, False: 2.54k]
  ------------------
  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: 2.54k]
  ------------------
  160|      0|            message = "can't modify void";
  161|      0|            break;
  162|      0|        case EbtAtomicUint:
  ------------------
  |  Branch (162:9): [True: 0, False: 2.54k]
  ------------------
  163|      0|            message = "can't modify an atomic_uint";
  164|      0|            break;
  165|      0|        case EbtAccStruct:
  ------------------
  |  Branch (165:9): [True: 0, False: 2.54k]
  ------------------
  166|      0|            message = "can't modify accelerationStructureNV";
  167|      0|            break;
  168|      0|        case EbtRayQuery:
  ------------------
  |  Branch (168:9): [True: 0, False: 2.54k]
  ------------------
  169|      0|            message = "can't modify rayQueryEXT";
  170|      0|            break;
  171|      0|        case EbtHitObjectNV:
  ------------------
  |  Branch (171:9): [True: 0, False: 2.54k]
  ------------------
  172|      0|            message = "can't modify hitObjectNV";
  173|      0|            break;
  174|      0|        case EbtHitObjectEXT:
  ------------------
  |  Branch (174:9): [True: 0, False: 2.54k]
  ------------------
  175|      0|            message = "can't modify hitObjectEXT";
  176|      0|            break;
  177|  2.54k|        default:
  ------------------
  |  Branch (177:9): [True: 2.54k, False: 0]
  ------------------
  178|  2.54k|            break;
  179|  2.54k|        }
  180|  2.54k|    }
  181|       |
  182|  2.54k|    if (message == nullptr && binaryNode == nullptr && symNode == nullptr) {
  ------------------
  |  Branch (182:9): [True: 2.54k, False: 0]
  |  Branch (182:31): [True: 2.07k, False: 471]
  |  Branch (182:56): [True: 0, False: 2.07k]
  ------------------
  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|  2.54k|    if (message == nullptr)
  ------------------
  |  Branch (191:9): [True: 2.54k, False: 0]
  ------------------
  192|  2.54k|    {
  193|  2.54k|        if (binaryNode) {
  ------------------
  |  Branch (193:13): [True: 471, False: 2.07k]
  ------------------
  194|    471|            switch (binaryNode->getOp()) {
  195|    471|            case EOpIndexDirect:
  ------------------
  |  Branch (195:13): [True: 471, False: 0]
  ------------------
  196|    471|            case EOpIndexIndirect:     // fall through
  ------------------
  |  Branch (196:13): [True: 0, False: 471]
  ------------------
  197|    471|            case EOpIndexDirectStruct: // fall through
  ------------------
  |  Branch (197:13): [True: 0, False: 471]
  ------------------
  198|    471|            case EOpVectorSwizzle:
  ------------------
  |  Branch (198:13): [True: 0, False: 471]
  ------------------
  199|    471|            case EOpMatrixSwizzle:
  ------------------
  |  Branch (199:13): [True: 0, False: 471]
  ------------------
  200|    471|                return lValueErrorCheck(loc, op, binaryNode->getLeft());
  201|      0|            default:
  ------------------
  |  Branch (201:13): [True: 0, False: 471]
  ------------------
  202|      0|                break;
  203|    471|            }
  204|      0|            error(loc, " l-value required", op, "", "");
  205|       |
  206|      0|            return true;
  207|    471|        }
  208|  2.07k|        return false;
  209|  2.54k|    }
  210|       |
  211|       |    //
  212|       |    // If we get here, we have an error and a message.
  213|       |    //
  214|      0|    const TIntermTyped* leftMostTypeNode = TIntermediate::traverseLValueBase(node, true);
  215|       |
  216|      0|    if (symNode)
  ------------------
  |  Branch (216:9): [True: 0, False: 0]
  ------------------
  217|      0|        error(loc, " l-value required", op, "\"%s\" (%s)", symbol, message);
  218|      0|    else
  219|      0|        if (binaryNode && binaryNode->getAsOperator()->getOp() == EOpIndexDirectStruct)
  ------------------
  |  Branch (219:13): [True: 0, False: 0]
  |  Branch (219:27): [True: 0, False: 0]
  ------------------
  220|      0|            if(IsAnonymous(leftMostTypeNode->getAsSymbolNode()->getName()))
  ------------------
  |  Branch (220:16): [True: 0, False: 0]
  ------------------
  221|      0|                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|      0|        else
  225|      0|            error(loc, " l-value required", op, "(%s)", message);
  226|       |
  227|      0|    return true;
  228|  2.54k|}
_ZN7glslang17TParseContextBase16rValueErrorCheckERKNS_10TSourceLocEPKcPNS_12TIntermTypedE:
  232|  6.93k|{
  233|  6.93k|    if (! node)
  ------------------
  |  Branch (233:9): [True: 0, False: 6.93k]
  ------------------
  234|      0|        return;
  235|       |
  236|  6.93k|    TIntermBinary* binaryNode = node->getAsBinaryNode();
  237|  6.93k|    const TIntermSymbol* symNode = node->getAsSymbolNode();
  238|       |
  239|  6.93k|    if (node->getQualifier().isWriteOnly()) {
  ------------------
  |  Branch (239:9): [True: 0, False: 6.93k]
  ------------------
  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|  6.93k|    } else {
  255|  6.93k|        if (binaryNode) {
  ------------------
  |  Branch (255:13): [True: 0, False: 6.93k]
  ------------------
  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|  6.93k|    }
  269|  6.93k|}
_ZN7glslang17TParseContextBase12trackLinkageERNS_7TSymbolE:
  278|  13.5k|{
  279|  13.5k|    if (!parsingBuiltins)
  ------------------
  |  Branch (279:9): [True: 360, False: 13.2k]
  ------------------
  280|    360|        linkageSymbols.push_back(&symbol);
  281|  13.5k|}
_ZN7glslang17TParseContextBase14selectFunctionENS_7TVectorIPKNS_9TFunctionEEERS3_NSt3__18functionIFbRKNS_5TTypeESB_NS_9TOperatorEiEEENS8_IFbSB_SB_SB_EEERb:
  386|    192|{
  387|       |//
  388|       |// Operation
  389|       |//
  390|       |// 1. Prune the input list of candidates down to a list of viable candidates,
  391|       |// where each viable candidate has
  392|       |//
  393|       |//  * at least as many parameters as there are calling arguments, with any
  394|       |//    remaining parameters being optional or having default values
  395|       |//  * each parameter is true under convertible(A, B), where A is the calling
  396|       |//    type for in and B is the formal type, and in addition, for out B is the
  397|       |//    calling type and A is the formal type
  398|       |//
  399|       |// 2. If there are no viable candidates, return with no match.
  400|       |//
  401|       |// 3. If there is only one viable candidate, it is the best match.
  402|       |//
  403|       |// 4. If there are multiple viable candidates, select the first viable candidate
  404|       |// as the incumbent. Compare the incumbent to the next viable candidate, and if
  405|       |// that candidate is better (bullets below), make it the incumbent. Repeat, with
  406|       |// a linear walk through the viable candidate list. The final incumbent will be
  407|       |// returned as the best match. A viable candidate is better than the incumbent if
  408|       |//
  409|       |//  * it has a function argument with a better(...) conversion than the incumbent,
  410|       |//    for all directions needed by in and out
  411|       |//  * the incumbent has no argument with a better(...) conversion then the
  412|       |//    candidate, for either in or out (as needed)
  413|       |//
  414|       |// 5. Check for ambiguity by comparing the best match against all other viable
  415|       |// candidates. If any other viable candidate has a function argument with a
  416|       |// better(...) conversion than the best candidate (for either in or out
  417|       |// directions), return that there was a tie for best.
  418|       |//
  419|       |
  420|    192|    tie = false;
  421|       |
  422|       |    // 1. prune to viable...
  423|    192|    TVector<const TFunction*> viableCandidates;
  424|    192|    for (auto it = candidateList.begin(); it != candidateList.end(); ++it) {
  ------------------
  |  Branch (424:43): [True: 0, False: 192]
  ------------------
  425|      0|        const TFunction& candidate = *(*it);
  426|       |
  427|       |        // to even be a potential match, number of arguments must be >= the number of
  428|       |        // fixed (non-default) parameters, and <= the total (including parameter with defaults).
  429|      0|        if (call.getParamCount() < candidate.getFixedParamCount() ||
  ------------------
  |  Branch (429:13): [True: 0, False: 0]
  ------------------
  430|      0|            (call.getParamCount() > candidate.getParamCount() && !candidate.isVariadic()))
  ------------------
  |  Branch (430:14): [True: 0, False: 0]
  |  Branch (430:66): [True: 0, False: 0]
  ------------------
  431|      0|            continue;
  432|       |
  433|       |        // see if arguments are convertible
  434|      0|        bool viable = true;
  435|       |
  436|       |        // The call can have fewer parameters than the candidate, if some have defaults.
  437|      0|        const int paramCount = std::min(call.getParamCount(), candidate.getParamCount());
  438|      0|        for (int param = 0; param < paramCount; ++param) {
  ------------------
  |  Branch (438:29): [True: 0, False: 0]
  ------------------
  439|      0|            if (candidate[param].type->getQualifier().isParamInput()) {
  ------------------
  |  Branch (439:17): [True: 0, False: 0]
  ------------------
  440|      0|                if (! convertible(*call[param].type, *candidate[param].type, candidate.getBuiltInOp(), param)) {
  ------------------
  |  Branch (440:21): [True: 0, False: 0]
  ------------------
  441|      0|                    viable = false;
  442|      0|                    break;
  443|      0|                }
  444|      0|            }
  445|      0|            if (candidate[param].type->getQualifier().isParamOutput()) {
  ------------------
  |  Branch (445:17): [True: 0, False: 0]
  ------------------
  446|      0|                if (! convertible(*candidate[param].type, *call[param].type, candidate.getBuiltInOp(), param)) {
  ------------------
  |  Branch (446:21): [True: 0, False: 0]
  ------------------
  447|      0|                    viable = false;
  448|      0|                    break;
  449|      0|                }
  450|      0|            }
  451|      0|        }
  452|       |
  453|      0|        if (viable)
  ------------------
  |  Branch (453:13): [True: 0, False: 0]
  ------------------
  454|      0|            viableCandidates.push_back(&candidate);
  455|      0|    }
  456|       |
  457|       |    // 2. none viable...
  458|    192|    if (viableCandidates.size() == 0)
  ------------------
  |  Branch (458:9): [True: 192, False: 0]
  ------------------
  459|    192|        return nullptr;
  460|       |
  461|       |    // 3. only one viable...
  462|      0|    if (viableCandidates.size() == 1)
  ------------------
  |  Branch (462:9): [True: 0, False: 0]
  ------------------
  463|      0|        return viableCandidates.front();
  464|       |
  465|       |    // 4. find best...
  466|      0|    const auto betterParam = [&call, &better](const TFunction& can1, const TFunction& can2) -> bool {
  467|       |        // is call -> can2 better than call -> can1 for any parameter
  468|      0|        bool hasBetterParam = false;
  469|      0|        const int paramCount = std::min({call.getParamCount(), can1.getParamCount(), can2.getParamCount()});
  470|      0|        for (int param = 0; param < paramCount; ++param) {
  471|      0|            if (better(*call[param].type, *can1[param].type, *can2[param].type)) {
  472|      0|                hasBetterParam = true;
  473|      0|                break;
  474|      0|            }
  475|      0|        }
  476|      0|        return hasBetterParam;
  477|      0|    };
  478|       |
  479|      0|    const auto equivalentParams = [&call, &better](const TFunction& can1, const TFunction& can2) -> bool {
  480|       |        // is call -> can2 equivalent to call -> can1 for all the call parameters?
  481|      0|        const int paramCount = std::min({call.getParamCount(), can1.getParamCount(), can2.getParamCount()});
  482|      0|        for (int param = 0; param < paramCount; ++param) {
  483|      0|            if (better(*call[param].type, *can1[param].type, *can2[param].type) ||
  484|      0|                better(*call[param].type, *can2[param].type, *can1[param].type))
  485|      0|                return false;
  486|      0|        }
  487|      0|        return true;
  488|      0|    };
  489|       |
  490|      0|    const auto enabled = [this](const TFunction& candidate) -> bool {
  491|      0|        bool enabled = candidate.getNumExtensions() == 0;
  492|      0|        for (int i = 0; i < candidate.getNumExtensions(); ++i) {
  493|      0|            TExtensionBehavior behavior = getExtensionBehavior(candidate.getExtensions()[i]);
  494|      0|            if (behavior == EBhEnable || behavior == EBhRequire)
  495|      0|                enabled = true;
  496|      0|        }
  497|      0|        return enabled;
  498|      0|    };
  499|       |
  500|      0|    const TFunction* incumbent = viableCandidates.front();
  501|      0|    for (auto it = viableCandidates.begin() + 1; it != viableCandidates.end(); ++it) {
  ------------------
  |  Branch (501:50): [True: 0, False: 0]
  ------------------
  502|      0|        const TFunction& candidate = *(*it);
  503|      0|        if (betterParam(*incumbent, candidate) && ! betterParam(candidate, *incumbent))
  ------------------
  |  Branch (503:13): [True: 0, False: 0]
  |  Branch (503:51): [True: 0, False: 0]
  ------------------
  504|      0|            incumbent = &candidate;
  505|      0|    }
  506|       |
  507|       |    // 5. ambiguity...
  508|      0|    for (auto it = viableCandidates.begin(); it != viableCandidates.end(); ++it) {
  ------------------
  |  Branch (508:46): [True: 0, False: 0]
  ------------------
  509|      0|        if (incumbent == *it)
  ------------------
  |  Branch (509:13): [True: 0, False: 0]
  ------------------
  510|      0|            continue;
  511|      0|        const TFunction& candidate = *(*it);
  512|       |
  513|       |        // In the case of default parameters, it may have an identical initial set, which is
  514|       |        // also ambiguous
  515|      0|        if ((betterParam(*incumbent, candidate) || equivalentParams(*incumbent, candidate)) && enabled(candidate))
  ------------------
  |  Branch (515:14): [True: 0, False: 0]
  |  Branch (515:52): [True: 0, False: 0]
  |  Branch (515:96): [True: 0, False: 0]
  ------------------
  516|      0|            tie = true;
  517|      0|    }
  518|       |
  519|      0|    return incumbent;
  520|      0|}
_ZN7glslang17TParseContextBase20parseSwizzleSelectorERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEEiRNS_17TSwizzleSelectorsIiEE:
  530|    582|{
  531|       |    // Too long?
  532|    582|    if (compString.size() > MaxSwizzleSelectors)
  ------------------
  |  Branch (532:9): [True: 0, False: 582]
  ------------------
  533|      0|        error(loc, "vector swizzle too long", compString.c_str(), "");
  534|       |
  535|       |    // Use this to test that all swizzle characters are from the same swizzle-namespace-set
  536|    582|    enum {
  537|    582|        exyzw,
  538|    582|        ergba,
  539|    582|        estpq,
  540|    582|    } fieldSet[MaxSwizzleSelectors];
  541|       |
  542|       |    // Decode the swizzle string.
  543|    582|    int size = std::min(MaxSwizzleSelectors, (int)compString.size());
  544|  1.29k|    for (int i = 0; i < size; ++i) {
  ------------------
  |  Branch (544:21): [True: 711, False: 582]
  ------------------
  545|    711|        switch (compString[i])  {
  546|    582|        case 'x':
  ------------------
  |  Branch (546:9): [True: 582, False: 129]
  ------------------
  547|    582|            selector.push_back(0);
  548|    582|            fieldSet[i] = exyzw;
  549|    582|            break;
  550|      0|        case 'r':
  ------------------
  |  Branch (550:9): [True: 0, False: 711]
  ------------------
  551|      0|            selector.push_back(0);
  552|      0|            fieldSet[i] = ergba;
  553|      0|            break;
  554|      0|        case 's':
  ------------------
  |  Branch (554:9): [True: 0, False: 711]
  ------------------
  555|      0|            selector.push_back(0);
  556|      0|            fieldSet[i] = estpq;
  557|      0|            break;
  558|       |
  559|     93|        case 'y':
  ------------------
  |  Branch (559:9): [True: 93, False: 618]
  ------------------
  560|     93|            selector.push_back(1);
  561|     93|            fieldSet[i] = exyzw;
  562|     93|            break;
  563|      0|        case 'g':
  ------------------
  |  Branch (563:9): [True: 0, False: 711]
  ------------------
  564|      0|            selector.push_back(1);
  565|      0|            fieldSet[i] = ergba;
  566|      0|            break;
  567|      0|        case 't':
  ------------------
  |  Branch (567:9): [True: 0, False: 711]
  ------------------
  568|      0|            selector.push_back(1);
  569|      0|            fieldSet[i] = estpq;
  570|      0|            break;
  571|       |
  572|     36|        case 'z':
  ------------------
  |  Branch (572:9): [True: 36, False: 675]
  ------------------
  573|     36|            selector.push_back(2);
  574|     36|            fieldSet[i] = exyzw;
  575|     36|            break;
  576|      0|        case 'b':
  ------------------
  |  Branch (576:9): [True: 0, False: 711]
  ------------------
  577|      0|            selector.push_back(2);
  578|      0|            fieldSet[i] = ergba;
  579|      0|            break;
  580|      0|        case 'p':
  ------------------
  |  Branch (580:9): [True: 0, False: 711]
  ------------------
  581|      0|            selector.push_back(2);
  582|      0|            fieldSet[i] = estpq;
  583|      0|            break;
  584|       |
  585|      0|        case 'w':
  ------------------
  |  Branch (585:9): [True: 0, False: 711]
  ------------------
  586|      0|            selector.push_back(3);
  587|      0|            fieldSet[i] = exyzw;
  588|      0|            break;
  589|      0|        case 'a':
  ------------------
  |  Branch (589:9): [True: 0, False: 711]
  ------------------
  590|      0|            selector.push_back(3);
  591|      0|            fieldSet[i] = ergba;
  592|      0|            break;
  593|      0|        case 'q':
  ------------------
  |  Branch (593:9): [True: 0, False: 711]
  ------------------
  594|      0|            selector.push_back(3);
  595|      0|            fieldSet[i] = estpq;
  596|      0|            break;
  597|       |
  598|      0|        default:
  ------------------
  |  Branch (598:9): [True: 0, False: 711]
  ------------------
  599|      0|            error(loc, "unknown swizzle selection", compString.c_str(), "");
  600|      0|            break;
  601|    711|        }
  602|    711|    }
  603|       |
  604|       |    // Additional error checking.
  605|  1.29k|    for (int i = 0; i < selector.size(); ++i) {
  ------------------
  |  Branch (605:21): [True: 711, False: 582]
  ------------------
  606|    711|        if (selector[i] >= vecSize) {
  ------------------
  |  Branch (606:13): [True: 0, False: 711]
  ------------------
  607|      0|            error(loc, "vector swizzle selection out of range",  compString.c_str(), "");
  608|      0|            selector.resize(i);
  609|      0|            break;
  610|      0|        }
  611|       |
  612|    711|        if (i > 0 && fieldSet[i] != fieldSet[i-1]) {
  ------------------
  |  Branch (612:13): [True: 129, False: 582]
  |  Branch (612:22): [True: 0, False: 129]
  ------------------
  613|      0|            error(loc, "vector swizzle selectors not from the same set", compString.c_str(), "");
  614|      0|            selector.resize(i);
  615|      0|            break;
  616|      0|        }
  617|    711|    }
  618|       |
  619|       |    // Ensure it is valid.
  620|    582|    if (selector.size() == 0)
  ------------------
  |  Branch (620:9): [True: 0, False: 582]
  ------------------
  621|      0|        selector.push_back(0);
  622|    582|}
_ZN7glslang17TParseContextBase6finishEv:
  742|    597|{
  743|    597|    if (parsingBuiltins)
  ------------------
  |  Branch (743:9): [True: 575, False: 22]
  ------------------
  744|    575|        return;
  745|       |
  746|     22|    for (const TString& relaxedSymbol : relaxedSymbols)
  ------------------
  |  Branch (746:39): [True: 0, False: 22]
  ------------------
  747|      0|    {
  748|      0|        TSymbol* symbol = symbolTable.find(relaxedSymbol);
  749|      0|        TType& type = symbol->getWritableType();
  750|      0|        for (const TTypeLoc& typeLoc : *type.getStruct())
  ------------------
  |  Branch (750:38): [True: 0, False: 0]
  ------------------
  751|      0|        {
  752|      0|            if (typeLoc.type->isOpaque())
  ------------------
  |  Branch (752:17): [True: 0, False: 0]
  ------------------
  753|      0|            {
  754|      0|                typeLoc.type->getSampler() = TSampler{};
  755|      0|                typeLoc.type->setBasicType(EbtInt);
  756|      0|                TString fieldName("/*");
  757|      0|                fieldName.append(typeLoc.type->getFieldName());
  758|      0|                fieldName.append("*/");
  759|      0|                typeLoc.type->setFieldName(fieldName);
  760|      0|            }
  761|      0|        }
  762|      0|    }
  763|       |
  764|       |    // Transfer the linkage symbols to AST nodes, preserving order.
  765|     22|    TIntermAggregate* linkage = new TIntermAggregate;
  766|    382|    for (auto i = linkageSymbols.begin(); i != linkageSymbols.end(); ++i)
  ------------------
  |  Branch (766:43): [True: 360, False: 22]
  ------------------
  767|    360|        intermediate.addSymbolLinkageNode(linkage, **i);
  768|     22|    intermediate.addSymbolLinkageNodes(linkage, getLanguage(), symbolTable);
  769|     22|}

_ZN7glslang13TParseContextC2ERNS_12TSymbolTableERNS_13TIntermediateEbi8EProfileRKNS_10SpvVersionE11EShLanguageR9TInfoSinkb11EShMessagesPKNSt3__112basic_stringIcNSD_11char_traitsIcEENS_14pool_allocatorIcEEEE:
   59|    626|            TParseContextBase(symbolTable, interm, parsingBuiltins, version, profile, spvVersion, language,
   60|    626|                              infoSink, forwardCompatible, messages, entryPoint),
   61|    626|            inMain(false),
   62|    626|            blockName(nullptr),
   63|    626|            limits(resources.limits),
   64|    626|            atomicUintOffsets(nullptr), anyIndexLimits(false),
   65|    626|            khrDerivativeLayoutQualifierSpecified(false)
   66|    626|{
   67|       |    // decide whether precision qualifiers should be ignored or respected
   68|    626|    if (isEsProfile() || spvVersion.vulkan > 0) {
  ------------------
  |  Branch (68:9): [True: 0, False: 626]
  |  Branch (68:26): [True: 626, False: 0]
  ------------------
   69|    626|        precisionManager.respectPrecisionQualifiers();
   70|    626|        if (! parsingBuiltins && language == EShLangFragment && !isEsProfile() && spvVersion.vulkan > 0)
  ------------------
  |  Branch (70:13): [True: 100, False: 526]
  |  Branch (70:34): [True: 0, False: 100]
  |  Branch (70:65): [True: 0, False: 0]
  |  Branch (70:83): [True: 0, False: 0]
  ------------------
   71|      0|            precisionManager.warnAboutDefaults();
   72|    626|    }
   73|       |
   74|    626|    setPrecisionDefaults();
   75|       |
   76|    626|    globalUniformDefaults.clear();
   77|    626|    globalUniformDefaults.layoutMatrix = ElmColumnMajor;
   78|    626|    globalUniformDefaults.layoutPacking = spvVersion.spv != 0 ? ElpStd140 : ElpShared;
  ------------------
  |  Branch (78:43): [True: 626, False: 0]
  ------------------
   79|       |
   80|    626|    globalBufferDefaults.clear();
   81|    626|    globalBufferDefaults.layoutMatrix = ElmColumnMajor;
   82|    626|    globalBufferDefaults.layoutPacking = spvVersion.spv != 0 ? ElpStd430 : ElpShared;
  ------------------
  |  Branch (82:42): [True: 626, False: 0]
  ------------------
   83|       |
   84|    626|    globalInputDefaults.clear();
   85|    626|    globalOutputDefaults.clear();
   86|       |
   87|    626|    globalSharedDefaults.clear();
   88|    626|    globalSharedDefaults.layoutMatrix = ElmColumnMajor;
   89|    626|    globalSharedDefaults.layoutPacking = ElpStd430;
   90|       |
   91|       |    // "Shaders in the transform
   92|       |    // feedback capturing mode have an initial global default of
   93|       |    //     layout(xfb_buffer = 0) out;"
   94|    626|    if (language == EShLangVertex ||
  ------------------
  |  Branch (94:9): [True: 380, False: 246]
  ------------------
   95|    246|        language == EShLangTessControl ||
  ------------------
  |  Branch (95:9): [True: 27, False: 219]
  ------------------
   96|    219|        language == EShLangTessEvaluation ||
  ------------------
  |  Branch (96:9): [True: 15, False: 204]
  ------------------
   97|    204|        language == EShLangGeometry)
  ------------------
  |  Branch (97:9): [True: 15, False: 189]
  ------------------
   98|    437|        globalOutputDefaults.layoutXfbBuffer = 0;
   99|       |
  100|    626|    if (language == EShLangGeometry)
  ------------------
  |  Branch (100:9): [True: 15, False: 611]
  ------------------
  101|     15|        globalOutputDefaults.layoutStream = 0;
  102|       |
  103|    626|    if (entryPoint != nullptr && entryPoint->size() > 0 && *entryPoint != "main")
  ------------------
  |  Branch (103:9): [True: 626, False: 0]
  |  Branch (103:34): [True: 0, False: 626]
  |  Branch (103:60): [True: 0, False: 0]
  ------------------
  104|      0|        infoSink.info.message(EPrefixError, "Source entry point must be \"main\"");
  105|    626|}
_ZN7glslang13TParseContextD2Ev:
  108|    626|{
  109|    626|    delete [] atomicUintOffsets;
  110|    626|}
_ZN7glslang13TParseContext20setPrecisionDefaultsEv:
  115|    626|{
  116|       |    // Set all precision defaults to EpqNone, which is correct for all types
  117|       |    // when not obeying precision qualifiers, and correct for types that don't
  118|       |    // have defaults (thus getting an error on use) when obeying precision
  119|       |    // qualifiers.
  120|       |
  121|  21.9k|    for (int type = 0; type < EbtNumTypes; ++type)
  ------------------
  |  Branch (121:24): [True: 21.2k, False: 626]
  ------------------
  122|  21.2k|        defaultPrecision[type] = EpqNone;
  123|       |
  124|  6.13M|    for (int type = 0; type < maxSamplerIndex; ++type)
  ------------------
  |  Branch (124:24): [True: 6.12M, False: 626]
  ------------------
  125|  6.12M|        defaultSamplerPrecision[type] = EpqNone;
  126|       |
  127|       |    // replace with real precision defaults for those that have them
  128|    626|    if (obeyPrecisionQualifiers()) {
  ------------------
  |  Branch (128:9): [True: 626, False: 0]
  ------------------
  129|    626|        if (isEsProfile()) {
  ------------------
  |  Branch (129:13): [True: 0, False: 626]
  ------------------
  130|       |            // Most don't have defaults, a few default to lowp.
  131|      0|            TSampler sampler;
  132|      0|            sampler.set(EbtFloat, Esd2D);
  133|      0|            defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow;
  134|      0|            sampler.set(EbtFloat, EsdCube);
  135|      0|            defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow;
  136|      0|            sampler.set(EbtFloat, Esd2D);
  137|      0|            sampler.setExternal(true);
  138|      0|            defaultSamplerPrecision[computeSamplerTypeIndex(sampler)] = EpqLow;
  139|      0|        }
  140|       |
  141|       |        // If we are parsing built-in computational variables/functions, it is meaningful to record
  142|       |        // whether the built-in has no precision qualifier, as that ambiguity
  143|       |        // is used to resolve the precision from the supplied arguments/operands instead.
  144|       |        // So, we don't actually want to replace EpqNone with a default precision for built-ins.
  145|    626|        if (! parsingBuiltins) {
  ------------------
  |  Branch (145:13): [True: 100, False: 526]
  ------------------
  146|    100|            if (isEsProfile() && language == EShLangFragment) {
  ------------------
  |  Branch (146:17): [True: 0, False: 100]
  |  Branch (146:34): [True: 0, False: 0]
  ------------------
  147|      0|                defaultPrecision[EbtInt] = EpqMedium;
  148|      0|                defaultPrecision[EbtUint] = EpqMedium;
  149|    100|            } else {
  150|    100|                defaultPrecision[EbtInt] = EpqHigh;
  151|    100|                defaultPrecision[EbtUint] = EpqHigh;
  152|    100|                defaultPrecision[EbtFloat] = EpqHigh;
  153|    100|            }
  154|       |
  155|    100|            if (!isEsProfile()) {
  ------------------
  |  Branch (155:17): [True: 100, False: 0]
  ------------------
  156|       |                // Non-ES profile
  157|       |                // All sampler precisions default to highp.
  158|   979k|                for (int type = 0; type < maxSamplerIndex; ++type)
  ------------------
  |  Branch (158:36): [True: 979k, False: 100]
  ------------------
  159|   979k|                    defaultSamplerPrecision[type] = EpqHigh;
  160|    100|            }
  161|    100|        }
  162|       |
  163|    626|        defaultPrecision[EbtSampler] = EpqLow;
  164|    626|        defaultPrecision[EbtAtomicUint] = EpqHigh;
  165|    626|    }
  166|    626|}
_ZN7glslang13TParseContext9setLimitsERK16TBuiltInResource:
  169|    100|{
  170|    100|    resources = r;
  171|    100|    intermediate.setLimits(r);
  172|       |
  173|    100|    anyIndexLimits = ! limits.generalAttributeMatrixVectorIndexing ||
  ------------------
  |  Branch (173:22): [True: 0, False: 100]
  ------------------
  174|    100|                     ! limits.generalConstantMatrixVectorIndexing ||
  ------------------
  |  Branch (174:22): [True: 0, False: 100]
  ------------------
  175|    100|                     ! limits.generalSamplerIndexing ||
  ------------------
  |  Branch (175:22): [True: 0, False: 100]
  ------------------
  176|    100|                     ! limits.generalUniformIndexing ||
  ------------------
  |  Branch (176:22): [True: 0, False: 100]
  ------------------
  177|    100|                     ! limits.generalVariableIndexing ||
  ------------------
  |  Branch (177:22): [True: 0, False: 100]
  ------------------
  178|    100|                     ! limits.generalVaryingIndexing;
  ------------------
  |  Branch (178:22): [True: 0, False: 100]
  ------------------
  179|       |
  180|       |
  181|       |    // "Each binding point tracks its own current default offset for
  182|       |    // inheritance of subsequent variables using the same binding. The initial state of compilation is that all
  183|       |    // binding points have an offset of 0."
  184|    100|    atomicUintOffsets = new int[resources.maxAtomicCounterBindings];
  185|    200|    for (int b = 0; b < resources.maxAtomicCounterBindings; ++b)
  ------------------
  |  Branch (185:21): [True: 100, False: 100]
  ------------------
  186|    100|        atomicUintOffsets[b] = 0;
  187|    100|}
_ZN7glslang13TParseContext18parseShaderStringsERNS_10TPpContextERNS_13TInputScannerEb:
  197|    540|{
  198|    540|    currentScanner = &input;
  199|    540|    ppContext.setInput(input, versionWillBeError);
  200|    540|    yyparse(this);
  201|       |
  202|    540|    finish();
  203|       |
  204|    540|    return numErrors == 0;
  205|    540|}
_ZN7glslang13TParseContext11parserErrorEPKc:
  212|     22|{
  213|     22|    if (! getScanner()->atEndOfInput() || numErrors == 0)
  ------------------
  |  Branch (213:9): [True: 12, False: 10]
  |  Branch (213:43): [True: 0, False: 10]
  ------------------
  214|     12|        error(getCurrentLoc(), "", "", s, "");
  215|     10|    else
  216|     10|        error(getCurrentLoc(), "compilation terminated", "", "");
  217|     22|}
_ZN7glslang13TParseContext14handleVariableERKNS_10TSourceLocEPNS_7TSymbolEPKNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  452|  10.9k|{
  453|  10.9k|    TIntermTyped* node = nullptr;
  454|       |
  455|       |    // Error check for requiring specific extensions present.
  456|  10.9k|    if (symbol && symbol->getNumExtensions())
  ------------------
  |  Branch (456:9): [True: 8.78k, False: 2.19k]
  |  Branch (456:19): [True: 0, False: 8.78k]
  ------------------
  457|      0|        requireExtensions(loc, symbol->getNumExtensions(), symbol->getExtensions(), symbol->getName().c_str());
  458|       |
  459|  10.9k|    if (symbol && symbol->isReadOnly()) {
  ------------------
  |  Branch (459:9): [True: 8.78k, False: 2.19k]
  |  Branch (459:19): [True: 0, False: 8.78k]
  ------------------
  460|       |        // All shared things containing an unsized array must be copied up
  461|       |        // on first use, so that all future references will share its array structure,
  462|       |        // so that editing the implicit size will effect all nodes consuming it,
  463|       |        // and so that editing the implicit size won't change the shared one.
  464|       |        //
  465|       |        // If this is a variable or a block, check it and all it contains, but if this
  466|       |        // is a member of an anonymous block, check the whole block, as the whole block
  467|       |        // will need to be copied up if it contains an unsized array.
  468|       |        //
  469|       |        // This check is being done before the block-name check further down, so guard
  470|       |        // for that too.
  471|      0|        if (!symbol->getType().isUnusableName()) {
  ------------------
  |  Branch (471:13): [True: 0, False: 0]
  ------------------
  472|      0|            if (symbol->getType().containsUnsizedArray() ||
  ------------------
  |  Branch (472:17): [True: 0, False: 0]
  ------------------
  473|      0|                (symbol->getAsAnonMember() &&
  ------------------
  |  Branch (473:18): [True: 0, False: 0]
  ------------------
  474|      0|                 symbol->getAsAnonMember()->getAnonContainer().getType().containsUnsizedArray()))
  ------------------
  |  Branch (474:18): [True: 0, False: 0]
  ------------------
  475|      0|                makeEditable(symbol);
  476|      0|        }
  477|      0|    }
  478|       |
  479|  10.9k|    const TVariable* variable;
  480|  10.9k|    const TAnonMember* anon = symbol ? symbol->getAsAnonMember() : nullptr;
  ------------------
  |  Branch (480:31): [True: 8.78k, False: 2.19k]
  ------------------
  481|  10.9k|    if (anon) {
  ------------------
  |  Branch (481:9): [True: 0, False: 10.9k]
  ------------------
  482|       |        // It was a member of an anonymous container.
  483|       |
  484|       |        // Create a subtree for its dereference.
  485|      0|        variable = anon->getAnonContainer().getAsVariable();
  486|      0|        TIntermTyped* container = intermediate.addSymbol(*variable, loc);
  487|      0|        TIntermTyped* constNode = intermediate.addConstantUnion(anon->getMemberNumber(), loc);
  488|      0|        node = intermediate.addIndex(EOpIndexDirectStruct, container, constNode, loc);
  489|       |
  490|      0|        node->setType(*(*variable->getType().getStruct())[anon->getMemberNumber()].type);
  491|      0|        if (node->getType().hiddenMember())
  ------------------
  |  Branch (491:13): [True: 0, False: 0]
  ------------------
  492|      0|            error(loc, "member of nameless block was not redeclared", string->c_str(), "");
  493|  10.9k|    } else {
  494|       |        // Not a member of an anonymous container.
  495|       |
  496|       |        // The symbol table search was done in the lexical phase.
  497|       |        // See if it was a variable.
  498|  10.9k|        variable = symbol ? symbol->getAsVariable() : nullptr;
  ------------------
  |  Branch (498:20): [True: 8.78k, False: 2.19k]
  ------------------
  499|  10.9k|        if (variable) {
  ------------------
  |  Branch (499:13): [True: 8.78k, False: 2.19k]
  ------------------
  500|  8.78k|            if (variable->getType().isUnusableName()) {
  ------------------
  |  Branch (500:17): [True: 0, False: 8.78k]
  ------------------
  501|      0|                error(loc, "cannot be used (maybe an instance name is needed)", string->c_str(), "");
  502|      0|                variable = nullptr;
  503|      0|            }
  504|       |
  505|  8.78k|            if (language == EShLangMesh && variable) {
  ------------------
  |  Branch (505:17): [True: 0, False: 8.78k]
  |  Branch (505:44): [True: 0, False: 0]
  ------------------
  506|      0|                TLayoutGeometry primitiveType = intermediate.getOutputPrimitive();
  507|      0|                if ((variable->getMangledName() == "gl_PrimitiveTriangleIndicesEXT" && primitiveType != ElgTriangles) ||
  ------------------
  |  Branch (507:22): [True: 0, False: 0]
  |  Branch (507:88): [True: 0, False: 0]
  ------------------
  508|      0|                    (variable->getMangledName() == "gl_PrimitiveLineIndicesEXT" && primitiveType != ElgLines) ||
  ------------------
  |  Branch (508:22): [True: 0, False: 0]
  |  Branch (508:84): [True: 0, False: 0]
  ------------------
  509|      0|                    (variable->getMangledName() == "gl_PrimitivePointIndicesEXT" && primitiveType != ElgPoints)) {
  ------------------
  |  Branch (509:22): [True: 0, False: 0]
  |  Branch (509:85): [True: 0, False: 0]
  ------------------
  510|      0|                    error(loc, "cannot be used (output primitive type mismatch)", string->c_str(), "");
  511|      0|                    variable = nullptr;
  512|      0|                }
  513|      0|            }
  514|  8.78k|        } else {
  515|  2.19k|            if (symbol)
  ------------------
  |  Branch (515:17): [True: 0, False: 2.19k]
  ------------------
  516|      0|                error(loc, "variable name expected", string->c_str(), "");
  517|  2.19k|        }
  518|       |
  519|       |        // Recovery, if it wasn't found or was not a variable.
  520|  10.9k|        if (! variable) {
  ------------------
  |  Branch (520:13): [True: 2.19k, False: 8.78k]
  ------------------
  521|  2.19k|            bool builtIn = false;
  522|  2.19k|            TVector<const TFunction*> candidateList;
  523|  2.19k|            symbolTable.findFunctionNameList(*string + "(", candidateList, builtIn);
  524|       |
  525|       |            // If it's a function, pass the name/mangledName
  526|  2.19k|            if (!candidateList.empty() && !builtIn) {
  ------------------
  |  Branch (526:17): [True: 1.99k, False: 195]
  |  Branch (526:43): [True: 147, False: 1.84k]
  ------------------
  527|    147|                variable = new TVariable(&candidateList[0]->getName(), &candidateList[0]->getMangledName(), TType(EbtFunction));
  528|  2.04k|            } else {
  529|  2.04k|                variable = new TVariable(string, TType(EbtVoid));
  530|  2.04k|            }
  531|  2.19k|        }
  532|       |
  533|  10.9k|        if (variable->getType().getQualifier().isFrontEndConstant())
  ------------------
  |  Branch (533:13): [True: 749, False: 10.2k]
  ------------------
  534|    749|            node = intermediate.addConstantUnion(variable->getConstArray(), variable->getType(), loc);
  535|  10.2k|        else
  536|  10.2k|            node = intermediate.addSymbol(*variable, loc);
  537|  10.9k|    }
  538|       |
  539|  10.9k|    if (variable->getType().getQualifier().isIo())
  ------------------
  |  Branch (539:9): [True: 5.62k, False: 5.35k]
  ------------------
  540|  5.62k|        intermediate.addIoAccessed(*string);
  541|       |
  542|  10.9k|    if (variable->getType().isReference() &&
  ------------------
  |  Branch (542:9): [True: 0, False: 10.9k]
  ------------------
  543|      0|        variable->getType().getQualifier().bufferReferenceNeedsVulkanMemoryModel()) {
  ------------------
  |  Branch (543:9): [True: 0, False: 0]
  ------------------
  544|      0|        intermediate.setUseVulkanMemoryModel();
  545|      0|    }
  546|       |
  547|  10.9k|    return node;
  548|  10.9k|}
_ZNK7glslang13TParseContext15isIoResizeArrayERKNS_5TTypeE:
  747|     92|{
  748|     92|    return type.isArray() &&
  ------------------
  |  Branch (748:12): [True: 58, False: 34]
  ------------------
  749|     58|           ((language == EShLangGeometry    && type.getQualifier().storage == EvqVaryingIn) ||
  ------------------
  |  Branch (749:14): [True: 8, False: 50]
  |  Branch (749:48): [True: 8, False: 0]
  ------------------
  750|     50|            (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut &&
  ------------------
  |  Branch (750:14): [True: 29, False: 21]
  |  Branch (750:48): [True: 13, False: 16]
  ------------------
  751|     13|                ! type.getQualifier().patch) ||
  ------------------
  |  Branch (751:17): [True: 13, False: 0]
  ------------------
  752|     37|            (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn &&
  ------------------
  |  Branch (752:14): [True: 0, False: 37]
  |  Branch (752:45): [True: 0, False: 0]
  ------------------
  753|      0|                (type.getQualifier().pervertexNV || type.getQualifier().pervertexEXT)) ||
  ------------------
  |  Branch (753:18): [True: 0, False: 0]
  |  Branch (753:53): [True: 0, False: 0]
  ------------------
  754|     37|            (language == EShLangMesh && type.getQualifier().storage == EvqVaryingOut &&
  ------------------
  |  Branch (754:14): [True: 20, False: 17]
  |  Branch (754:41): [True: 20, False: 0]
  ------------------
  755|     20|                !type.getQualifier().perTaskNV));
  ------------------
  |  Branch (755:17): [True: 20, False: 0]
  ------------------
  756|     92|}
_ZN7glslang13TParseContext14fixIoArraySizeERKNS_10TSourceLocERNS_5TTypeE:
  760|     51|{
  761|     51|    if (! type.isArray() || type.getQualifier().patch || symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (761:9): [True: 34, False: 17]
  |  Branch (761:29): [True: 0, False: 17]
  |  Branch (761:58): [True: 8, False: 9]
  ------------------
  762|     42|        return;
  763|       |
  764|     51|    assert(! isIoResizeArray(type));
  765|       |
  766|      9|    if (type.getQualifier().storage != EvqVaryingIn || type.getQualifier().patch)
  ------------------
  |  Branch (766:9): [True: 9, False: 0]
  |  Branch (766:56): [True: 0, False: 0]
  ------------------
  767|      9|        return;
  768|       |
  769|      0|    if (language == EShLangTessControl || language == EShLangTessEvaluation) {
  ------------------
  |  Branch (769:9): [True: 0, False: 0]
  |  Branch (769:43): [True: 0, False: 0]
  ------------------
  770|      0|        if (type.getOuterArraySize() != resources.maxPatchVertices) {
  ------------------
  |  Branch (770:13): [True: 0, False: 0]
  ------------------
  771|      0|            if (type.isSizedArray())
  ------------------
  |  Branch (771:17): [True: 0, False: 0]
  ------------------
  772|      0|                error(loc, "tessellation input array size must be gl_MaxPatchVertices or implicitly sized", "[]", "");
  773|      0|            type.changeOuterArraySize(resources.maxPatchVertices);
  774|      0|        }
  775|      0|    }
  776|      0|}
_ZN7glslang13TParseContext12ioArrayCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  782|  13.2k|{
  783|  13.2k|    if (! type.isArray() && ! symbolTable.atBuiltInLevel()) {
  ------------------
  |  Branch (783:9): [True: 13.2k, False: 0]
  |  Branch (783:29): [True: 591, False: 12.6k]
  ------------------
  784|    591|        if (type.getQualifier().isArrayedIo(language) && !type.getQualifier().layoutPassthrough)
  ------------------
  |  Branch (784:13): [True: 72, False: 519]
  |  Branch (784:58): [True: 72, False: 0]
  ------------------
  785|     72|            error(loc, "type must be an array:", type.getStorageQualifierString(), identifier.c_str());
  786|    591|    }
  787|  13.2k|}
_ZN7glslang13TParseContext24checkIoArraysConsistencyERKNS_10TSourceLocEb:
  816|     41|{
  817|     41|    int requiredSize = 0;
  818|     41|    TString featureString;
  819|     41|    size_t listSize = ioArraySymbolResizeList.size();
  820|     41|    size_t i = 0;
  821|       |
  822|       |    // If tailOnly = true, only check the last array symbol in the list.
  823|     41|    if (tailOnly) {
  ------------------
  |  Branch (823:9): [True: 41, False: 0]
  ------------------
  824|     41|        i = listSize - 1;
  825|     41|    }
  826|     41|    for (bool firstIteration = true; i < listSize; ++i) {
  ------------------
  |  Branch (826:38): [True: 41, False: 0]
  ------------------
  827|     41|        TType &type = ioArraySymbolResizeList[i]->getWritableType();
  828|       |
  829|       |        // As I/O array sizes don't change, fetch requiredSize only once,
  830|       |        // except for mesh shaders which could have different I/O array sizes based on type qualifiers.
  831|     41|        if (firstIteration || (language == EShLangMesh)) {
  ------------------
  |  Branch (831:13): [True: 41, False: 0]
  |  Branch (831:31): [True: 0, False: 0]
  ------------------
  832|     41|            requiredSize = getIoArrayImplicitSize(type.getQualifier(), &featureString);
  833|     41|            if (requiredSize == 0)
  ------------------
  |  Branch (833:17): [True: 41, False: 0]
  ------------------
  834|     41|                break;
  835|      0|            firstIteration = false;
  836|      0|        }
  837|       |
  838|      0|        checkIoArrayConsistency(loc, requiredSize, featureString.c_str(), type,
  839|      0|                                ioArraySymbolResizeList[i]->getName());
  840|      0|    }
  841|     41|}
_ZNK7glslang13TParseContext22getIoArrayImplicitSizeERKNS_10TQualifierEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  844|     41|{
  845|     41|    int expectedSize = 0;
  846|     41|    TString str = "unknown";
  847|     41|    unsigned int maxVertices = intermediate.getVertices() != TQualifier::layoutNotSet ? intermediate.getVertices() : 0;
  ------------------
  |  Branch (847:32): [True: 0, False: 41]
  ------------------
  848|       |
  849|     41|    if (language == EShLangGeometry) {
  ------------------
  |  Branch (849:9): [True: 8, False: 33]
  ------------------
  850|      8|        expectedSize = TQualifier::mapGeometryToSize(intermediate.getInputPrimitive());
  851|      8|        str = TQualifier::getGeometryString(intermediate.getInputPrimitive());
  852|      8|    }
  853|     33|    else if (language == EShLangTessControl) {
  ------------------
  |  Branch (853:14): [True: 13, False: 20]
  ------------------
  854|     13|        expectedSize = maxVertices;
  855|     13|        str = "vertices";
  856|     20|    } else if (language == EShLangFragment) {
  ------------------
  |  Branch (856:16): [True: 0, False: 20]
  ------------------
  857|       |        // Number of vertices for Fragment shader is always three.
  858|      0|        expectedSize = 3;
  859|      0|        str = "vertices";
  860|     20|    } else if (language == EShLangMesh) {
  ------------------
  |  Branch (860:16): [True: 20, False: 0]
  ------------------
  861|     20|        unsigned int maxPrimitives =
  862|     20|            intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0;
  ------------------
  |  Branch (862:13): [True: 0, False: 20]
  ------------------
  863|     20|        if (qualifier.builtIn == EbvPrimitiveIndicesNV) {
  ------------------
  |  Branch (863:13): [True: 0, False: 20]
  ------------------
  864|      0|            expectedSize = maxPrimitives * TQualifier::mapGeometryToSize(intermediate.getOutputPrimitive());
  865|      0|            str = "max_primitives*";
  866|      0|            str += TQualifier::getGeometryString(intermediate.getOutputPrimitive());
  867|      0|        }
  868|     20|        else if (qualifier.builtIn == EbvPrimitiveTriangleIndicesEXT || qualifier.builtIn == EbvPrimitiveLineIndicesEXT ||
  ------------------
  |  Branch (868:18): [True: 0, False: 20]
  |  Branch (868:73): [True: 0, False: 20]
  ------------------
  869|     20|                 qualifier.builtIn == EbvPrimitivePointIndicesEXT) {
  ------------------
  |  Branch (869:18): [True: 0, False: 20]
  ------------------
  870|      0|            expectedSize = maxPrimitives;
  871|      0|            str = "max_primitives";
  872|      0|        }
  873|     20|        else if (qualifier.isPerPrimitive()) {
  ------------------
  |  Branch (873:18): [True: 10, False: 10]
  ------------------
  874|     10|            expectedSize = maxPrimitives;
  875|     10|            str = "max_primitives";
  876|     10|        }
  877|     10|        else {
  878|     10|            expectedSize = maxVertices;
  879|     10|            str = "max_vertices";
  880|     10|        }
  881|     20|    }
  882|     41|    if (featureString)
  ------------------
  |  Branch (882:9): [True: 41, False: 0]
  ------------------
  883|     41|        *featureString = str;
  884|     41|    return expectedSize;
  885|     41|}
_ZN7glslang13TParseContext16handleBinaryMathERKNS_10TSourceLocEPKcNS_9TOperatorEPNS_12TIntermTypedES8_:
  910|      3|{
  911|      3|    rValueErrorCheck(loc, str, left->getAsTyped());
  912|      3|    rValueErrorCheck(loc, str, right->getAsTyped());
  913|       |
  914|      3|    bool allowed = true;
  915|      3|    switch (op) {
  916|       |    // TODO: Bring more source language-specific checks up from intermediate.cpp
  917|       |    // to the specific parse helpers for that source language.
  918|      0|    case EOpLessThan:
  ------------------
  |  Branch (918:5): [True: 0, False: 3]
  ------------------
  919|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (919:5): [True: 0, False: 3]
  ------------------
  920|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (920:5): [True: 0, False: 3]
  ------------------
  921|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (921:5): [True: 0, False: 3]
  ------------------
  922|      0|        if (! left->isScalar() || ! right->isScalar())
  ------------------
  |  Branch (922:13): [True: 0, False: 0]
  |  Branch (922:35): [True: 0, False: 0]
  ------------------
  923|      0|            allowed = false;
  924|      0|        break;
  925|      3|    default:
  ------------------
  |  Branch (925:5): [True: 3, False: 0]
  ------------------
  926|      3|        break;
  927|      3|    }
  928|       |
  929|      3|    if (((left->getType().contains16BitFloat() || right->getType().contains16BitFloat()) && !float16Arithmetic()) ||
  ------------------
  |  Branch (929:11): [True: 0, False: 3]
  |  Branch (929:51): [True: 0, False: 3]
  |  Branch (929:93): [True: 0, False: 0]
  ------------------
  930|      3|        ((left->getType().contains16BitInt() || right->getType().contains16BitInt()) && !int16Arithmetic()) ||
  ------------------
  |  Branch (930:11): [True: 0, False: 3]
  |  Branch (930:49): [True: 0, False: 3]
  |  Branch (930:89): [True: 0, False: 0]
  ------------------
  931|      3|        ((left->getType().contains8BitInt() || right->getType().contains8BitInt()) && !int8Arithmetic()) ||
  ------------------
  |  Branch (931:11): [True: 0, False: 3]
  |  Branch (931:48): [True: 0, False: 3]
  |  Branch (931:87): [True: 0, False: 0]
  ------------------
  932|      3|        (left->getType().containsBFloat16() || right->getType().containsBFloat16()) ||
  ------------------
  |  Branch (932:10): [True: 0, False: 3]
  |  Branch (932:48): [True: 0, False: 3]
  ------------------
  933|      3|        (left->getType().contains8BitFloat() || right->getType().contains8BitFloat())) {
  ------------------
  |  Branch (933:10): [True: 0, False: 3]
  |  Branch (933:49): [True: 0, False: 3]
  ------------------
  934|      0|        allowed = false;
  935|      0|    }
  936|       |
  937|      3|    TIntermTyped* result = nullptr;
  938|      3|    if (allowed) {
  ------------------
  |  Branch (938:9): [True: 3, False: 0]
  ------------------
  939|      3|        if ((left->isReference() || right->isReference()))
  ------------------
  |  Branch (939:14): [True: 0, False: 3]
  |  Branch (939:37): [True: 0, False: 3]
  ------------------
  940|      0|            requireExtensions(loc, 1, &E_GL_EXT_buffer_reference2, "buffer reference math");
  941|      3|        result = intermediate.addBinaryMath(op, left, right, loc);
  942|      3|    }
  943|       |
  944|      3|    if (result == nullptr) {
  ------------------
  |  Branch (944:9): [True: 0, False: 3]
  ------------------
  945|      0|        bool enhanced = intermediate.getEnhancedMsgs();
  946|      0|        binaryOpError(loc, str, left->getCompleteString(enhanced), right->getCompleteString(enhanced));
  947|      0|    }
  948|       |
  949|      3|    return result;
  950|      3|}
_ZN7glslang13TParseContext15handleUnaryMathERKNS_10TSourceLocEPKcNS_9TOperatorEPNS_12TIntermTypedE:
  954|    103|{
  955|    103|    rValueErrorCheck(loc, str, childNode);
  956|       |
  957|    103|    bool allowed = true;
  958|    103|    if ((childNode->getType().contains16BitFloat() && !float16Arithmetic()) ||
  ------------------
  |  Branch (958:10): [True: 0, False: 103]
  |  Branch (958:55): [True: 0, False: 0]
  ------------------
  959|    103|        (childNode->getType().contains16BitInt() && !int16Arithmetic()) ||
  ------------------
  |  Branch (959:10): [True: 0, False: 103]
  |  Branch (959:53): [True: 0, False: 0]
  ------------------
  960|    103|        (childNode->getType().contains8BitInt() && !int8Arithmetic()) ||
  ------------------
  |  Branch (960:10): [True: 0, False: 103]
  |  Branch (960:52): [True: 0, False: 0]
  ------------------
  961|    103|        (childNode->getType().containsBFloat16()) ||
  ------------------
  |  Branch (961:9): [True: 0, False: 103]
  ------------------
  962|    103|        (childNode->getType().contains8BitFloat())) {
  ------------------
  |  Branch (962:9): [True: 0, False: 103]
  ------------------
  963|      0|        allowed = false;
  964|      0|    }
  965|       |
  966|    103|    TIntermTyped* result = nullptr;
  967|    103|    if (allowed)
  ------------------
  |  Branch (967:9): [True: 103, False: 0]
  ------------------
  968|    103|        result = intermediate.addUnaryMath(op, childNode, loc);
  969|       |
  970|    103|    if (result)
  ------------------
  |  Branch (970:9): [True: 103, False: 0]
  ------------------
  971|    103|        return result;
  972|      0|    else {
  973|      0|        bool enhanced = intermediate.getEnhancedMsgs();
  974|      0|        unaryOpError(loc, str, childNode->getCompleteString(enhanced));
  975|      0|    }
  976|       |
  977|      0|    return childNode;
  978|    103|}
_ZN7glslang13TParseContext20handleDotDereferenceERKNS_10TSourceLocEPNS_12TIntermTypedERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEE:
  984|    582|{
  985|    582|    variableCheck(base);
  986|       |
  987|       |    //
  988|       |    // .length() can't be resolved until we later see the function-calling syntax.
  989|       |    // Save away the name in the AST for now.  Processing is completed in
  990|       |    // handleLengthMethod().
  991|       |    //
  992|    582|    if (field == "length" || field == "length64") {
  ------------------
  |  Branch (992:9): [True: 0, False: 582]
  |  Branch (992:30): [True: 0, False: 582]
  ------------------
  993|      0|        if (base->isArray()) {
  ------------------
  |  Branch (993:13): [True: 0, False: 0]
  ------------------
  994|      0|            profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, (TString(".") + field).c_str());
  995|      0|            profileRequires(loc, EEsProfile, 300, nullptr, (TString(".") + field).c_str());
  996|      0|        } else if (base->isVector() || base->isMatrix()) {
  ------------------
  |  Branch (996:20): [True: 0, False: 0]
  |  Branch (996:40): [True: 0, False: 0]
  ------------------
  997|      0|            const char* feature = ".length() on vectors and matrices";
  998|      0|            requireProfile(loc, ~EEsProfile, feature);
  999|      0|            profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, feature);
 1000|      0|        } else if (!base->getType().isCoopMat() && !base->getType().isCoopVecOrLongVector()) {
  ------------------
  |  Branch (1000:20): [True: 0, False: 0]
  |  Branch (1000:52): [True: 0, False: 0]
  ------------------
 1001|      0|            bool enhanced = intermediate.getEnhancedMsgs();
 1002|      0|            error(loc, "does not operate on this type:", field.c_str(), base->getType().getCompleteString(enhanced).c_str());
 1003|      0|            return base;
 1004|      0|        }
 1005|       |
 1006|      0|        if (field == "length") {
  ------------------
  |  Branch (1006:13): [True: 0, False: 0]
  ------------------
 1007|      0|            return intermediate.addMethod(base, TType(EbtInt), &field, loc);
 1008|      0|        } else {
 1009|      0|            requireExtensions(loc, 1, &E_GL_EXT_shader_64bit_indexing, "length64");
 1010|      0|            return intermediate.addMethod(base, TType(EbtInt64), &field, loc);
 1011|      0|        }
 1012|      0|    }
 1013|       |
 1014|       |    // It's not .length() if we get to here.
 1015|       |
 1016|    582|    if (base->isArray()) {
  ------------------
  |  Branch (1016:9): [True: 0, False: 582]
  ------------------
 1017|      0|        error(loc, "cannot apply to an array:", ".", field.c_str());
 1018|       |
 1019|      0|        return base;
 1020|      0|    }
 1021|       |
 1022|    582|    if (base->getType().isCoopMat()) {
  ------------------
  |  Branch (1022:9): [True: 0, False: 582]
  ------------------
 1023|      0|        error(loc, "cannot apply to a cooperative matrix type:", ".", field.c_str());
 1024|      0|        return base;
 1025|      0|    }
 1026|       |
 1027|       |    // It's neither an array nor .length() if we get here,
 1028|       |    // leaving swizzles and struct/block dereferences.
 1029|       |
 1030|    582|    TIntermTyped* result = base;
 1031|    582|    if ((base->isVector() || base->isScalar()) &&
  ------------------
  |  Branch (1031:10): [True: 582, False: 0]
  |  Branch (1031:30): [True: 0, False: 0]
  ------------------
 1032|    582|        (base->isFloatingDomain() || base->isIntegerDomain() || base->getBasicType() == EbtBool)) {
  ------------------
  |  Branch (1032:10): [True: 474, False: 108]
  |  Branch (1032:38): [True: 108, False: 0]
  |  Branch (1032:65): [True: 0, False: 0]
  ------------------
 1033|    582|        result = handleDotSwizzle(loc, base, field);
 1034|    582|    } else if (base->isStruct() || base->isReference()) {
  ------------------
  |  Branch (1034:16): [True: 0, False: 0]
  |  Branch (1034:36): [True: 0, False: 0]
  ------------------
 1035|      0|        const TTypeList* fields = base->isReference() ?
  ------------------
  |  Branch (1035:35): [True: 0, False: 0]
  ------------------
 1036|      0|                                  base->getType().getReferentType()->getStruct() :
 1037|      0|                                  base->getType().getStruct();
 1038|      0|        bool fieldFound = false;
 1039|      0|        int member;
 1040|      0|        for (member = 0; member < (int)fields->size(); ++member) {
  ------------------
  |  Branch (1040:26): [True: 0, False: 0]
  ------------------
 1041|      0|            if ((*fields)[member].type->getFieldName() == field) {
  ------------------
  |  Branch (1041:17): [True: 0, False: 0]
  ------------------
 1042|      0|                fieldFound = true;
 1043|      0|                break;
 1044|      0|            }
 1045|      0|        }
 1046|       |
 1047|      0|        if (fieldFound) {
  ------------------
  |  Branch (1047:13): [True: 0, False: 0]
  ------------------
 1048|      0|            if (spvVersion.vulkan != 0 && spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (1048:17): [True: 0, False: 0]
  |  Branch (1048:43): [True: 0, False: 0]
  ------------------
 1049|      0|                result = vkRelaxedRemapDotDereference(loc, *base, *(*fields)[member].type, field);
 1050|       |
 1051|      0|            if (result == base)
  ------------------
  |  Branch (1051:17): [True: 0, False: 0]
  ------------------
 1052|      0|            {
 1053|      0|                if (base->getType().getQualifier().isFrontEndConstant())
  ------------------
  |  Branch (1053:21): [True: 0, False: 0]
  ------------------
 1054|      0|                    result = intermediate.foldDereference(base, member, loc);
 1055|      0|                else {
 1056|      0|                    blockMemberExtensionCheck(loc, base, member, field);
 1057|      0|                    TIntermTyped* index = intermediate.addConstantUnion(member, loc);
 1058|      0|                    result = intermediate.addIndex(EOpIndexDirectStruct, base, index, loc);
 1059|      0|                    result->setType(*(*fields)[member].type);
 1060|      0|                    if ((*fields)[member].type->getQualifier().isIo())
  ------------------
  |  Branch (1060:25): [True: 0, False: 0]
  ------------------
 1061|      0|                        intermediate.addIoAccessed(field);
 1062|      0|                }
 1063|      0|            }
 1064|       |
 1065|      0|            inheritMemoryQualifiers(base->getQualifier(), result->getWritableType().getQualifier());
 1066|      0|        } else {
 1067|      0|            auto baseSymbol = base;
 1068|      0|            while (baseSymbol->getAsSymbolNode() == nullptr) {
  ------------------
  |  Branch (1068:20): [True: 0, False: 0]
  ------------------
 1069|      0|                auto binaryNode = baseSymbol->getAsBinaryNode();
 1070|      0|                if (binaryNode == nullptr) break;
  ------------------
  |  Branch (1070:21): [True: 0, False: 0]
  ------------------
 1071|      0|                baseSymbol = binaryNode->getLeft();
 1072|      0|            }
 1073|      0|            if (baseSymbol->getAsSymbolNode() != nullptr) {
  ------------------
  |  Branch (1073:17): [True: 0, False: 0]
  ------------------
 1074|      0|                TString structName;
 1075|      0|                structName.append("\'").append(baseSymbol->getAsSymbolNode()->getName().c_str()).append("\'");
 1076|      0|                error(loc, "no such field in structure", field.c_str(), structName.c_str());
 1077|      0|            } else {
 1078|      0|                error(loc, "no such field in structure", field.c_str(), "");
 1079|      0|            }
 1080|      0|        }
 1081|      0|    } else
 1082|      0|        error(loc, "does not apply to this type:", field.c_str(),
 1083|      0|          base->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str());
 1084|       |
 1085|       |    // Propagate noContraction up the dereference chain
 1086|    582|    if (base->getQualifier().isNoContraction())
  ------------------
  |  Branch (1086:9): [True: 0, False: 582]
  ------------------
 1087|      0|        result->getWritableType().getQualifier().setNoContraction();
 1088|       |
 1089|       |    // Propagate nonuniform
 1090|    582|    if (base->getQualifier().isNonUniform())
  ------------------
  |  Branch (1090:9): [True: 0, False: 582]
  ------------------
 1091|      0|        result->getWritableType().getQualifier().nonUniform = true;
 1092|       |
 1093|    582|    return result;
 1094|    582|}
_ZN7glslang13TParseContext16handleDotSwizzleERKNS_10TSourceLocEPNS_12TIntermTypedERKNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 1100|    582|{
 1101|    582|    TIntermTyped* result = base;
 1102|    582|    if (base->isScalar()) {
  ------------------
  |  Branch (1102:9): [True: 0, False: 582]
  ------------------
 1103|      0|        const char* dotFeature = "scalar swizzle";
 1104|      0|        requireProfile(loc, ~EEsProfile, dotFeature);
 1105|      0|        profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, dotFeature);
 1106|      0|    }
 1107|       |
 1108|    582|    TSwizzleSelectors<TVectorSelector> selectors;
 1109|    582|    parseSwizzleSelector(loc, field, base->getVectorSize(), selectors);
 1110|       |
 1111|    582|    if (base->isVector() && selectors.size() != 1 && base->getType().contains16BitFloat())
  ------------------
  |  Branch (1111:9): [True: 582, False: 0]
  |  Branch (1111:29): [True: 93, False: 489]
  |  Branch (1111:54): [True: 0, False: 93]
  ------------------
 1112|      0|        requireFloat16Arithmetic(loc, ".", "can't swizzle types containing float16");
 1113|    582|    if (base->isVector() && selectors.size() != 1 && base->getType().contains16BitInt())
  ------------------
  |  Branch (1113:9): [True: 582, False: 0]
  |  Branch (1113:29): [True: 93, False: 489]
  |  Branch (1113:54): [True: 0, False: 93]
  ------------------
 1114|      0|        requireInt16Arithmetic(loc, ".", "can't swizzle types containing (u)int16");
 1115|    582|    if (base->isVector() && selectors.size() != 1 && base->getType().contains8BitInt())
  ------------------
  |  Branch (1115:9): [True: 582, False: 0]
  |  Branch (1115:29): [True: 93, False: 489]
  |  Branch (1115:54): [True: 0, False: 93]
  ------------------
 1116|      0|        requireInt8Arithmetic(loc, ".", "can't swizzle types containing (u)int8");
 1117|       |
 1118|    582|    if (base->isScalar()) {
  ------------------
  |  Branch (1118:9): [True: 0, False: 582]
  ------------------
 1119|      0|        if (selectors.size() == 1)
  ------------------
  |  Branch (1119:13): [True: 0, False: 0]
  ------------------
 1120|      0|            return result;
 1121|      0|        else {
 1122|      0|            TType type(base->getBasicType(), EvqTemporary, selectors.size());
 1123|       |            // Swizzle operations propagate specialization-constantness
 1124|      0|            if (base->getQualifier().isSpecConstant())
  ------------------
  |  Branch (1124:17): [True: 0, False: 0]
  ------------------
 1125|      0|                type.getQualifier().makeSpecConstant();
 1126|      0|            return addConstructor(loc, base, type);
 1127|      0|        }
 1128|      0|    }
 1129|       |
 1130|    582|    if (base->getType().getQualifier().isFrontEndConstant()) {
  ------------------
  |  Branch (1130:9): [True: 0, False: 582]
  ------------------
 1131|      0|	rValueErrorCheck(loc, ".", base);
 1132|      0|        result = intermediate.foldSwizzle(base, selectors, loc);
 1133|    582|    } else {
 1134|    582|        if (selectors.size() == 1) {
  ------------------
  |  Branch (1134:13): [True: 489, False: 93]
  ------------------
 1135|    489|            TIntermTyped* index = intermediate.addConstantUnion(selectors[0], loc);
 1136|    489|            result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
 1137|    489|            result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision));
 1138|    489|        } else {
 1139|     93|            TIntermTyped* index = intermediate.addSwizzle(selectors, loc);
 1140|     93|            result = intermediate.addIndex(EOpVectorSwizzle, base, index, loc);
 1141|     93|            result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision, selectors.size()));
 1142|     93|        }
 1143|       |        // Swizzle operations propagate specialization-constantness
 1144|    582|        if (base->getType().getQualifier().isSpecConstant())
  ------------------
  |  Branch (1144:13): [True: 0, False: 582]
  ------------------
 1145|      0|            result->getWritableType().getQualifier().makeSpecConstant();
 1146|    582|    }
 1147|       |
 1148|    582|    return result;
 1149|    582|}
_ZN7glslang13TParseContext24handleFunctionDeclaratorERKNS_10TSourceLocERNS_9TFunctionEb:
 1198|   467k|{
 1199|       |    // ES can't declare prototypes inside functions
 1200|   467k|    if (! symbolTable.atGlobalLevel())
  ------------------
  |  Branch (1200:9): [True: 0, False: 467k]
  ------------------
 1201|      0|        requireProfile(loc, ~EEsProfile, "local function declaration");
 1202|       |
 1203|       |    //
 1204|       |    // Multiple declarations of the same function name are allowed.
 1205|       |    //
 1206|       |    // If this is a definition, the definition production code will check for redefinitions
 1207|       |    // (we don't know at this point if it's a definition or not).
 1208|       |    //
 1209|       |    // Redeclarations (full signature match) are allowed.  But, return types and parameter qualifiers must also match.
 1210|       |    //  - except ES 100, which only allows a single prototype
 1211|       |    //
 1212|       |    // ES 100 does not allow redefining, but does allow overloading of built-in functions.
 1213|       |    // ES 300 does not allow redefining or overloading of built-in functions.
 1214|       |    //
 1215|   467k|    bool builtIn;
 1216|   467k|    TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn);
 1217|   467k|    if (symbol && symbol->getAsFunction() && builtIn)
  ------------------
  |  Branch (1217:9): [True: 2.97k, False: 464k]
  |  Branch (1217:19): [True: 2.97k, False: 0]
  |  Branch (1217:46): [True: 2.97k, False: 0]
  ------------------
 1218|  2.97k|        requireProfile(loc, ~EEsProfile, "redefinition of built-in function");
 1219|       |    // Check the validity of using spirv_literal qualifier
 1220|  1.55M|    for (int i = 0; i < function.getParamCount(); ++i) {
  ------------------
  |  Branch (1220:21): [True: 1.09M, False: 467k]
  ------------------
 1221|  1.09M|        if (function[i].type->getQualifier().isSpirvLiteral() && function.getBuiltInOp() != EOpSpirvInst)
  ------------------
  |  Branch (1221:13): [True: 0, False: 1.09M]
  |  Branch (1221:66): [True: 0, False: 0]
  ------------------
 1222|      0|            error(loc, "'spirv_literal' can only be used on functions defined with 'spirv_instruction' for argument",
 1223|      0|                  function.getName().c_str(), "%d", i + 1);
 1224|  1.09M|    }
 1225|       |
 1226|       |    // For function declaration with SPIR-V instruction qualifier, always ignore the built-in function and
 1227|       |    // respect this redeclared one.
 1228|   467k|    if (symbol && builtIn && function.getBuiltInOp() == EOpSpirvInst)
  ------------------
  |  Branch (1228:9): [True: 2.97k, False: 464k]
  |  Branch (1228:19): [True: 2.97k, False: 0]
  |  Branch (1228:30): [True: 0, False: 2.97k]
  ------------------
 1229|      0|        symbol = nullptr;
 1230|   467k|    const TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr;
  ------------------
  |  Branch (1230:32): [True: 2.97k, False: 464k]
  ------------------
 1231|   467k|    if (prevDec) {
  ------------------
  |  Branch (1231:9): [True: 2.97k, False: 464k]
  ------------------
 1232|  2.97k|        if (prevDec->isPrototyped() && prototype)
  ------------------
  |  Branch (1232:13): [True: 0, False: 2.97k]
  |  Branch (1232:40): [True: 0, False: 0]
  ------------------
 1233|      0|            profileRequires(loc, EEsProfile, 300, nullptr, "multiple prototypes for same function");
 1234|  2.97k|        if (prevDec->getSpirvInstruction() != function.getSpirvInstruction()) {
  ------------------
  |  Branch (1234:13): [True: 0, False: 2.97k]
  ------------------
 1235|      0|            error(loc, "overloaded functions must have the same qualifiers", function.getName().c_str(),
 1236|      0|                  "spirv_instruction");
 1237|      0|        }
 1238|  2.97k|        bool parameterTypesDiffer = false;
 1239|  9.38k|        for (int i = 0; i < prevDec->getParamCount(); ++i) {
  ------------------
  |  Branch (1239:25): [True: 6.41k, False: 2.97k]
  ------------------
 1240|  6.41k|            if ((*prevDec)[i].type->getQualifier().storage != function[i].type->getQualifier().storage)
  ------------------
  |  Branch (1240:17): [True: 0, False: 6.41k]
  ------------------
 1241|      0|                error(loc, "overloaded functions must have the same parameter storage qualifiers for argument", function[i].type->getStorageQualifierString(), "%d", i+1);
 1242|       |
 1243|  6.41k|            if ((*prevDec)[i].type->getQualifier().precision != function[i].type->getQualifier().precision)
  ------------------
  |  Branch (1243:17): [True: 0, False: 6.41k]
  ------------------
 1244|      0|                error(loc, "overloaded functions must have the same parameter precision qualifiers for argument", function[i].type->getPrecisionQualifierString(), "%d", i+1);
 1245|       |
 1246|  6.41k|            if (*(*prevDec)[i].type != *function[i].type)
  ------------------
  |  Branch (1246:17): [True: 0, False: 6.41k]
  ------------------
 1247|      0|                parameterTypesDiffer = true;
 1248|  6.41k|        }
 1249|  2.97k|        if (!parameterTypesDiffer && prevDec->getType() != function.getType())
  ------------------
  |  Branch (1249:13): [True: 2.97k, False: 0]
  |  Branch (1249:38): [True: 0, False: 2.97k]
  ------------------
 1250|      0|            error(loc, "overloaded functions must have the same return type", function.getName().c_str(), "");
 1251|  2.97k|    }
 1252|       |
 1253|   467k|    arrayObjectCheck(loc, function.getType(), "array in function return type");
 1254|       |
 1255|   467k|    if (prototype) {
  ------------------
  |  Branch (1255:9): [True: 466k, False: 246]
  ------------------
 1256|       |        // All built-in functions are defined, even though they don't have a body.
 1257|       |        // Count their prototype as a definition instead.
 1258|   466k|        if (symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (1258:13): [True: 466k, False: 0]
  ------------------
 1259|   466k|            function.setDefined();
 1260|      0|        else {
 1261|      0|            if (prevDec && ! builtIn)
  ------------------
  |  Branch (1261:17): [True: 0, False: 0]
  |  Branch (1261:28): [True: 0, False: 0]
  ------------------
 1262|      0|                symbol->getAsFunction()->setPrototyped();  // need a writable one, but like having prevDec as a const
 1263|      0|            function.setPrototyped();
 1264|      0|        }
 1265|   466k|    }
 1266|       |
 1267|       |    // This insert won't actually insert it if it's a duplicate signature, but it will still check for
 1268|       |    // other forms of name collisions.
 1269|   467k|    if (! symbolTable.insert(function))
  ------------------
  |  Branch (1269:9): [True: 0, False: 467k]
  ------------------
 1270|      0|        error(loc, "function name is redeclaration of existing name", function.getName().c_str(), "");
 1271|       |
 1272|       |    //
 1273|       |    // If this is a redeclaration, it could also be a definition,
 1274|       |    // in which case, we need to use the parameter names from this one, and not the one that's
 1275|       |    // being redeclared.  So, pass back this declaration, not the one in the symbol table.
 1276|       |    //
 1277|   467k|    return &function;
 1278|   467k|}
_ZN7glslang13TParseContext24handleFunctionDefinitionERKNS_10TSourceLocERNS_9TFunctionE:
 1285|    246|{
 1286|    246|    currentCaller = function.getMangledName();
 1287|    246|    TSymbol* symbol = symbolTable.find(function.getMangledName());
 1288|    246|    TFunction* prevDec = symbol ? symbol->getAsFunction() : nullptr;
  ------------------
  |  Branch (1288:26): [True: 246, False: 0]
  ------------------
 1289|       |
 1290|    246|    if (! prevDec)
  ------------------
  |  Branch (1290:9): [True: 0, False: 246]
  ------------------
 1291|      0|        error(loc, "can't find function", function.getName().c_str(), "");
 1292|       |    // Note:  'prevDec' could be 'function' if this is the first time we've seen function
 1293|       |    // as it would have just been put in the symbol table.  Otherwise, we're looking up
 1294|       |    // an earlier occurrence.
 1295|       |
 1296|    246|    if (prevDec && prevDec->isDefined()) {
  ------------------
  |  Branch (1296:9): [True: 246, False: 0]
  |  Branch (1296:20): [True: 0, False: 246]
  ------------------
 1297|       |        // Then this function already has a body.
 1298|      0|        error(loc, "function already has a body", function.getName().c_str(), "");
 1299|      0|    }
 1300|    246|    if (prevDec && ! prevDec->isDefined()) {
  ------------------
  |  Branch (1300:9): [True: 246, False: 0]
  |  Branch (1300:20): [True: 246, False: 0]
  ------------------
 1301|    246|        prevDec->setDefined();
 1302|       |
 1303|       |        // Remember the return type for later checking for RETURN statements.
 1304|    246|        currentFunctionType = &(prevDec->getType());
 1305|    246|    } else
 1306|      0|        currentFunctionType = new TType(EbtVoid);
 1307|    246|    functionReturnsValue = false;
 1308|       |
 1309|       |    // Check for entry point
 1310|    246|    if (function.getName().compare(intermediate.getEntryPointName().c_str()) == 0) {
  ------------------
  |  Branch (1310:9): [True: 3, False: 243]
  ------------------
 1311|      3|        intermediate.setEntryPointMangledName(function.getMangledName().c_str());
 1312|      3|        intermediate.incrementEntryPointCount();
 1313|      3|        inMain = true;
 1314|      3|    } else
 1315|    243|        inMain = false;
 1316|       |
 1317|       |    //
 1318|       |    // Raise error message if main function takes any parameters or returns anything other than void
 1319|       |    //
 1320|    246|    if (inMain) {
  ------------------
  |  Branch (1320:9): [True: 3, False: 243]
  ------------------
 1321|      3|        if (function.getParamCount() > 0)
  ------------------
  |  Branch (1321:13): [True: 0, False: 3]
  ------------------
 1322|      0|            error(loc, "function cannot take any parameter(s)", function.getName().c_str(), "");
 1323|      3|        if (function.getType().getBasicType() != EbtVoid)
  ------------------
  |  Branch (1323:13): [True: 0, False: 3]
  ------------------
 1324|      0|            error(loc, "", function.getType().getBasicTypeString().c_str(), "entry point cannot return a value");
 1325|      3|        if (function.getLinkType() != ELinkNone)
  ------------------
  |  Branch (1325:13): [True: 0, False: 3]
  ------------------
 1326|      0|            error(loc, "main function cannot be exported", "", "");
 1327|      3|    }
 1328|       |
 1329|       |    //
 1330|       |    // New symbol table scope for body of function plus its arguments
 1331|       |    //
 1332|    246|    symbolTable.push();
 1333|       |
 1334|       |    //
 1335|       |    // Insert parameters into the symbol table.
 1336|       |    // If the parameter has no name, it's not an error, just don't insert it
 1337|       |    // (could be used for unused args).
 1338|       |    //
 1339|       |    // Also, accumulate the list of parameters into the HIL, so lower level code
 1340|       |    // knows where to find parameters.
 1341|       |    //
 1342|    246|    TIntermAggregate* paramNodes = new TIntermAggregate;
 1343|    252|    for (int i = 0; i < function.getParamCount(); i++) {
  ------------------
  |  Branch (1343:21): [True: 6, False: 246]
  ------------------
 1344|      6|        TParameter& param = function[i];
 1345|      6|        if (param.name != nullptr) {
  ------------------
  |  Branch (1345:13): [True: 6, False: 0]
  ------------------
 1346|      6|            TVariable *variable = new TVariable(param.name, *param.type);
 1347|       |
 1348|       |            // Insert the parameters with name in the symbol table.
 1349|      6|            if (! symbolTable.insert(*variable))
  ------------------
  |  Branch (1349:17): [True: 0, False: 6]
  ------------------
 1350|      0|                error(loc, "redefinition", variable->getName().c_str(), "");
 1351|      6|            else {
 1352|       |                // Transfer ownership of name pointer to symbol table.
 1353|      6|                param.name = nullptr;
 1354|       |
 1355|       |                // Add the parameter to the HIL
 1356|      6|                paramNodes = intermediate.growAggregate(paramNodes,
 1357|      6|                                                        intermediate.addSymbol(*variable, loc),
 1358|      6|                                                        loc);
 1359|      6|            }
 1360|      6|        } else
 1361|      0|            paramNodes = intermediate.growAggregate(paramNodes, intermediate.addSymbol(*param.type, loc), loc);
 1362|      6|    }
 1363|    246|    paramNodes->setLinkType(function.getLinkType());
 1364|    246|    intermediate.setAggregateOperator(paramNodes, EOpParameters, TType(EbtVoid), loc);
 1365|    246|    loopNestingLevel = 0;
 1366|    246|    statementNestingLevel = 0;
 1367|    246|    controlFlowNestingLevel = 0;
 1368|    246|    postEntryPointReturn = false;
 1369|       |
 1370|    246|    return paramNodes;
 1371|    246|}
_ZN7glslang13TParseContext18handleFunctionCallERKNS_10TSourceLocEPNS_9TFunctionEP11TIntermNode:
 1383|  2.99k|{
 1384|  2.99k|    TIntermTyped* result = nullptr;
 1385|       |
 1386|  2.99k|    if (spvVersion.vulkan != 0 && spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (1386:9): [True: 2.99k, False: 0]
  |  Branch (1386:35): [True: 0, False: 2.99k]
  ------------------
 1387|       |        // allow calls that are invalid in Vulkan Semantics to be invisibily
 1388|       |        // remapped to equivalent valid functions
 1389|      0|        result = vkRelaxedRemapFunctionCall(loc, function, arguments);
 1390|      0|        if (result)
  ------------------
  |  Branch (1390:13): [True: 0, False: 0]
  ------------------
 1391|      0|            return result;
 1392|      0|    }
 1393|       |
 1394|  2.99k|    if (function->getBuiltInOp() == EOpArrayLength)
  ------------------
  |  Branch (1394:9): [True: 0, False: 2.99k]
  ------------------
 1395|      0|        result = handleLengthMethod(loc, function, arguments);
 1396|  2.99k|    else if (function->getBuiltInOp() != EOpNull) {
  ------------------
  |  Branch (1396:14): [True: 804, False: 2.18k]
  ------------------
 1397|       |        //
 1398|       |        // Then this should be a constructor.
 1399|       |        // Don't go through the symbol table for constructors.
 1400|       |        // Their parameters will be verified algorithmically.
 1401|       |        //
 1402|    804|        TType type(EbtVoid);  // use this to get the type back
 1403|    804|        if (! constructorError(loc, arguments, *function, function->getBuiltInOp(), type)) {
  ------------------
  |  Branch (1403:13): [True: 804, False: 0]
  ------------------
 1404|       |            //
 1405|       |            // It's a constructor, of type 'type'.
 1406|       |            //
 1407|    804|            result = addConstructor(loc, arguments, type);
 1408|    804|            if (result == nullptr)
  ------------------
  |  Branch (1408:17): [True: 0, False: 804]
  ------------------
 1409|      0|                error(loc, "cannot construct with these arguments", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str(), "");
 1410|    804|        }
 1411|  2.18k|    } else {
 1412|       |        //
 1413|       |        // Find it in the symbol table.
 1414|       |        //
 1415|  2.18k|        const TFunction* fnCandidate;
 1416|  2.18k|        bool builtIn {false};
 1417|  2.18k|        fnCandidate = findFunction(loc, *function, builtIn);
 1418|  2.18k|        if (fnCandidate) {
  ------------------
  |  Branch (1418:13): [True: 1.99k, False: 192]
  ------------------
 1419|       |            // This is a declared function that might map to
 1420|       |            //  - a built-in operator,
 1421|       |            //  - a built-in function not mapped to an operator, or
 1422|       |            //  - a user function.
 1423|       |
 1424|       |            // Error check for a function requiring specific extensions present.
 1425|  1.99k|            if (builtIn &&
  ------------------
  |  Branch (1425:17): [True: 1.84k, False: 147]
  ------------------
 1426|  1.84k|                (fnCandidate->getBuiltInOp() == EOpSubgroupQuadAll || fnCandidate->getBuiltInOp() == EOpSubgroupQuadAny))
  ------------------
  |  Branch (1426:18): [True: 0, False: 1.84k]
  |  Branch (1426:71): [True: 0, False: 1.84k]
  ------------------
 1427|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_quad_control, fnCandidate->getName().c_str());
 1428|       |
 1429|  1.99k|            if (builtIn && fnCandidate->getNumExtensions())
  ------------------
  |  Branch (1429:17): [True: 1.84k, False: 147]
  |  Branch (1429:28): [True: 555, False: 1.29k]
  ------------------
 1430|    555|                requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(), fnCandidate->getName().c_str());
 1431|       |
 1432|  1.99k|            if (builtIn && fnCandidate->getType().contains16BitFloat())
  ------------------
  |  Branch (1432:17): [True: 1.84k, False: 147]
  |  Branch (1432:28): [True: 0, False: 1.84k]
  ------------------
 1433|      0|                requireFloat16Arithmetic(loc, "built-in function", "float16 types can only be in uniform block or buffer storage");
 1434|  1.99k|            if (builtIn && fnCandidate->getType().contains16BitInt())
  ------------------
  |  Branch (1434:17): [True: 1.84k, False: 147]
  |  Branch (1434:28): [True: 0, False: 1.84k]
  ------------------
 1435|      0|                requireInt16Arithmetic(loc, "built-in function", "(u)int16 types can only be in uniform block or buffer storage");
 1436|  1.99k|            if (builtIn && fnCandidate->getType().contains8BitInt())
  ------------------
  |  Branch (1436:17): [True: 1.84k, False: 147]
  |  Branch (1436:28): [True: 0, False: 1.84k]
  ------------------
 1437|      0|                requireInt8Arithmetic(loc, "built-in function", "(u)int8 types can only be in uniform block or buffer storage");
 1438|  1.99k|            if (builtIn && (fnCandidate->getBuiltInOp() == EOpTextureFetch || fnCandidate->getBuiltInOp() == EOpTextureQuerySize)) {
  ------------------
  |  Branch (1438:17): [True: 1.84k, False: 147]
  |  Branch (1438:29): [True: 54, False: 1.79k]
  |  Branch (1438:79): [True: 108, False: 1.68k]
  ------------------
 1439|    162|                if ((*fnCandidate)[0].type->getSampler().isMultiSample() && version <= 140)
  ------------------
  |  Branch (1439:21): [True: 24, False: 138]
  |  Branch (1439:77): [True: 0, False: 24]
  ------------------
 1440|      0|                    requireExtensions(loc, 1, &E_GL_ARB_texture_multisample, fnCandidate->getName().c_str());
 1441|    162|            }
 1442|  1.99k|            bool hasLongVectorArg = false;
 1443|  1.99k|            if (arguments != nullptr) {
  ------------------
  |  Branch (1443:17): [True: 1.85k, False: 144]
  ------------------
 1444|       |                // Make sure qualifications work for these arguments.
 1445|  1.85k|                TIntermAggregate* aggregate = arguments->getAsAggregate();
 1446|  8.34k|                for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
  ------------------
  |  Branch (1446:33): [True: 6.48k, False: 1.85k]
  ------------------
 1447|       |                    // At this early point there is a slight ambiguity between whether an aggregate 'arguments'
 1448|       |                    // is the single argument itself or its children are the arguments.  Only one argument
 1449|       |                    // means take 'arguments' itself as the one argument.
 1450|  6.48k|                    if ((*fnCandidate)[i].defaultValue) {
  ------------------
  |  Branch (1450:25): [True: 0, False: 6.48k]
  ------------------
 1451|      0|                        if (!aggregate) {
  ------------------
  |  Branch (1451:29): [True: 0, False: 0]
  ------------------
 1452|       |                            // Only one argument was passed (rest are default arguments) so arguments isn't a TIntermAggregate.
 1453|       |                            // But the function takes at least one more argument, so a TIntermAggregate is needed.
 1454|      0|                            aggregate = new TIntermAggregate;
 1455|      0|                            aggregate->getSequence().push_back(arguments);
 1456|      0|                            arguments = aggregate;
 1457|      0|                        }
 1458|      0|                        if (i >= static_cast<int>(aggregate->getSequence().size())) {
  ------------------
  |  Branch (1458:29): [True: 0, False: 0]
  ------------------
 1459|       |                            // Append the default value if there are no more arguments left in the aggregate.
 1460|      0|                            TIntermConstantUnion *defaultValue = nullptr;
 1461|      0|                            if (const auto *constUnion = (*fnCandidate)[i].defaultValue->getAsConstantUnion()) {
  ------------------
  |  Branch (1461:45): [True: 0, False: 0]
  ------------------
 1462|      0|                                defaultValue = new TIntermConstantUnion(constUnion->getConstArray(), constUnion->getType());
 1463|      0|                            }
 1464|      0|                            assert(defaultValue && "unsupported default value construct");
 1465|      0|                            aggregate->getSequence().push_back(defaultValue);
 1466|      0|                        }
 1467|      0|                    }
 1468|  6.48k|                    TIntermNode* arg = fnCandidate->getParamCount() == 1 ? arguments : (aggregate ? aggregate->getSequence()[i] : arguments);
  ------------------
  |  Branch (1468:40): [True: 123, False: 6.36k]
  |  Branch (1468:89): [True: 6.36k, False: 0]
  ------------------
 1469|  6.48k|                    TQualifier& formalQualifier = (*fnCandidate)[i].type->getQualifier();
 1470|  6.48k|                    if (formalQualifier.isParamOutput()) {
  ------------------
  |  Branch (1470:25): [True: 444, False: 6.04k]
  ------------------
 1471|    444|                        if (lValueErrorCheck(arguments->getLoc(), "assign", arg->getAsTyped()))
  ------------------
  |  Branch (1471:29): [True: 0, False: 444]
  ------------------
 1472|      0|                            error(arguments->getLoc(), "Non-L-value cannot be passed for 'out' or 'inout' parameters.", "out", "");
 1473|    444|                    }
 1474|  6.48k|                    if (formalQualifier.isSpirvLiteral()) {
  ------------------
  |  Branch (1474:25): [True: 0, False: 6.48k]
  ------------------
 1475|      0|                        if (!arg->getAsTyped()->getQualifier().isFrontEndConstant()) {
  ------------------
  |  Branch (1475:29): [True: 0, False: 0]
  ------------------
 1476|      0|                            error(arguments->getLoc(),
 1477|      0|                                  "Non front-end constant expressions cannot be passed for 'spirv_literal' parameters.",
 1478|      0|                                  "spirv_literal", "");
 1479|      0|                        }
 1480|      0|                    }
 1481|  6.48k|                    const TType& argType = arg->getAsTyped()->getType();
 1482|  6.48k|                    const TQualifier& argQualifier = argType.getQualifier();
 1483|  6.48k|                    bool containsBindlessSampler = intermediate.getBindlessMode() && argType.containsSampler();
  ------------------
  |  Branch (1483:52): [True: 0, False: 6.48k]
  |  Branch (1483:86): [True: 0, False: 0]
  ------------------
 1484|  6.48k|                    if (argQualifier.isMemory() && !containsBindlessSampler && (argType.containsOpaque() || argType.isReference())) {
  ------------------
  |  Branch (1484:25): [True: 0, False: 6.48k]
  |  Branch (1484:52): [True: 0, False: 0]
  |  Branch (1484:81): [True: 0, False: 0]
  |  Branch (1484:109): [True: 0, False: 0]
  ------------------
 1485|      0|                        const char* message = "argument cannot drop memory qualifier when passed to formal parameter";
 1486|      0|                        if (argQualifier.volatil && ! formalQualifier.volatil)
  ------------------
  |  Branch (1486:29): [True: 0, False: 0]
  |  Branch (1486:53): [True: 0, False: 0]
  ------------------
 1487|      0|                            error(arguments->getLoc(), message, "volatile", "");
 1488|      0|                        if (argQualifier.coherent && ! (formalQualifier.devicecoherent || formalQualifier.coherent))
  ------------------
  |  Branch (1488:29): [True: 0, False: 0]
  |  Branch (1488:57): [True: 0, False: 0]
  |  Branch (1488:91): [True: 0, False: 0]
  ------------------
 1489|      0|                            error(arguments->getLoc(), message, "coherent", "");
 1490|      0|                        if (argQualifier.devicecoherent && ! (formalQualifier.devicecoherent || formalQualifier.coherent))
  ------------------
  |  Branch (1490:29): [True: 0, False: 0]
  |  Branch (1490:63): [True: 0, False: 0]
  |  Branch (1490:97): [True: 0, False: 0]
  ------------------
 1491|      0|                            error(arguments->getLoc(), message, "devicecoherent", "");
 1492|      0|                        if (argQualifier.queuefamilycoherent && ! (formalQualifier.queuefamilycoherent || formalQualifier.devicecoherent || formalQualifier.coherent))
  ------------------
  |  Branch (1492:29): [True: 0, False: 0]
  |  Branch (1492:68): [True: 0, False: 0]
  |  Branch (1492:107): [True: 0, False: 0]
  |  Branch (1492:141): [True: 0, False: 0]
  ------------------
 1493|      0|                            error(arguments->getLoc(), message, "queuefamilycoherent", "");
 1494|      0|                        if (argQualifier.workgroupcoherent && ! (formalQualifier.workgroupcoherent || formalQualifier.queuefamilycoherent || formalQualifier.devicecoherent || formalQualifier.coherent))
  ------------------
  |  Branch (1494:29): [True: 0, False: 0]
  |  Branch (1494:66): [True: 0, False: 0]
  |  Branch (1494:103): [True: 0, False: 0]
  |  Branch (1494:142): [True: 0, False: 0]
  |  Branch (1494:176): [True: 0, False: 0]
  ------------------
 1495|      0|                            error(arguments->getLoc(), message, "workgroupcoherent", "");
 1496|      0|                        if (argQualifier.subgroupcoherent && ! (formalQualifier.subgroupcoherent || formalQualifier.workgroupcoherent || formalQualifier.queuefamilycoherent || formalQualifier.devicecoherent || formalQualifier.coherent))
  ------------------
  |  Branch (1496:29): [True: 0, False: 0]
  |  Branch (1496:65): [True: 0, False: 0]
  |  Branch (1496:101): [True: 0, False: 0]
  |  Branch (1496:138): [True: 0, False: 0]
  |  Branch (1496:177): [True: 0, False: 0]
  |  Branch (1496:211): [True: 0, False: 0]
  ------------------
 1497|      0|                            error(arguments->getLoc(), message, "subgroupcoherent", "");
 1498|      0|                        if (argQualifier.readonly && ! formalQualifier.readonly)
  ------------------
  |  Branch (1498:29): [True: 0, False: 0]
  |  Branch (1498:54): [True: 0, False: 0]
  ------------------
 1499|      0|                            error(arguments->getLoc(), message, "readonly", "");
 1500|      0|                        if (argQualifier.writeonly && ! formalQualifier.writeonly)
  ------------------
  |  Branch (1500:29): [True: 0, False: 0]
  |  Branch (1500:55): [True: 0, False: 0]
  ------------------
 1501|      0|                            error(arguments->getLoc(), message, "writeonly", "");
 1502|      0|                        if (argQualifier.nontemporal && ! formalQualifier.nontemporal)
  ------------------
  |  Branch (1502:29): [True: 0, False: 0]
  |  Branch (1502:57): [True: 0, False: 0]
  ------------------
 1503|      0|                            error(arguments->getLoc(), message, "nontemporal", "");
 1504|       |                        // Don't check 'restrict', it is different than the rest:
 1505|       |                        // "...but only restrict can be taken away from a calling argument, by a formal parameter that
 1506|       |                        // lacks the restrict qualifier..."
 1507|      0|                    }
 1508|  6.48k|                    if (!builtIn && argQualifier.getFormat() != formalQualifier.getFormat()) {
  ------------------
  |  Branch (1508:25): [True: 3, False: 6.48k]
  |  Branch (1508:37): [True: 0, False: 3]
  ------------------
 1509|       |                        // we have mismatched formats, which should only be allowed if writeonly
 1510|       |                        // and at least one format is unknown
 1511|      0|                        if (!formalQualifier.isWriteOnly() || (formalQualifier.getFormat() != ElfNone &&
  ------------------
  |  Branch (1511:29): [True: 0, False: 0]
  |  Branch (1511:64): [True: 0, False: 0]
  ------------------
 1512|      0|                                                                  argQualifier.getFormat() != ElfNone))
  ------------------
  |  Branch (1512:67): [True: 0, False: 0]
  ------------------
 1513|      0|                            error(arguments->getLoc(), "image formats must match", "format", "");
 1514|      0|                    }
 1515|  6.48k|                    if (builtIn && arg->getAsTyped()->getType().contains16BitFloat())
  ------------------
  |  Branch (1515:25): [True: 6.48k, False: 3]
  |  Branch (1515:36): [True: 0, False: 6.48k]
  ------------------
 1516|      0|                        requireFloat16Arithmetic(arguments->getLoc(), "built-in function", "float16 types can only be in uniform block or buffer storage");
 1517|  6.48k|                    if (builtIn && arg->getAsTyped()->getType().contains16BitInt())
  ------------------
  |  Branch (1517:25): [True: 6.48k, False: 3]
  |  Branch (1517:36): [True: 0, False: 6.48k]
  ------------------
 1518|      0|                        requireInt16Arithmetic(arguments->getLoc(), "built-in function", "(u)int16 types can only be in uniform block or buffer storage");
 1519|  6.48k|                    if (builtIn && arg->getAsTyped()->getType().contains8BitInt())
  ------------------
  |  Branch (1519:25): [True: 6.48k, False: 3]
  |  Branch (1519:36): [True: 0, False: 6.48k]
  ------------------
 1520|      0|                        requireInt8Arithmetic(arguments->getLoc(), "built-in function", "(u)int8 types can only be in uniform block or buffer storage");
 1521|       |
 1522|       |                    // Check that coopVecOuterProductAccumulateNV vector component types match
 1523|  6.48k|                    if (builtIn && fnCandidate->getBuiltInOp() == EOpCooperativeVectorOuterProductAccumulateNV &&
  ------------------
  |  Branch (1523:25): [True: 6.48k, False: 3]
  |  Branch (1523:36): [True: 0, False: 6.48k]
  ------------------
 1524|      0|                        i == 1 && arg->getAsTyped()->getType().getBasicType() != aggregate->getSequence()[0]->getAsTyped()->getType().getBasicType())
  ------------------
  |  Branch (1524:25): [True: 0, False: 0]
  |  Branch (1524:35): [True: 0, False: 0]
  ------------------
 1525|      0|                        error(arguments->getLoc(), "cooperative vector basic types must match", fnCandidate->getName().c_str(), "");
 1526|       |
 1527|       |                    // Check that coopVecLoadNV and coopVecStoreNV buffer parameter is in buffer or shared storage
 1528|  6.48k|                    if (builtIn && (fnCandidate->getBuiltInOp() == EOpCooperativeVectorLoadNV ||
  ------------------
  |  Branch (1528:25): [True: 6.48k, False: 3]
  |  Branch (1528:37): [True: 0, False: 6.48k]
  ------------------
 1529|  6.48k|                                    fnCandidate->getBuiltInOp() == EOpCooperativeVectorStoreNV) &&
  ------------------
  |  Branch (1529:37): [True: 0, False: 6.48k]
  ------------------
 1530|      0|                        i == 1) {
  ------------------
  |  Branch (1530:25): [True: 0, False: 0]
  ------------------
 1531|      0|                        TStorageQualifier storage = arg->getAsTyped()->getType().getQualifier().storage;
 1532|      0|                        if (storage != EvqBuffer && storage != EvqShared) {
  ------------------
  |  Branch (1532:29): [True: 0, False: 0]
  |  Branch (1532:53): [True: 0, False: 0]
  ------------------
 1533|      0|                            error(arguments->getLoc(), "buffer argument must be in buffer or shared storage", 
 1534|      0|                                  fnCandidate->getName().c_str(), "");
 1535|      0|                        }
 1536|      0|                    }
 1537|       |
 1538|  6.48k|                    if (argType.isLongVector()) {
  ------------------
  |  Branch (1538:25): [True: 0, False: 6.48k]
  ------------------
 1539|      0|                        hasLongVectorArg = true;
 1540|      0|                    }
 1541|       |
 1542|       |                    // TODO 4.5 functionality:  A shader will fail to compile
 1543|       |                    // if the value passed to the memargument of an atomic memory function does not correspond to a buffer or
 1544|       |                    // shared variable. It is acceptable to pass an element of an array or a single component of a vector to the
 1545|       |                    // memargument of an atomic memory function, as long as the underlying array or vector is a buffer or
 1546|       |                    // shared variable.
 1547|  6.48k|                }
 1548|       |
 1549|       |                // Convert 'in' arguments
 1550|  1.85k|                addInputArgumentConversions(*fnCandidate, arguments);  // arguments may be modified if it's just a single argument node
 1551|  1.85k|            }
 1552|       |
 1553|  1.99k|            if (builtIn && fnCandidate->getBuiltInOp() != EOpNull) {
  ------------------
  |  Branch (1553:17): [True: 1.84k, False: 147]
  |  Branch (1553:28): [True: 1.84k, False: 0]
  ------------------
 1554|       |                // A function call mapped to a built-in operation.
 1555|  1.84k|                result = handleBuiltInFunctionCall(loc, arguments, *fnCandidate);
 1556|  1.84k|            } else if (fnCandidate->getBuiltInOp() == EOpSpirvInst) {
  ------------------
  |  Branch (1556:24): [True: 0, False: 147]
  ------------------
 1557|       |                // When SPIR-V instruction qualifier is specified, the function call is still mapped to a built-in operation.
 1558|      0|                result = handleBuiltInFunctionCall(loc, arguments, *fnCandidate);
 1559|    147|            } else {
 1560|       |                // This is a function call not mapped to built-in operator.
 1561|       |                // It could still be a built-in function, but only if PureOperatorBuiltins == false.
 1562|    147|                result = intermediate.setAggregateOperator(arguments, EOpFunctionCall, fnCandidate->getType(), loc);
 1563|    147|                TIntermAggregate* call = result->getAsAggregate();
 1564|    147|                call->setName(fnCandidate->getMangledName());
 1565|       |
 1566|       |                // this is how we know whether the given function is a built-in function or a user-defined function
 1567|       |                // if builtIn == false, it's a userDefined -> could be an overloaded built-in function also
 1568|       |                // if builtIn == true, it's definitely a built-in function with EOpNull
 1569|    147|                if (! builtIn) {
  ------------------
  |  Branch (1569:21): [True: 147, False: 0]
  ------------------
 1570|    147|                    call->setUserDefined();
 1571|    147|                    if (symbolTable.atGlobalLevel()) {
  ------------------
  |  Branch (1571:25): [True: 0, False: 147]
  ------------------
 1572|      0|                        requireProfile(loc, ~EEsProfile, "calling user function from global scope");
 1573|      0|                        intermediate.addToCallGraph(infoSink, "main(", fnCandidate->getMangledName());
 1574|      0|                    } else
 1575|    147|                        intermediate.addToCallGraph(infoSink, currentCaller, fnCandidate->getMangledName());
 1576|    147|                }
 1577|       |
 1578|    147|                if (builtIn)
  ------------------
  |  Branch (1578:21): [True: 0, False: 147]
  ------------------
 1579|      0|                    nonOpBuiltInCheck(loc, *fnCandidate, *call);
 1580|    147|                else
 1581|    147|                    userFunctionCallCheck(loc, *call);
 1582|    147|            }
 1583|       |
 1584|  1.99k|            if (hasLongVectorArg && fnCandidate->getBuiltInOp() != EOpNull) {
  ------------------
  |  Branch (1584:17): [True: 0, False: 1.99k]
  |  Branch (1584:37): [True: 0, False: 0]
  ------------------
 1585|      0|                TType longVectorResultType(EbtVoid);
 1586|      0|                handleLongVectorBuiltin(loc, fnCandidate, &longVectorResultType, arguments);
 1587|      0|                result->setType(longVectorResultType);
 1588|      0|            }
 1589|       |
 1590|       |            // Convert 'out' arguments.  If it was a constant folded built-in, it won't be an aggregate anymore.
 1591|       |            // Built-ins with a single argument aren't called with an aggregate, but they also don't have an output.
 1592|       |            // Also, build the qualifier list for user function calls, which are always called with an aggregate.
 1593|  1.99k|            if (result->getAsAggregate()) {
  ------------------
  |  Branch (1593:17): [True: 1.87k, False: 120]
  ------------------
 1594|  1.87k|                TQualifierList& qualifierList = result->getAsAggregate()->getQualifierList();
 1595|  8.24k|                for (int i = 0; i < fnCandidate->getParamCount(); ++i) {
  ------------------
  |  Branch (1595:33): [True: 6.36k, False: 1.87k]
  ------------------
 1596|  6.36k|                    TStorageQualifier qual = (*fnCandidate)[i].type->getQualifier().storage;
 1597|  6.36k|                    qualifierList.push_back(qual);
 1598|  6.36k|                }
 1599|  1.87k|                result = addOutputArgumentConversions(*fnCandidate, *result->getAsAggregate());
 1600|  1.87k|            }
 1601|       |
 1602|  1.99k|            handleCoopMat2FunctionCall(loc, fnCandidate, result, arguments);
 1603|       |
 1604|  1.99k|            handleVector2CoopMatConversionCall(loc, fnCandidate, result, arguments);
 1605|       |
 1606|  1.99k|            if (result->getAsTyped()->getType().isCoopVecOrLongVector() &&
  ------------------
  |  Branch (1606:17): [True: 0, False: 1.99k]
  ------------------
 1607|      0|               !result->getAsTyped()->getType().isParameterized()) {
  ------------------
  |  Branch (1607:16): [True: 0, False: 0]
  ------------------
 1608|      0|                if (auto unaryNode = result->getAsUnaryNode())
  ------------------
  |  Branch (1608:26): [True: 0, False: 0]
  ------------------
 1609|      0|                    result->setType(unaryNode->getOperand()->getAsTyped()->getType());
 1610|      0|                else
 1611|      0|                    result->setType(result->getAsAggregate()->getSequence()[0]->getAsTyped()->getType());
 1612|      0|            }
 1613|       |
 1614|  1.99k|            if (fnCandidate->getBuiltInOp() == EOpConstructSaturated) {
  ------------------
  |  Branch (1614:17): [True: 0, False: 1.99k]
  ------------------
 1615|       |                // result type is taken from the first parameter
 1616|      0|                result->setType(result->getAsAggregate()->getSequence()[0]->getAsTyped()->getType());
 1617|      0|            }
 1618|  1.99k|        }
 1619|  2.18k|    }
 1620|       |
 1621|       |    // generic error recovery
 1622|       |    // TODO: simplification: localize all the error recoveries that look like this, and taking type into account to reduce cascades
 1623|  2.99k|    if (result == nullptr)
  ------------------
  |  Branch (1623:9): [True: 192, False: 2.79k]
  ------------------
 1624|    192|        result = intermediate.addConstantUnion(0.0, EbtFloat, loc);
 1625|       |
 1626|  2.99k|    return result;
 1627|  2.99k|}
_ZN7glslang13TParseContext26handleCoopMat2FunctionCallERKNS_10TSourceLocEPKNS_9TFunctionEPNS_12TIntermTypedEP11TIntermNode:
 1630|  1.99k|{
 1631|  1.99k|    if (arguments && arguments->getAsAggregate()) {
  ------------------
  |  Branch (1631:9): [True: 1.85k, False: 144]
  |  Branch (1631:22): [True: 1.72k, False: 123]
  ------------------
 1632|  1.72k|        auto &sequence = arguments->getAsAggregate()->getSequence();
 1633|  8.09k|        for (uint32_t i = 0; i < sequence.size(); ++i) {
  ------------------
  |  Branch (1633:30): [True: 6.36k, False: 1.72k]
  ------------------
 1634|  6.36k|            auto param = sequence[i];
 1635|  6.36k|            if (param->getAsTyped()->getBasicType() == EbtFunction) {
  ------------------
  |  Branch (1635:17): [True: 0, False: 6.36k]
  ------------------
 1636|       |                // Add the function to the callgraph
 1637|      0|                intermediate.addToCallGraph(infoSink, currentCaller, param->getAsSymbolNode()->getMangledName());
 1638|       |
 1639|       |                // error checking that all parameters are 'const in'
 1640|      0|                if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixLoadTensorNV ||
  ------------------
  |  Branch (1640:21): [True: 0, False: 0]
  ------------------
 1641|      0|                    fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV ||
  ------------------
  |  Branch (1641:21): [True: 0, False: 0]
  ------------------
 1642|      0|                    fnCandidate->getBuiltInOp() == EOpCooperativeMatrixPerElementOpNV) {
  ------------------
  |  Branch (1642:21): [True: 0, False: 0]
  ------------------
 1643|      0|                    const TFunction* func = symbolTable.find(param->getAsSymbolNode()->getMangledName())->getAsFunction();
 1644|      0|                    for (int i = 0; i < func->getParamCount(); ++i) {
  ------------------
  |  Branch (1644:37): [True: 0, False: 0]
  ------------------
 1645|      0|                        const TParameter& arg = (*func)[i];
 1646|      0|                        const TQualifier& formalQualifier = arg.type->getQualifier();
 1647|      0|                        if (formalQualifier.storage != EvqConstReadOnly) {
  ------------------
  |  Branch (1647:29): [True: 0, False: 0]
  ------------------
 1648|      0|                            error(loc, "function parameters must all be qualified 'const in'", param->getAsSymbolNode()->getMangledName().c_str(), "");
 1649|      0|                        }
 1650|      0|                    }
 1651|      0|                }
 1652|       |
 1653|       |
 1654|       |                // error checking reduce function has matching parameters
 1655|      0|                if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV) {
  ------------------
  |  Branch (1655:21): [True: 0, False: 0]
  ------------------
 1656|      0|                    const TFunction* combineOp = symbolTable.find(param->getAsSymbolNode()->getMangledName())->getAsFunction();
 1657|       |
 1658|      0|                    if (combineOp->getParamCount() != 2) {
  ------------------
  |  Branch (1658:25): [True: 0, False: 0]
  ------------------
 1659|      0|                        error(loc, "must have two parameters", param->getAsSymbolNode()->getMangledName().c_str(), "");
 1660|      0|                    }
 1661|       |
 1662|      0|                    for (int i = 0; i < combineOp->getParamCount(); ++i) {
  ------------------
  |  Branch (1662:37): [True: 0, False: 0]
  ------------------
 1663|      0|                        const TParameter& arg = (*combineOp)[i];
 1664|      0|                        if (sequence[1]->getAsTyped()->getType().getBasicType() != arg.type->getBasicType()) {
  ------------------
  |  Branch (1664:29): [True: 0, False: 0]
  ------------------
 1665|      0|                            error(loc, "parameter types must match cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), "");
 1666|      0|                        }
 1667|      0|                    }
 1668|      0|                    if (sequence[1]->getAsTyped()->getType().getBasicType() != combineOp->getType().getBasicType()) {
  ------------------
  |  Branch (1668:25): [True: 0, False: 0]
  ------------------
 1669|      0|                        error(loc, "return type must match cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), "");
 1670|      0|                    }
 1671|      0|                }
 1672|       |
 1673|       |                // error checking perelement op has correct parameters
 1674|      0|                if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixPerElementOpNV) {
  ------------------
  |  Branch (1674:21): [True: 0, False: 0]
  ------------------
 1675|      0|                    const TFunction* elemOp = symbolTable.find(param->getAsSymbolNode()->getMangledName())->getAsFunction();
 1676|       |
 1677|      0|                    if (sequence[1]->getAsTyped()->getType() != sequence[0]->getAsTyped()->getType()) {
  ------------------
  |  Branch (1677:25): [True: 0, False: 0]
  ------------------
 1678|      0|                        error(loc, "cooperative matrix input and result types must match", "", "");
 1679|      0|                    }
 1680|       |
 1681|      0|                    if (elemOp->getParamCount() < 3) {
  ------------------
  |  Branch (1681:25): [True: 0, False: 0]
  ------------------
 1682|      0|                        error(loc, "not enough parameters", param->getAsSymbolNode()->getMangledName().c_str(), "");
 1683|      0|                    } else if (elemOp->getParamCount() != (int)sequence.size()) {
  ------------------
  |  Branch (1683:32): [True: 0, False: 0]
  ------------------
 1684|      0|                        error(loc, "number of parameters must match call to coopMatPerElementNV", param->getAsSymbolNode()->getMangledName().c_str(), "");
 1685|      0|                    } else {
 1686|      0|                        if ((*elemOp)[0].type->getBasicType() != EbtUint || (*elemOp)[1].type->getBasicType() != EbtUint) {
  ------------------
  |  Branch (1686:29): [True: 0, False: 0]
  |  Branch (1686:77): [True: 0, False: 0]
  ------------------
 1687|      0|                            error(loc, "row/column parameters must be uint32_t", param->getAsSymbolNode()->getMangledName().c_str(), "");
 1688|      0|                        }
 1689|       |
 1690|      0|                        const TParameter& matArg = (*elemOp)[2];
 1691|      0|                        if (sequence[1]->getAsTyped()->getType().getBasicType() != matArg.type->getBasicType()) {
  ------------------
  |  Branch (1691:29): [True: 0, False: 0]
  ------------------
 1692|      0|                            error(loc, "third parameter must match cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), "");
 1693|      0|                        }
 1694|       |
 1695|      0|                        for (int i = 3; i < elemOp->getParamCount(); ++i) {
  ------------------
  |  Branch (1695:41): [True: 0, False: 0]
  ------------------
 1696|      0|                            const TParameter& arg = (*elemOp)[i];
 1697|      0|                            if (sequence[i]->getAsTyped()->getType().getBasicType() != arg.type->getBasicType()) {
  ------------------
  |  Branch (1697:33): [True: 0, False: 0]
  ------------------
 1698|      0|                                error(loc, "parameter types must match or be cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), "");
 1699|      0|                            }
 1700|      0|                        }
 1701|      0|                        if (sequence[1]->getAsTyped()->getType().getBasicType() != elemOp->getType().getBasicType()) {
  ------------------
  |  Branch (1701:29): [True: 0, False: 0]
  ------------------
 1702|      0|                            error(loc, "return type must match cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), "");
 1703|      0|                        }
 1704|      0|                    }
 1705|      0|                }
 1706|      0|            }
 1707|  6.36k|        }
 1708|       |
 1709|       |        // Validate the decode function(s) for coopMatLoadTensorNV.
 1710|       |        //
 1711|       |        //   coopMatLoadTensorNV(mat, buf, off, t [, view] [, decodeFunc [, decodeVectorFunc]])
 1712|       |        //
 1713|       |        // The decode function rules are:
 1714|       |        //   * decodeFunc:        scalar return matching the matrix component type.
 1715|       |        //   * decodeVectorFunc:  optional, requires GL_NV_cooperative_matrix_decode_vector.
 1716|       |        //                        Vector return of the matrix component type with V in {2,4,8}.
 1717|       |        // Each function is validated independently; their parameter lists do
 1718|       |        // not need to match (the buffer_reference type may differ between the
 1719|       |        // two so the shader can type-view the same byte address differently).
 1720|       |        // The non-decode load form (no function args) is allowed and skipped here.
 1721|  1.72k|        if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixLoadTensorNV) {
  ------------------
  |  Branch (1721:13): [True: 0, False: 1.72k]
  ------------------
 1722|      0|            std::vector<TIntermNode*> funcArgs;
 1723|      0|            for (uint32_t i = 0; i < sequence.size(); ++i) {
  ------------------
  |  Branch (1723:34): [True: 0, False: 0]
  ------------------
 1724|      0|                if (sequence[i]->getAsTyped()->getBasicType() == EbtFunction) {
  ------------------
  |  Branch (1724:21): [True: 0, False: 0]
  ------------------
 1725|      0|                    funcArgs.push_back(sequence[i]);
 1726|      0|                }
 1727|      0|            }
 1728|      0|            assert(funcArgs.size() <= 2);
 1729|       |
 1730|      0|            auto checkBaseShape = [&](const TFunction* fn, const char* name) {
 1731|      0|                if (fn->getParamCount() != 3) {
 1732|      0|                    error(loc, "must have three parameters", name, "");
 1733|      0|                    return;
 1734|      0|                }
 1735|      0|                if ((*fn)[0].type->getBasicType() != EbtReference) {
 1736|      0|                    error(loc, "first parameter must be buffer reference type", name, "");
 1737|      0|                }
 1738|      0|                if ((*fn)[1].type->getBasicType() != EbtUint || (*fn)[2].type->getBasicType() != EbtUint) {
 1739|      0|                    error(loc, "coordinate parameters must be uint32_t", name, "");
 1740|      0|                }
 1741|      0|                if (!(*fn)[1].type->isArray() || !(*fn)[2].type->isArray()) {
 1742|      0|                    error(loc, "coordinate parameters must be uint32_t", name, "");
 1743|      0|                }
 1744|      0|            };
 1745|       |
 1746|      0|            const TType& matType = sequence[0]->getAsTyped()->getType();
 1747|       |
 1748|      0|            if (funcArgs.size() >= 1) {
  ------------------
  |  Branch (1748:17): [True: 0, False: 0]
  ------------------
 1749|      0|                const char* scalarName = funcArgs[0]->getAsSymbolNode()->getMangledName().c_str();
 1750|      0|                const TFunction* scalarFn =
 1751|      0|                    symbolTable.find(funcArgs[0]->getAsSymbolNode()->getMangledName())->getAsFunction();
 1752|      0|                checkBaseShape(scalarFn, scalarName);
 1753|      0|                const TType& retType = scalarFn->getType();
 1754|      0|                if (retType.getBasicType() != matType.getBasicType() ||
  ------------------
  |  Branch (1754:21): [True: 0, False: 0]
  ------------------
 1755|      0|                    retType.isVector() || retType.isLongVector() ||
  ------------------
  |  Branch (1755:21): [True: 0, False: 0]
  |  Branch (1755:43): [True: 0, False: 0]
  ------------------
 1756|      0|                    retType.isArray() || retType.isStruct() || retType.isMatrix()) {
  ------------------
  |  Branch (1756:21): [True: 0, False: 0]
  |  Branch (1756:42): [True: 0, False: 0]
  |  Branch (1756:64): [True: 0, False: 0]
  ------------------
 1757|      0|                    error(loc, "decodeFunc return type must be the cooperative matrix component type (scalar)",
 1758|      0|                          scalarName, "");
 1759|      0|                }
 1760|      0|            }
 1761|       |
 1762|      0|            if (funcArgs.size() == 2) {
  ------------------
  |  Branch (1762:17): [True: 0, False: 0]
  ------------------
 1763|      0|                requireExtensions(loc, 1, &E_GL_NV_cooperative_matrix_decode_vector,
 1764|      0|                                  "coopMatLoadTensorNV decodeVectorFunc argument");
 1765|       |
 1766|      0|                const char* vectorName = funcArgs[1]->getAsSymbolNode()->getMangledName().c_str();
 1767|      0|                const TFunction* vectorFn =
 1768|      0|                    symbolTable.find(funcArgs[1]->getAsSymbolNode()->getMangledName())->getAsFunction();
 1769|      0|                checkBaseShape(vectorFn, vectorName);
 1770|       |
 1771|      0|                const TType& retType = vectorFn->getType();
 1772|      0|                const bool retIsVector = retType.isVector() || retType.isLongVector();
  ------------------
  |  Branch (1772:42): [True: 0, False: 0]
  |  Branch (1772:64): [True: 0, False: 0]
  ------------------
 1773|      0|                if (!retIsVector) {
  ------------------
  |  Branch (1773:21): [True: 0, False: 0]
  ------------------
 1774|      0|                    error(loc, "decodeVectorFunc return type must be a vector of the matrix component type",
 1775|      0|                          vectorName, "");
 1776|      0|                } else {
 1777|      0|                    if (retType.getBasicType() != matType.getBasicType()) {
  ------------------
  |  Branch (1777:25): [True: 0, False: 0]
  ------------------
 1778|      0|                        error(loc, "decodeVectorFunc return type component must match cooperative matrix component type",
 1779|      0|                              vectorName, "");
 1780|      0|                    }
 1781|      0|                    if (!retType.hasSpecConstantVectorComponents()) {
  ------------------
  |  Branch (1781:25): [True: 0, False: 0]
  ------------------
 1782|      0|                        const uint32_t V = retType.isLongVector()
  ------------------
  |  Branch (1782:44): [True: 0, False: 0]
  ------------------
 1783|      0|                            ? static_cast<uint32_t>(retType.getTypeParameters()->arraySizes->getDimSize(0))
 1784|      0|                            : static_cast<uint32_t>(retType.getVectorSize());
 1785|      0|                        if (V != 2 && V != 4 && V != 8) {
  ------------------
  |  Branch (1785:29): [True: 0, False: 0]
  |  Branch (1785:39): [True: 0, False: 0]
  |  Branch (1785:49): [True: 0, False: 0]
  ------------------
 1786|      0|                            error(loc, "decodeVectorFunc return vector length must be 2, 4, or 8",
 1787|      0|                                  vectorName, "");
 1788|      0|                        }
 1789|      0|                    }
 1790|      0|                }
 1791|      0|            }
 1792|      0|        }
 1793|  1.72k|    }
 1794|  1.99k|    if ((result->getAsTyped()->getType().isCoopMat() ||
  ------------------
  |  Branch (1794:10): [True: 0, False: 1.99k]
  ------------------
 1795|  1.99k|         result->getAsTyped()->getType().isTensorLayoutNV() ||
  ------------------
  |  Branch (1795:10): [True: 0, False: 1.99k]
  ------------------
 1796|  1.99k|         result->getAsTyped()->getType().isTensorViewNV()) &&
  ------------------
  |  Branch (1796:10): [True: 0, False: 1.99k]
  ------------------
 1797|      0|       !result->getAsTyped()->getType().isParameterized()) {
  ------------------
  |  Branch (1797:8): [True: 0, False: 0]
  ------------------
 1798|      0|        assert(fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAdd ||
 1799|      0|               fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAddNV ||
 1800|      0|               fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV ||
 1801|      0|               fnCandidate->getBuiltInOp() == EOpCooperativeMatrixPerElementOpNV ||
 1802|      0|               fnCandidate->getBuiltInOp() == EOpCooperativeMatrixTransposeNV ||
 1803|      0|               fnCandidate->getBuiltInOp() == EOpCreateTensorLayoutNV ||
 1804|      0|               fnCandidate->getBuiltInOp() == EOpTensorLayoutSetDimensionNV ||
 1805|      0|               fnCandidate->getBuiltInOp() == EOpTensorLayoutSetBlockSizeNV ||
 1806|      0|               fnCandidate->getBuiltInOp() == EOpTensorLayoutSetStrideNV ||
 1807|      0|               fnCandidate->getBuiltInOp() == EOpTensorLayoutSliceNV ||
 1808|      0|               fnCandidate->getBuiltInOp() == EOpTensorLayoutSetClampValueNV ||
 1809|      0|               fnCandidate->getBuiltInOp() == EOpCreateTensorViewNV ||
 1810|      0|               fnCandidate->getBuiltInOp() == EOpTensorViewSetDimensionNV ||
 1811|      0|               fnCandidate->getBuiltInOp() == EOpTensorViewSetStrideNV ||
 1812|      0|               fnCandidate->getBuiltInOp() == EOpTensorViewSetClipNV);
 1813|       |
 1814|      0|        if (fnCandidate->getBuiltInOp() == EOpCreateTensorLayoutNV) {
  ------------------
  |  Branch (1814:13): [True: 0, False: 0]
  ------------------
 1815|       |
 1816|       |            // Convert template parameters to arraySizes/typeParameters
 1817|      0|            TArraySizes *arraySizes = new TArraySizes;
 1818|      0|            for (uint32_t i = 0; i < 2; ++i) {
  ------------------
  |  Branch (1818:34): [True: 0, False: 0]
  ------------------
 1819|      0|                TIntermNode *param {};
 1820|      0|                if (arguments->getAsConstantUnion()) {
  ------------------
  |  Branch (1820:21): [True: 0, False: 0]
  ------------------
 1821|      0|                    if (i == 0) {
  ------------------
  |  Branch (1821:25): [True: 0, False: 0]
  ------------------
 1822|      0|                        param = arguments;
 1823|      0|                    }
 1824|      0|                } else {
 1825|      0|                    assert(arguments->getAsAggregate());
 1826|      0|                    auto &sequence = arguments->getAsAggregate()->getSequence();
 1827|      0|                    if (i < sequence.size()) {
  ------------------
  |  Branch (1827:25): [True: 0, False: 0]
  ------------------
 1828|      0|                        param = sequence[i];
 1829|      0|                    }
 1830|      0|                }
 1831|      0|                if (param) {
  ------------------
  |  Branch (1831:21): [True: 0, False: 0]
  ------------------
 1832|      0|                    if (param->getAsTyped()->getType().getQualifier().isSpecConstant()) {
  ------------------
  |  Branch (1832:25): [True: 0, False: 0]
  ------------------
 1833|      0|                        uint32_t value = param->getAsSymbolNode()->getConstArray()[0].getIConst();
 1834|      0|                        arraySizes->addInnerSize(value, param->getAsTyped());
 1835|      0|                    } else {
 1836|      0|                        uint32_t value = param->getAsConstantUnion()->getConstArray()[0].getIConst();
 1837|      0|                        arraySizes->addInnerSize(value);
 1838|      0|                    }
 1839|      0|                } else {
 1840|       |                    // gl_CooperativeMatrixClampModeUndefined
 1841|      0|                    arraySizes->addInnerSize(0);
 1842|      0|                }
 1843|      0|            }
 1844|      0|            TTypeParameters typeParameters;
 1845|      0|            typeParameters.arraySizes = arraySizes;
 1846|       |
 1847|      0|            TType resultType;
 1848|      0|            resultType.deepCopy(result->getAsTyped()->getType());
 1849|       |
 1850|      0|            resultType.copyTypeParameters(typeParameters);
 1851|      0|            result->setType(resultType);
 1852|      0|        } else if (fnCandidate->getBuiltInOp() == EOpCreateTensorViewNV) {
  ------------------
  |  Branch (1852:20): [True: 0, False: 0]
  ------------------
 1853|       |
 1854|       |            // Convert template parameters to arraySizes/typeParameters
 1855|      0|            TArraySizes *arraySizes = new TArraySizes;
 1856|      0|            for (uint32_t i = 0; i < 7; ++i) {
  ------------------
  |  Branch (1856:34): [True: 0, False: 0]
  ------------------
 1857|      0|                TIntermNode *param {};
 1858|      0|                if (arguments->getAsConstantUnion()) {
  ------------------
  |  Branch (1858:21): [True: 0, False: 0]
  ------------------
 1859|      0|                    if (i == 0) {
  ------------------
  |  Branch (1859:25): [True: 0, False: 0]
  ------------------
 1860|      0|                        param = arguments;
 1861|      0|                    }
 1862|      0|                } else {
 1863|      0|                    assert(arguments->getAsAggregate());
 1864|      0|                    auto &sequence = arguments->getAsAggregate()->getSequence();
 1865|      0|                    if (i < sequence.size()) {
  ------------------
  |  Branch (1865:25): [True: 0, False: 0]
  ------------------
 1866|      0|                        param = sequence[i];
 1867|      0|                    }
 1868|      0|                }
 1869|      0|                if (param) {
  ------------------
  |  Branch (1869:21): [True: 0, False: 0]
  ------------------
 1870|      0|                    if (param->getAsTyped()->getType().getQualifier().isSpecConstant()) {
  ------------------
  |  Branch (1870:25): [True: 0, False: 0]
  ------------------
 1871|      0|                        uint32_t value = param->getAsSymbolNode()->getConstArray()[0].getIConst();
 1872|      0|                        arraySizes->addInnerSize(value, param->getAsTyped());
 1873|      0|                    } else {
 1874|      0|                        uint32_t value = param->getAsConstantUnion()->getConstArray()[0].getIConst();
 1875|      0|                        arraySizes->addInnerSize(value);
 1876|      0|                    }
 1877|      0|                } else {
 1878|      0|                    uint32_t value = 0;
 1879|      0|                    if (i >= 2) {
  ------------------
  |  Branch (1879:25): [True: 0, False: 0]
  ------------------
 1880|       |                        // default permutation values are an increasing sequence
 1881|      0|                        value = i - 2;
 1882|      0|                    }
 1883|      0|                    arraySizes->addInnerSize(value);
 1884|      0|                }
 1885|      0|            }
 1886|      0|            TTypeParameters typeParameters;
 1887|      0|            typeParameters.arraySizes = arraySizes;
 1888|       |
 1889|      0|            TType resultType;
 1890|      0|            resultType.deepCopy(result->getAsTyped()->getType());
 1891|       |
 1892|      0|            resultType.copyTypeParameters(typeParameters);
 1893|      0|            result->setType(resultType);
 1894|      0|        } else if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV ||
  ------------------
  |  Branch (1894:20): [True: 0, False: 0]
  ------------------
 1895|      0|                   fnCandidate->getBuiltInOp() == EOpCooperativeMatrixPerElementOpNV ||
  ------------------
  |  Branch (1895:20): [True: 0, False: 0]
  ------------------
 1896|      0|                   fnCandidate->getBuiltInOp() == EOpCooperativeMatrixTransposeNV ||
  ------------------
  |  Branch (1896:20): [True: 0, False: 0]
  ------------------
 1897|      0|                   fnCandidate->getBuiltInOp() == EOpTensorLayoutSetDimensionNV ||
  ------------------
  |  Branch (1897:20): [True: 0, False: 0]
  ------------------
 1898|      0|                   fnCandidate->getBuiltInOp() == EOpTensorLayoutSetBlockSizeNV ||
  ------------------
  |  Branch (1898:20): [True: 0, False: 0]
  ------------------
 1899|      0|                   fnCandidate->getBuiltInOp() == EOpTensorLayoutSetStrideNV ||
  ------------------
  |  Branch (1899:20): [True: 0, False: 0]
  ------------------
 1900|      0|                   fnCandidate->getBuiltInOp() == EOpTensorLayoutSliceNV ||
  ------------------
  |  Branch (1900:20): [True: 0, False: 0]
  ------------------
 1901|      0|                   fnCandidate->getBuiltInOp() == EOpTensorLayoutSetClampValueNV ||
  ------------------
  |  Branch (1901:20): [True: 0, False: 0]
  ------------------
 1902|      0|                   fnCandidate->getBuiltInOp() == EOpTensorViewSetDimensionNV ||
  ------------------
  |  Branch (1902:20): [True: 0, False: 0]
  ------------------
 1903|      0|                   fnCandidate->getBuiltInOp() == EOpTensorViewSetStrideNV ||
  ------------------
  |  Branch (1903:20): [True: 0, False: 0]
  ------------------
 1904|      0|                   fnCandidate->getBuiltInOp() == EOpTensorViewSetClipNV) {
  ------------------
  |  Branch (1904:20): [True: 0, False: 0]
  ------------------
 1905|       |            // Set result type to match type of first parameter
 1906|      0|            result->setType(result->getAsAggregate()->getSequence()[0]->getAsTyped()->getType());
 1907|      0|        } else {
 1908|       |            // The only remaining operation is MulAdd
 1909|      0|            assert(fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAdd ||
 1910|      0|                   fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAddNV);
 1911|       |
 1912|       |            // Validate that the matrix sizes are compatible for multiplication and addition
 1913|      0|            const auto &sequence = arguments->getAsAggregate()->getSequence();
 1914|       |
 1915|      0|            using ArrayDim = const TArraySize&;
 1916|      0|            auto getDim = [](const TIntermSequence& seq, int idx) -> std::tuple<ArrayDim, ArrayDim, int> {
 1917|      0|                const auto &type = seq[idx]->getAsTyped()->getType();
 1918|      0|                const auto *size = type.getTypeParameters()->arraySizes;
 1919|       |
 1920|      0|                if (type.isCoopMatNV()) {
 1921|       |                    // coopmatNV don't encode usage, so provide the correct usage by default
 1922|      0|                    return {size->getArraySize(2), size->getArraySize(3), idx};
 1923|      0|                } else {
 1924|      0|                    assert(type.isCoopMatKHR());
 1925|      0|                    return {size->getArraySize(1), size->getArraySize(2), size->getDimSize(3)};
 1926|      0|                }
 1927|      0|            };
 1928|       |
 1929|       |            // sizes look like: [scope, rows, cols, use]
 1930|      0|            auto [aRows, aCols, aUse] = getDim(sequence, 0);
 1931|      0|            auto [bRows, bCols, bUse] = getDim(sequence, 1);
 1932|      0|            auto [cRows, cCols, cUse] = getDim(sequence, 2);
 1933|       |
 1934|      0|            auto toString = [](ArrayDim dim) -> std::string {
 1935|      0|                std::stringstream buf;
 1936|      0|                if (dim.node == nullptr) {
 1937|      0|                    buf << dim.size;
 1938|      0|                } else {
 1939|      0|                    buf << "spec_const";
 1940|      0|                }
 1941|      0|                return buf.str();
 1942|      0|            };
 1943|       |
 1944|      0|            if (aCols != bRows) {
  ------------------
  |  Branch (1944:17): [True: 0, False: 0]
  ------------------
 1945|      0|                auto aRowsStr = toString(aRows);
 1946|      0|                auto aColsStr = toString(aCols);
 1947|      0|                auto bRowsStr = toString(bRows);
 1948|      0|                auto bColsStr = toString(bCols);
 1949|      0|                error(loc, "cannot multiply coop matrices with incompatible sizes",
 1950|      0|                      sequence[0]->getAsSymbolNode()->getMangledName().c_str(),
 1951|      0|                      "%s x %s with %s x %s",
 1952|      0|                      aRowsStr.c_str(),
 1953|      0|                      aColsStr.c_str(),
 1954|      0|                      bRowsStr.c_str(),
 1955|      0|                      bColsStr.c_str());
 1956|      0|            } else if (aRows != cRows || bCols != cCols) {
  ------------------
  |  Branch (1956:24): [True: 0, False: 0]
  |  Branch (1956:42): [True: 0, False: 0]
  ------------------
 1957|      0|                auto aRowsStr = toString(aRows);
 1958|      0|                auto bColsStr = toString(bCols);
 1959|      0|                auto cRowsStr = toString(cRows);
 1960|      0|                auto cColsStr = toString(cCols);
 1961|      0|                error(loc, "cannot add coop matrices with incompatible sizes",
 1962|      0|                      sequence[2]->getAsSymbolNode()->getMangledName().c_str(),
 1963|      0|                      "%s x %s with %s x %s",
 1964|      0|                      aRowsStr.c_str(),
 1965|      0|                      bColsStr.c_str(),
 1966|      0|                      cRowsStr.c_str(),
 1967|      0|                      cColsStr.c_str());
 1968|      0|            } else if (aUse != 0) {
  ------------------
  |  Branch (1968:24): [True: 0, False: 0]
  ------------------
 1969|      0|                error(loc, "coop matrix A in MulAdd operation has incompatible usage property,",
 1970|      0|                      sequence[0]->getAsSymbolNode()->getMangledName().c_str(),
 1971|      0|                      "found %d, but needed 0", aUse);
 1972|      0|            } else if (bUse != 1) {
  ------------------
  |  Branch (1972:24): [True: 0, False: 0]
  ------------------
 1973|      0|                error(loc, "coop matrix B in MulAdd operation has incompatible usage property,",
 1974|      0|                      sequence[1]->getAsSymbolNode()->getMangledName().c_str(),
 1975|      0|                      "found %d, but needed 1", bUse);
 1976|      0|            } else if (cUse != 2) {
  ------------------
  |  Branch (1976:24): [True: 0, False: 0]
  ------------------
 1977|      0|                error(loc, "coop matrix C in MulAdd operation has incompatible usage property,",
 1978|      0|                      sequence[2]->getAsSymbolNode()->getMangledName().c_str(),
 1979|      0|                      "found %d, but needed 2", cUse);
 1980|      0|            }
 1981|       |
 1982|       |            // Set result type to match type of C parameter
 1983|      0|            result->setType(result->getAsAggregate()->getSequence()[2]->getAsTyped()->getType());
 1984|      0|        }
 1985|      0|    }
 1986|  1.99k|}
_ZN7glslang13TParseContext34handleVector2CoopMatConversionCallERKNS_10TSourceLocEPKNS_9TFunctionERPNS_12TIntermTypedEP11TIntermNode:
 1993|  1.99k|{
 1994|  1.99k|  const uint32_t CM_MatrixUseA = 0;           // == gl_MatrixUseA
 1995|  1.99k|  const uint32_t CM_MatrixUseB = 1;           // == gl_MatrixUseB
 1996|  1.99k|  const uint32_t CM_MatrixUseAccumulator = 2; // == gl_MatrixUseAccumulator
 1997|       |
 1998|  1.99k|  TOperator builtinOp = fnCandidate->getBuiltInOp();
 1999|       |
 2000|  1.99k|  if (!(builtinOp == EOpBitCastArrayQCOM || builtinOp == EOpExtractSubArrayQCOM ||
  ------------------
  |  Branch (2000:9): [True: 0, False: 1.99k]
  |  Branch (2000:45): [True: 0, False: 1.99k]
  ------------------
 2001|  1.99k|        builtinOp == EOpCompositeConstructCoopMatQCOM || builtinOp == EOpCompositeExtractCoopMatQCOM))
  ------------------
  |  Branch (2001:9): [True: 0, False: 1.99k]
  |  Branch (2001:58): [True: 0, False: 1.99k]
  ------------------
 2002|  1.99k|    return;
 2003|       |
 2004|      0|  TPublicType pubType{};
 2005|      0|  auto* oldResult = result;
 2006|       |
 2007|      0|  if (builtinOp == EOpBitCastArrayQCOM) {
  ------------------
  |  Branch (2007:7): [True: 0, False: 0]
  ------------------
 2008|      0|    auto srcArr = arguments->getAsAggregate()->getSequence()[0]->getAsTyped();
 2009|      0|    auto& srcTy = srcArr->getType();
 2010|      0|    auto srcArrLen = srcTy.getArraySizes()->getDimSize(0);
 2011|      0|    auto srcLenAsNode = srcTy.getArraySizes()->getDimNode(0);
 2012|       |
 2013|      0|    auto dstArr = arguments->getAsAggregate()->getSequence()[1]->getAsTyped();
 2014|      0|    auto& dstTy = dstArr->getType();
 2015|      0|    auto dstArrLen = dstTy.getArraySizes()->getDimSize(0);
 2016|      0|    auto dstLenAsNode = dstTy.getArraySizes()->getDimNode(0);
 2017|       |
 2018|      0|    if (srcLenAsNode == nullptr && dstLenAsNode == nullptr) {
  ------------------
  |  Branch (2018:9): [True: 0, False: 0]
  |  Branch (2018:36): [True: 0, False: 0]
  ------------------
 2019|       |      //do basic tests:
 2020|      0|      if ((srcArrLen * GetNumBits(srcTy.getBasicType())) != (dstArrLen * GetNumBits(dstTy.getBasicType())))
  ------------------
  |  Branch (2020:11): [True: 0, False: 0]
  ------------------
 2021|      0|        error(loc, "source and target arrays have different bit sizes", "", "");
 2022|      0|    }
 2023|       |
 2024|      0|    pubType.basicType = dstTy.getBasicType();
 2025|      0|    pubType.vectorSize = 1u;
 2026|      0|    pubType.qualifier.precision = EpqNone;
 2027|      0|    pubType.coopmatNV = false;
 2028|      0|    pubType.coopmatKHR = false;
 2029|      0|    pubType.arraySizes = new TArraySizes;
 2030|      0|    pubType.arraySizes->addInnerSize(dstArrLen, dstLenAsNode);
 2031|      0|    pubType.typeParameters = nullptr;
 2032|      0|  }
 2033|       |
 2034|      0|  if (builtinOp == EOpExtractSubArrayQCOM) {
  ------------------
  |  Branch (2034:7): [True: 0, False: 0]
  ------------------
 2035|      0|    auto dstArr = arguments->getAsAggregate()->getSequence()[2]->getAsTyped();
 2036|      0|    auto& dstTy = dstArr->getType();
 2037|      0|    auto dstArrLen = dstTy.getArraySizes()->getDimSize(0);
 2038|      0|    auto dstLenAsNode = dstTy.getArraySizes()->getDimNode(0);
 2039|       |
 2040|      0|    if (dstLenAsNode == nullptr) {
  ------------------
  |  Branch (2040:9): [True: 0, False: 0]
  ------------------
 2041|      0|      if ((dstArrLen * GetNumBits(dstTy.getBasicType())) == 32)
  ------------------
  |  Branch (2041:11): [True: 0, False: 0]
  ------------------
 2042|      0|        error(loc, "the byte size of the target array must be 32", "", "");
 2043|      0|    }
 2044|       |
 2045|      0|    pubType.basicType = dstTy.getBasicType();
 2046|      0|    pubType.vectorSize = 1u;
 2047|      0|    pubType.qualifier.precision = EpqNone;
 2048|      0|    pubType.coopmatNV = false;
 2049|      0|    pubType.coopmatKHR = false;
 2050|      0|    pubType.arraySizes = new TArraySizes;
 2051|      0|    pubType.arraySizes->addInnerSize(dstArrLen, dstLenAsNode);
 2052|      0|    pubType.typeParameters = nullptr;
 2053|      0|  }
 2054|       |
 2055|      0|  if (builtinOp == EOpCompositeConstructCoopMatQCOM) {
  ------------------
  |  Branch (2055:7): [True: 0, False: 0]
  ------------------
 2056|       |
 2057|      0|    auto& srcType = arguments->getAsAggregate()->getSequence()[0]->getAsTyped()->getType();
 2058|      0|    auto& dstType = arguments->getAsAggregate()->getSequence()[1]->getAsTyped()->getType();
 2059|       |
 2060|      0|    glslang::TBasicType srcBasicType = srcType.getBasicType();
 2061|      0|    glslang::TBasicType dstBasicType = dstType.getBasicType();
 2062|       |
 2063|      0|    if (srcBasicType != EbtUint && srcBasicType != dstBasicType)
  ------------------
  |  Branch (2063:9): [True: 0, False: 0]
  |  Branch (2063:36): [True: 0, False: 0]
  ------------------
 2064|      0|      error(loc, "source and destination element types are not compatible", "", "");
 2065|       |
 2066|      0|    uint32_t scope = spv_Scope_Subgroup;
 2067|      0|    uint32_t coopMatKHRuse = !0u;
 2068|      0|    uint32_t coopMatNumRows = !0u, coopMatNumCols = !0u;
 2069|      0|    TIntermTyped *nodeNumRows = nullptr, *nodeNumCols = nullptr;
 2070|      0|    const TTypeParameters* dstTypeParameters = dstType.getTypeParameters();
 2071|      0|    if (dstTypeParameters->arraySizes == nullptr || dstTypeParameters->arraySizes->getNumDims() != 4) {
  ------------------
  |  Branch (2071:9): [True: 0, False: 0]
  |  Branch (2071:53): [True: 0, False: 0]
  ------------------
 2072|      0|      error(loc, "destination cooperative matrix has an unsupported type", "", "");
 2073|      0|    } else {
 2074|      0|      auto arraySizes = dstTypeParameters->arraySizes;
 2075|      0|      scope = arraySizes->getDimSize(0);
 2076|      0|      coopMatNumRows = arraySizes->getDimSize(1);
 2077|      0|      nodeNumRows = arraySizes->getDimNode(1);
 2078|      0|      coopMatNumCols = arraySizes->getDimSize(2);
 2079|      0|      nodeNumCols = arraySizes->getDimNode(2);
 2080|      0|      coopMatKHRuse = arraySizes->getDimSize(3);
 2081|      0|    }
 2082|       |
 2083|      0|    if (scope != spv_Scope_Subgroup) {
  ------------------
  |  Branch (2083:9): [True: 0, False: 0]
  ------------------
 2084|      0|      scope = spv_Scope_Subgroup;
 2085|      0|      error(loc, "cooperative matrix has unsupported scope; gl_SubgroupScope is expected", "", "");
 2086|      0|    }
 2087|       |
 2088|      0|    if (coopMatKHRuse > CM_MatrixUseAccumulator) {
  ------------------
  |  Branch (2088:9): [True: 0, False: 0]
  ------------------
 2089|      0|      coopMatKHRuse = CM_MatrixUseA;
 2090|      0|      error(loc, "cooperative matrix use must be one of gl_MatrixUseA, gl_MatrixUseB, gl_MatrixUseAccumulator",
 2091|      0|            "", "");
 2092|      0|    }
 2093|       |
 2094|      0|    uint32_t dstBasicTypeSize = GetNumBits(dstBasicType) / 8;
 2095|       |
 2096|      0|    unsigned numRows = coopMatNumRows;
 2097|      0|    TIntermTyped* specConstRows = nodeNumRows;
 2098|      0|    unsigned numCols = coopMatNumCols;
 2099|      0|    TIntermTyped* specConstCols = nodeNumCols;
 2100|       |
 2101|       |    // input array type
 2102|      0|    const TType& type = arguments->getAsAggregate()->getSequence()[0]->getAsTyped()->getType();
 2103|      0|    uint32_t arrayLen = type.getArraySizes()->getDimSize(0);
 2104|      0|    auto arrayDimNode = type.getArraySizes()->getDimNode(0);
 2105|       |
 2106|      0|    if (coopMatKHRuse == CM_MatrixUseA || coopMatKHRuse == CM_MatrixUseAccumulator) {
  ------------------
  |  Branch (2106:9): [True: 0, False: 0]
  |  Branch (2106:43): [True: 0, False: 0]
  ------------------
 2107|       |      // update numCols
 2108|      0|      if (arrayDimNode == nullptr && specConstCols == nullptr)
  ------------------
  |  Branch (2108:11): [True: 0, False: 0]
  |  Branch (2108:38): [True: 0, False: 0]
  ------------------
 2109|      0|        numCols = arrayLen * (sizeof(uint32_t) / dstBasicTypeSize);
 2110|      0|    } else if (coopMatKHRuse == CM_MatrixUseB) {
  ------------------
  |  Branch (2110:16): [True: 0, False: 0]
  ------------------
 2111|       |      // update numRows
 2112|      0|      if (arrayDimNode == nullptr && specConstRows == nullptr) {
  ------------------
  |  Branch (2112:11): [True: 0, False: 0]
  |  Branch (2112:38): [True: 0, False: 0]
  ------------------
 2113|      0|        numRows = arrayLen * (sizeof(uint32_t) / dstBasicTypeSize);
 2114|      0|      }
 2115|      0|    }
 2116|       |
 2117|       |    // construct the type
 2118|      0|    TArraySizes* arraySizes = new TArraySizes;
 2119|       |
 2120|       |    // add Scope
 2121|      0|    arraySizes->addInnerSize(scope);
 2122|       |
 2123|       |    // add the row size
 2124|      0|    arraySizes->addInnerSize(numRows, specConstRows); // copy from source
 2125|       |    // add the column size
 2126|      0|    arraySizes->addInnerSize(numCols, specConstCols); // copy from source
 2127|       |    // add cooperative matrix use
 2128|      0|    arraySizes->addInnerSize(coopMatKHRuse);
 2129|       |
 2130|      0|    pubType.basicType = dstBasicType;
 2131|      0|    pubType.vectorSize = 1u;
 2132|      0|    pubType.qualifier = srcType.getQualifier();
 2133|      0|    pubType.qualifier.precision = EpqNone;
 2134|      0|    pubType.coopmatNV = dstType.isCoopMatNV();
 2135|      0|    pubType.coopmatKHR = dstType.isCoopMatKHR();
 2136|      0|    pubType.arraySizes = nullptr;
 2137|      0|    pubType.typeParameters = const_cast<glslang::TTypeParameters*>(dstTypeParameters);
 2138|      0|  }
 2139|       |
 2140|      0|  if (builtinOp == EOpCompositeExtractCoopMatQCOM) {
  ------------------
  |  Branch (2140:7): [True: 0, False: 0]
  ------------------
 2141|      0|    auto& srcType = arguments->getAsAggregate()->getSequence()[0]->getAsTyped()->getType();
 2142|      0|    auto& dstType = arguments->getAsAggregate()->getSequence()[1]->getAsTyped()->getType();
 2143|       |
 2144|      0|    glslang::TBasicType srcBasicType = srcType.getBasicType();
 2145|      0|    glslang::TBasicType dstBasicType = dstType.getBasicType();
 2146|       |
 2147|      0|    if (dstBasicType != EbtUint && srcBasicType != dstBasicType)
  ------------------
  |  Branch (2147:9): [True: 0, False: 0]
  |  Branch (2147:36): [True: 0, False: 0]
  ------------------
 2148|      0|      error(loc, "source and destination element types are not compatible", "", "");
 2149|       |
 2150|      0|    uint32_t scope = spv_Scope_Subgroup;
 2151|      0|    unsigned coopMatKHRuse = !0u;
 2152|      0|    const TTypeParameters* srcTypeParameters = srcType.getTypeParameters();
 2153|      0|    if (srcTypeParameters->arraySizes == nullptr || srcTypeParameters->arraySizes->getNumDims() != 4) {
  ------------------
  |  Branch (2153:9): [True: 0, False: 0]
  |  Branch (2153:53): [True: 0, False: 0]
  ------------------
 2154|      0|      error(loc, "source cooperative matrix has an unsupported type", "", "");
 2155|      0|    } else {
 2156|      0|      auto arraySizes = srcTypeParameters->arraySizes;
 2157|      0|      scope = arraySizes->getDimSize(0);
 2158|      0|      coopMatKHRuse = arraySizes->getDimSize(3);
 2159|      0|    }
 2160|       |
 2161|      0|    if (scope != spv_Scope_Subgroup) {
  ------------------
  |  Branch (2161:9): [True: 0, False: 0]
  ------------------
 2162|      0|      scope = spv_Scope_Subgroup;
 2163|      0|      error(loc, "cooperative matrix has unsupported scope; gl_SubgroupScope is expected", "", "");
 2164|      0|    }
 2165|       |
 2166|      0|    if (coopMatKHRuse > CM_MatrixUseAccumulator) {
  ------------------
  |  Branch (2166:9): [True: 0, False: 0]
  ------------------
 2167|      0|      coopMatKHRuse = CM_MatrixUseA;
 2168|      0|      error(loc, "cooperative matrix use must be one of gl_MatrixUseA, gl_MatrixUseB, gl_MatrixUseAccumulator",
 2169|      0|            "", "");
 2170|      0|    }
 2171|       |
 2172|      0|    auto dstArrLen = dstType.getArraySizes()->getDimSize(0);
 2173|      0|    auto dstLenAsNode = dstType.getArraySizes()->getDimNode(0);
 2174|       |
 2175|      0|    if (dstLenAsNode == nullptr) {
  ------------------
  |  Branch (2175:9): [True: 0, False: 0]
  ------------------
 2176|      0|      bool ok = true;
 2177|      0|      switch (dstBasicType) {
 2178|      0|      case EbtUint:
  ------------------
  |  Branch (2178:7): [True: 0, False: 0]
  ------------------
 2179|      0|      case EbtInt:
  ------------------
  |  Branch (2179:7): [True: 0, False: 0]
  ------------------
 2180|      0|      case EbtFloat:
  ------------------
  |  Branch (2180:7): [True: 0, False: 0]
  ------------------
 2181|      0|        ok = (((coopMatKHRuse == CM_MatrixUseA || coopMatKHRuse == CM_MatrixUseB) && dstArrLen == 8) ||
  ------------------
  |  Branch (2181:17): [True: 0, False: 0]
  |  Branch (2181:51): [True: 0, False: 0]
  |  Branch (2181:86): [True: 0, False: 0]
  ------------------
 2182|      0|              (coopMatKHRuse ==
  ------------------
  |  Branch (2182:15): [True: 0, False: 0]
  ------------------
 2183|      0|               CM_MatrixUseAccumulator) /* && (dstArrLen == 64 || dstArrLen == 32 || dstArrLen == 16))*/);
 2184|      0|        break;
 2185|      0|      case EbtFloat16:
  ------------------
  |  Branch (2185:7): [True: 0, False: 0]
  ------------------
 2186|      0|        ok = (((coopMatKHRuse == CM_MatrixUseA || coopMatKHRuse == CM_MatrixUseB) && dstArrLen == 16) ||
  ------------------
  |  Branch (2186:17): [True: 0, False: 0]
  |  Branch (2186:51): [True: 0, False: 0]
  |  Branch (2186:86): [True: 0, False: 0]
  ------------------
 2187|      0|              (coopMatKHRuse ==
  ------------------
  |  Branch (2187:15): [True: 0, False: 0]
  ------------------
 2188|      0|               CM_MatrixUseAccumulator) /* && (dstArrLen == 64 || dstArrLen == 32 || dstArrLen == 16))*/);
 2189|      0|        break;
 2190|      0|      case EbtInt8:
  ------------------
  |  Branch (2190:7): [True: 0, False: 0]
  ------------------
 2191|      0|      case EbtUint8:
  ------------------
  |  Branch (2191:7): [True: 0, False: 0]
  ------------------
 2192|      0|        ok = (((coopMatKHRuse == CM_MatrixUseA || coopMatKHRuse == CM_MatrixUseB) && dstArrLen == 32) ||
  ------------------
  |  Branch (2192:17): [True: 0, False: 0]
  |  Branch (2192:51): [True: 0, False: 0]
  |  Branch (2192:86): [True: 0, False: 0]
  ------------------
 2193|      0|              (coopMatKHRuse ==
  ------------------
  |  Branch (2193:15): [True: 0, False: 0]
  ------------------
 2194|      0|               CM_MatrixUseAccumulator) /* && (dstArrLen == 64 || dstArrLen == 32 || dstArrLen == 16))*/);
 2195|      0|        break;
 2196|      0|      default:
  ------------------
  |  Branch (2196:7): [True: 0, False: 0]
  ------------------
 2197|      0|        error(loc, "unsupported element type", "", "");
 2198|      0|      }
 2199|      0|      if (!ok)
  ------------------
  |  Branch (2199:11): [True: 0, False: 0]
  ------------------
 2200|      0|        error(loc, "unsupported destination array length", "", "");
 2201|      0|    }
 2202|       |
 2203|      0|    pubType.basicType = dstBasicType;
 2204|      0|    pubType.vectorSize = 1u;
 2205|      0|    pubType.qualifier.precision = EpqNone;
 2206|      0|    pubType.coopmatNV = false;
 2207|      0|    pubType.coopmatKHR = false;
 2208|       |
 2209|      0|    pubType.arraySizes = new TArraySizes;
 2210|       |
 2211|      0|    {
 2212|       |      //int coopMatKHRuse = srcTypeParameters->arraySizes->getDimSize(3);
 2213|      0|      uint32_t index = !0u;
 2214|      0|      if (coopMatKHRuse == CM_MatrixUseA) {
  ------------------
  |  Branch (2214:11): [True: 0, False: 0]
  ------------------
 2215|      0|        index = 2;
 2216|      0|      } else if (coopMatKHRuse == CM_MatrixUseB) {
  ------------------
  |  Branch (2216:18): [True: 0, False: 0]
  ------------------
 2217|      0|        index = 1;
 2218|      0|      } else if (coopMatKHRuse == CM_MatrixUseAccumulator) {
  ------------------
  |  Branch (2218:18): [True: 0, False: 0]
  ------------------
 2219|      0|        index = 2;
 2220|      0|      } else {
 2221|      0|        error(loc, "source cooperative matrix has an unexpected cooperative matrix use", "", "");
 2222|      0|      }
 2223|      0|      int32_t numRowsOrCols = srcTypeParameters->arraySizes->getDimSize(index);
 2224|      0|      auto dimNode = srcTypeParameters->arraySizes->getDimNode(index);
 2225|      0|      if (dimNode != nullptr && dstLenAsNode == nullptr) {
  ------------------
  |  Branch (2225:11): [True: 0, False: 0]
  |  Branch (2225:33): [True: 0, False: 0]
  ------------------
 2226|      0|        numRowsOrCols = dstType.getArraySizes()->getDimSize(0);
 2227|      0|        dimNode = nullptr;
 2228|      0|      }
 2229|       |      //int32_t dstArrLen = dstType.getArraySizes()->getDimSize(0);
 2230|      0|      pubType.arraySizes->addInnerSize(dstArrLen, dstLenAsNode);
 2231|      0|      if (dimNode == nullptr && dstLenAsNode == nullptr) {
  ------------------
  |  Branch (2231:11): [True: 0, False: 0]
  |  Branch (2231:33): [True: 0, False: 0]
  ------------------
 2232|      0|        const char* msg = nullptr;
 2233|      0|        if (coopMatKHRuse == CM_MatrixUseA && (numRowsOrCols != dstArrLen && dstArrLen != 8)) {
  ------------------
  |  Branch (2233:13): [True: 0, False: 0]
  |  Branch (2233:48): [True: 0, False: 0]
  |  Branch (2233:78): [True: 0, False: 0]
  ------------------
 2234|      0|          msg = "the source matrix's column is not compatible with the destination array";
 2235|      0|        } else if (coopMatKHRuse == CM_MatrixUseB && (numRowsOrCols != dstArrLen && dstArrLen != 8)) {
  ------------------
  |  Branch (2235:20): [True: 0, False: 0]
  |  Branch (2235:55): [True: 0, False: 0]
  |  Branch (2235:85): [True: 0, False: 0]
  ------------------
 2236|      0|          msg = "the source matrix's row is not compatible with the destination array";
 2237|      0|        } else if (coopMatKHRuse == CM_MatrixUseAccumulator &&
  ------------------
  |  Branch (2237:20): [True: 0, False: 0]
  ------------------
 2238|      0|                   (numRowsOrCols != dstArrLen &&
  ------------------
  |  Branch (2238:21): [True: 0, False: 0]
  ------------------
 2239|      0|                    (srcBasicType == EbtFloat16 && numRowsOrCols != 2 * dstArrLen))) {
  ------------------
  |  Branch (2239:22): [True: 0, False: 0]
  |  Branch (2239:52): [True: 0, False: 0]
  ------------------
 2240|      0|          msg = "the source matrix's column is not compatible with the destination array";
 2241|      0|        }
 2242|      0|        if (msg != nullptr)
  ------------------
  |  Branch (2242:13): [True: 0, False: 0]
  ------------------
 2243|      0|          error(loc, msg, "", "");
 2244|      0|      }
 2245|      0|    }
 2246|       |
 2247|      0|    pubType.typeParameters = nullptr;
 2248|      0|  }
 2249|       |
 2250|      0|  TType resultType(pubType);
 2251|      0|  if (pubType.typeParameters != nullptr)
  ------------------
  |  Branch (2251:7): [True: 0, False: 0]
  ------------------
 2252|      0|    resultType.copyTypeParameters(*pubType.typeParameters);
 2253|       |  // need to make StorageQualifier temp
 2254|      0|  resultType.makeTemporary();
 2255|      0|  result->setType(resultType);
 2256|       |
 2257|       |  // the RHS of an assignment to be formed
 2258|      0|  auto rhs = result;
 2259|       |
 2260|       |  // the LHS of an assignment to be formed; pick the last argument
 2261|      0|  int lhsIdx = (builtinOp == EOpExtractSubArrayQCOM ? 2 : 1);
  ------------------
  |  Branch (2261:17): [True: 0, False: 0]
  ------------------
 2262|      0|  auto lhs = arguments->getAsAggregate()->getSequence()[lhsIdx]->getAsTyped();
 2263|       |  // pop the last argument from the arguments sequence
 2264|      0|  arguments->getAsAggregate()->getSequence().pop_back();
 2265|       |
 2266|       |  // Create OpAssign
 2267|      0|  {
 2268|      0|    arrayObjectCheck(loc, lhs->getType(), "array assignment");
 2269|      0|    storage16BitAssignmentCheck(loc, lhs->getType(), "=");
 2270|      0|    lValueErrorCheck(loc, "assign", lhs);
 2271|      0|    rValueErrorCheck(loc, "assign", rhs);
 2272|      0|    result = addAssign(loc, EOpAssign, lhs, rhs);
 2273|      0|    if (result == nullptr)
  ------------------
  |  Branch (2273:9): [True: 0, False: 0]
  ------------------
 2274|      0|      result = oldResult;
 2275|      0|  }
 2276|      0|}
_ZN7glslang13TParseContext25handleBuiltInFunctionCallENS_10TSourceLocEP11TIntermNodeRKNS_9TFunctionE:
 2287|  1.84k|{
 2288|  1.84k|    checkLocation(loc, function.getBuiltInOp());
 2289|  1.84k|    TIntermTyped *result = intermediate.addBuiltInFunctionCall(loc, function.getBuiltInOp(),
 2290|  1.84k|                                                               function.getParamCount() == 1,
 2291|  1.84k|                                                               arguments, function.getType());
 2292|       |
 2293|       |    // EXT_descriptor_heap
 2294|       |    // All the image atomic ops' first param is image variable.
 2295|  1.84k|    if (extensionTurnedOn(E_GL_EXT_descriptor_heap) && function.getBuiltInOp() <= EOpImageAtomicStore &&
  ------------------
  |  Branch (2295:9): [True: 0, False: 1.84k]
  |  Branch (2295:56): [True: 0, False: 0]
  ------------------
 2296|      0|        function.getBuiltInOp() >= EOpImageAtomicAdd) {
  ------------------
  |  Branch (2296:9): [True: 0, False: 0]
  ------------------
 2297|      0|        TIntermNode* imageNode = nullptr;
 2298|      0|        if (arguments->getAsAggregate() && arguments->getAsAggregate()->getSequence().size() > 0)
  ------------------
  |  Branch (2298:13): [True: 0, False: 0]
  |  Branch (2298:44): [True: 0, False: 0]
  ------------------
 2299|      0|            imageNode = arguments->getAsAggregate()->getSequence()[0];
 2300|      0|        else if (arguments->getAsUnaryNode())
  ------------------
  |  Branch (2300:18): [True: 0, False: 0]
  ------------------
 2301|      0|            imageNode = arguments->getAsUnaryNode();
 2302|       |
 2303|      0|        if (imageNode && imageNode->getAsBinaryNode()) {
  ------------------
  |  Branch (2303:13): [True: 0, False: 0]
  |  Branch (2303:26): [True: 0, False: 0]
  ------------------
 2304|      0|            auto imageSymbol = imageNode->getAsBinaryNode()->getLeft();
 2305|      0|            if (imageSymbol && imageSymbol->getType().isImage()) {
  ------------------
  |  Branch (2305:17): [True: 0, False: 0]
  |  Branch (2305:32): [True: 0, False: 0]
  ------------------
 2306|      0|                imageSymbol->getQualifier().setUsedByAtomic();
 2307|      0|                result->getQualifier().setUsedByAtomic();
 2308|      0|            }
 2309|      0|        }
 2310|      0|    }
 2311|       |
 2312|  1.84k|    if (result != nullptr && obeyPrecisionQualifiers())
  ------------------
  |  Branch (2312:9): [True: 1.84k, False: 0]
  |  Branch (2312:30): [True: 1.84k, False: 0]
  ------------------
 2313|  1.84k|        computeBuiltinPrecisions(*result, function);
 2314|       |
 2315|  1.84k|    if (result == nullptr) {
  ------------------
  |  Branch (2315:9): [True: 0, False: 1.84k]
  ------------------
 2316|      0|        if (arguments == nullptr)
  ------------------
  |  Branch (2316:13): [True: 0, False: 0]
  ------------------
 2317|      0|            error(loc, " wrong operand type", "Internal Error",
 2318|      0|                                      "built in unary operator function.  Type: %s", "");
 2319|      0|        else
 2320|      0|            error(arguments->getLoc(), " wrong operand type", "Internal Error",
 2321|      0|                                      "built in unary operator function.  Type: %s",
 2322|      0|                                      static_cast<TIntermTyped*>(arguments)->getCompleteString(intermediate.getEnhancedMsgs()).c_str());
 2323|  1.84k|    } else if (result->getAsOperator())
  ------------------
  |  Branch (2323:16): [True: 1.84k, False: 0]
  ------------------
 2324|  1.84k|        builtInOpCheck(loc, function, *result->getAsOperator());
 2325|       |
 2326|       |    // Special handling for function call with SPIR-V instruction qualifier specified
 2327|  1.84k|    if (function.getBuiltInOp() == EOpSpirvInst) {
  ------------------
  |  Branch (2327:9): [True: 0, False: 1.84k]
  ------------------
 2328|      0|        if (auto agg = result->getAsAggregate()) {
  ------------------
  |  Branch (2328:18): [True: 0, False: 0]
  ------------------
 2329|       |            // Propogate spirv_by_reference/spirv_literal from parameters to arguments
 2330|      0|            auto& sequence = agg->getSequence();
 2331|      0|            for (unsigned i = 0; i < sequence.size(); ++i) {
  ------------------
  |  Branch (2331:34): [True: 0, False: 0]
  ------------------
 2332|      0|                if (function[i].type->getQualifier().isSpirvByReference())
  ------------------
  |  Branch (2332:21): [True: 0, False: 0]
  ------------------
 2333|      0|                    sequence[i]->getAsTyped()->getQualifier().setSpirvByReference();
 2334|      0|                if (function[i].type->getQualifier().isSpirvLiteral())
  ------------------
  |  Branch (2334:21): [True: 0, False: 0]
  ------------------
 2335|      0|                    sequence[i]->getAsTyped()->getQualifier().setSpirvLiteral();
 2336|      0|            }
 2337|       |
 2338|       |            // Attach the function call to SPIR-V intruction
 2339|      0|            agg->setSpirvInstruction(function.getSpirvInstruction());
 2340|      0|        } else if (auto unaryNode = result->getAsUnaryNode()) {
  ------------------
  |  Branch (2340:25): [True: 0, False: 0]
  ------------------
 2341|       |            // Propogate spirv_by_reference/spirv_literal from parameters to arguments
 2342|      0|            if (function[0].type->getQualifier().isSpirvByReference())
  ------------------
  |  Branch (2342:17): [True: 0, False: 0]
  ------------------
 2343|      0|                unaryNode->getOperand()->getQualifier().setSpirvByReference();
 2344|      0|            if (function[0].type->getQualifier().isSpirvLiteral())
  ------------------
  |  Branch (2344:17): [True: 0, False: 0]
  ------------------
 2345|      0|                unaryNode->getOperand()->getQualifier().setSpirvLiteral();
 2346|       |
 2347|       |            // Attach the function call to SPIR-V intruction
 2348|      0|            unaryNode->setSpirvInstruction(function.getSpirvInstruction());
 2349|      0|        } else
 2350|      0|            assert(0);
 2351|      0|    }
 2352|       |
 2353|  1.84k|    return result;
 2354|  1.84k|}
_ZN7glslang13TParseContext24computeBuiltinPrecisionsERNS_12TIntermTypedERKNS_9TFunctionE:
 2389|  1.84k|{
 2390|  1.84k|    TPrecisionQualifier operationPrecision = EpqNone;
 2391|  1.84k|    TPrecisionQualifier resultPrecision = EpqNone;
 2392|       |
 2393|  1.84k|    TIntermOperator* opNode = node.getAsOperator();
 2394|  1.84k|    if (opNode == nullptr)
  ------------------
  |  Branch (2394:9): [True: 0, False: 1.84k]
  ------------------
 2395|      0|        return;
 2396|       |
 2397|  1.84k|    if (TIntermUnary* unaryNode = node.getAsUnaryNode()) {
  ------------------
  |  Branch (2397:23): [True: 120, False: 1.72k]
  ------------------
 2398|    120|        operationPrecision = std::max(function[0].type->getQualifier().precision,
 2399|    120|                                      unaryNode->getOperand()->getType().getQualifier().precision);
 2400|    120|        if (function.getType().getBasicType() != EbtBool)
  ------------------
  |  Branch (2400:13): [True: 120, False: 0]
  ------------------
 2401|    120|            resultPrecision = function.getType().getQualifier().precision == EpqNone ?
  ------------------
  |  Branch (2401:31): [True: 120, False: 0]
  ------------------
 2402|    120|                                        operationPrecision :
 2403|    120|                                        function.getType().getQualifier().precision;
 2404|  1.72k|    } else if (TIntermAggregate* agg = node.getAsAggregate()) {
  ------------------
  |  Branch (2404:34): [True: 1.72k, False: 0]
  ------------------
 2405|  1.72k|        TIntermSequence& sequence = agg->getSequence();
 2406|  1.72k|        unsigned int numArgs = (unsigned int)sequence.size();
 2407|  1.72k|        switch (agg->getOp()) {
 2408|      0|        case EOpBitfieldExtract:
  ------------------
  |  Branch (2408:9): [True: 0, False: 1.72k]
  ------------------
 2409|      0|            numArgs = 1;
 2410|      0|            break;
 2411|      0|        case EOpBitfieldInsert:
  ------------------
  |  Branch (2411:9): [True: 0, False: 1.72k]
  ------------------
 2412|      0|            numArgs = 2;
 2413|      0|            break;
 2414|      0|        case EOpInterpolateAtCentroid:
  ------------------
  |  Branch (2414:9): [True: 0, False: 1.72k]
  ------------------
 2415|      0|        case EOpInterpolateAtOffset:
  ------------------
  |  Branch (2415:9): [True: 0, False: 1.72k]
  ------------------
 2416|      0|        case EOpInterpolateAtSample:
  ------------------
  |  Branch (2416:9): [True: 0, False: 1.72k]
  ------------------
 2417|      0|            numArgs = 1;
 2418|      0|            break;
 2419|      0|        case EOpDebugPrintf:
  ------------------
  |  Branch (2419:9): [True: 0, False: 1.72k]
  ------------------
 2420|      0|        case EOpAbortEXT:
  ------------------
  |  Branch (2420:9): [True: 0, False: 1.72k]
  ------------------
 2421|      0|        case EOpCooperativeMatrixPerElementOpNV:
  ------------------
  |  Branch (2421:9): [True: 0, False: 1.72k]
  ------------------
 2422|      0|        case EOpCooperativeMatrixReduceNV:
  ------------------
  |  Branch (2422:9): [True: 0, False: 1.72k]
  ------------------
 2423|      0|        case EOpConstructSaturated:
  ------------------
  |  Branch (2423:9): [True: 0, False: 1.72k]
  ------------------
 2424|      0|            numArgs = 0;
 2425|      0|            break;
 2426|  1.72k|        default:
  ------------------
  |  Branch (2426:9): [True: 1.72k, False: 0]
  ------------------
 2427|  1.72k|            break;
 2428|  1.72k|        }
 2429|       |        // find the maximum precision from the arguments and parameters
 2430|  8.09k|        for (unsigned int arg = 0; arg < numArgs; ++arg) {
  ------------------
  |  Branch (2430:36): [True: 6.36k, False: 1.72k]
  ------------------
 2431|  6.36k|            operationPrecision = std::max(operationPrecision, sequence[arg]->getAsTyped()->getQualifier().precision);
 2432|  6.36k|        }
 2433|  8.09k|        for (int arg = 0; arg < function.getParamCount(); ++arg) {
  ------------------
  |  Branch (2433:27): [True: 6.36k, False: 1.72k]
  ------------------
 2434|  6.36k|            operationPrecision = std::max(operationPrecision, function[arg].type->getQualifier().precision);
 2435|  6.36k|        }
 2436|       |        // compute the result precision
 2437|  1.72k|        if (agg->isSampling() ||
  ------------------
  |  Branch (2437:13): [True: 1.49k, False: 234]
  ------------------
 2438|    234|            agg->getOp() == EOpImageLoad || agg->getOp() == EOpImageStore ||
  ------------------
  |  Branch (2438:13): [True: 66, False: 168]
  |  Branch (2438:45): [True: 66, False: 102]
  ------------------
 2439|    102|            agg->getOp() == EOpImageLoadLod || agg->getOp() == EOpImageStoreLod)
  ------------------
  |  Branch (2439:13): [True: 0, False: 102]
  |  Branch (2439:48): [True: 0, False: 102]
  ------------------
 2440|  1.62k|            resultPrecision = sequence[0]->getAsTyped()->getQualifier().precision;
 2441|    102|        else if (function.getType().getBasicType() != EbtBool)
  ------------------
  |  Branch (2441:18): [True: 102, False: 0]
  ------------------
 2442|    102|            resultPrecision = function.getType().getQualifier().precision == EpqNone ?
  ------------------
  |  Branch (2442:31): [True: 102, False: 0]
  ------------------
 2443|    102|                                        operationPrecision :
 2444|    102|                                        function.getType().getQualifier().precision;
 2445|  1.72k|    }
 2446|       |
 2447|       |    // Propagate precision through this node and its children. That algorithm stops
 2448|       |    // when a precision is found, so start by clearing this subroot precision
 2449|  1.84k|    opNode->getQualifier().precision = EpqNone;
 2450|  1.84k|    if (operationPrecision != EpqNone) {
  ------------------
  |  Branch (2450:9): [True: 1.84k, False: 0]
  ------------------
 2451|  1.84k|        opNode->propagatePrecision(operationPrecision);
 2452|  1.84k|        opNode->setOperationPrecision(operationPrecision);
 2453|  1.84k|    }
 2454|       |    // Now, set the result precision, which might not match
 2455|  1.84k|    opNode->getQualifier().precision = resultPrecision;
 2456|  1.84k|}
_ZN7glslang13TParseContext17handleReturnValueERKNS_10TSourceLocEPNS_12TIntermTypedE:
 2459|    234|{
 2460|    234|    storage16BitAssignmentCheck(loc, value->getType(), "return");
 2461|       |
 2462|    234|    functionReturnsValue = true;
 2463|    234|    TIntermBranch* branch = nullptr;
 2464|    234|    if (currentFunctionType->getBasicType() == EbtVoid) {
  ------------------
  |  Branch (2464:9): [True: 0, False: 234]
  ------------------
 2465|      0|        error(loc, "void function cannot return a value", "return", "");
 2466|      0|        branch = intermediate.addBranch(EOpReturn, loc);
 2467|    234|    } else if (*currentFunctionType != value->getType()) {
  ------------------
  |  Branch (2467:16): [True: 3, False: 231]
  ------------------
 2468|      3|        TIntermTyped* converted = intermediate.addConversion(EOpReturn, *currentFunctionType, value);
 2469|      3|        if (converted) {
  ------------------
  |  Branch (2469:13): [True: 3, False: 0]
  ------------------
 2470|      3|            if (*currentFunctionType != converted->getType())
  ------------------
  |  Branch (2470:17): [True: 3, False: 0]
  ------------------
 2471|      3|                error(loc, "cannot convert return value to function return type", "return", "");
 2472|      3|            if (version < 420)
  ------------------
  |  Branch (2472:17): [True: 0, False: 3]
  ------------------
 2473|      0|                warn(loc, "type conversion on return values was not explicitly allowed until version 420",
 2474|      0|                     "return", "");
 2475|      3|            branch = intermediate.addBranch(EOpReturn, converted, loc);
 2476|      3|        } else {
 2477|      0|            error(loc, "type does not match, or is not convertible to, the function's return type", "return", "");
 2478|      0|            branch = intermediate.addBranch(EOpReturn, value, loc);
 2479|      0|        }
 2480|    231|    } else {
 2481|    231|        if (value->getType().isTexture() || value->getType().isImage()) {
  ------------------
  |  Branch (2481:13): [True: 0, False: 231]
  |  Branch (2481:45): [True: 0, False: 231]
  ------------------
 2482|      0|            if (spvVersion.spv != 0)
  ------------------
  |  Branch (2482:17): [True: 0, False: 0]
  ------------------
 2483|      0|                error(loc, "sampler or image cannot be used as return type when generating SPIR-V", "return", "");
 2484|      0|            else if (!extensionTurnedOn(E_GL_ARB_bindless_texture))
  ------------------
  |  Branch (2484:22): [True: 0, False: 0]
  ------------------
 2485|      0|                error(loc, "sampler or image can be used as return type only when the extension GL_ARB_bindless_texture enabled", "return", "");
 2486|      0|        }
 2487|    231|        branch = intermediate.addBranch(EOpReturn, value, loc);
 2488|    231|    }
 2489|    234|    branch->updatePrecision(currentFunctionType->getQualifier().precision);
 2490|    234|    return branch;
 2491|    234|}
_ZN7glslang13TParseContext13checkLocationERKNS_10TSourceLocENS_9TOperatorE:
 2495|  1.84k|{
 2496|  1.84k|    switch (op) {
 2497|      0|    case EOpBarrier:
  ------------------
  |  Branch (2497:5): [True: 0, False: 1.84k]
  ------------------
 2498|      0|        if (language == EShLangTessControl) {
  ------------------
  |  Branch (2498:13): [True: 0, False: 0]
  ------------------
 2499|      0|            if (controlFlowNestingLevel > 0)
  ------------------
  |  Branch (2499:17): [True: 0, False: 0]
  ------------------
 2500|      0|                error(loc, "tessellation control barrier() cannot be placed within flow control", "", "");
 2501|      0|            if (! inMain)
  ------------------
  |  Branch (2501:17): [True: 0, False: 0]
  ------------------
 2502|      0|                error(loc, "tessellation control barrier() must be in main()", "", "");
 2503|      0|            else if (postEntryPointReturn)
  ------------------
  |  Branch (2503:22): [True: 0, False: 0]
  ------------------
 2504|      0|                error(loc, "tessellation control barrier() cannot be placed after a return from main()", "", "");
 2505|      0|        }
 2506|      0|        break;
 2507|      0|    case EOpBeginInvocationInterlock:
  ------------------
  |  Branch (2507:5): [True: 0, False: 1.84k]
  ------------------
 2508|      0|        if (language != EShLangFragment)
  ------------------
  |  Branch (2508:13): [True: 0, False: 0]
  ------------------
 2509|      0|            error(loc, "beginInvocationInterlockARB() must be in a fragment shader", "", "");
 2510|      0|        if (! inMain)
  ------------------
  |  Branch (2510:13): [True: 0, False: 0]
  ------------------
 2511|      0|            error(loc, "beginInvocationInterlockARB() must be in main()", "", "");
 2512|      0|        else if (postEntryPointReturn)
  ------------------
  |  Branch (2512:18): [True: 0, False: 0]
  ------------------
 2513|      0|            error(loc, "beginInvocationInterlockARB() cannot be placed after a return from main()", "", "");
 2514|      0|        if (controlFlowNestingLevel > 0)
  ------------------
  |  Branch (2514:13): [True: 0, False: 0]
  ------------------
 2515|      0|            error(loc, "beginInvocationInterlockARB() cannot be placed within flow control", "", "");
 2516|       |
 2517|      0|        if (beginInvocationInterlockCount > 0)
  ------------------
  |  Branch (2517:13): [True: 0, False: 0]
  ------------------
 2518|      0|            error(loc, "beginInvocationInterlockARB() must only be called once", "", "");
 2519|      0|        if (endInvocationInterlockCount > 0)
  ------------------
  |  Branch (2519:13): [True: 0, False: 0]
  ------------------
 2520|      0|            error(loc, "beginInvocationInterlockARB() must be called before endInvocationInterlockARB()", "", "");
 2521|       |
 2522|      0|        beginInvocationInterlockCount++;
 2523|       |
 2524|       |        // default to pixel_interlock_ordered
 2525|      0|        if (intermediate.getInterlockOrdering() == EioNone)
  ------------------
  |  Branch (2525:13): [True: 0, False: 0]
  ------------------
 2526|      0|            intermediate.setInterlockOrdering(EioPixelInterlockOrdered);
 2527|      0|        break;
 2528|      0|    case EOpEndInvocationInterlock:
  ------------------
  |  Branch (2528:5): [True: 0, False: 1.84k]
  ------------------
 2529|      0|        if (language != EShLangFragment)
  ------------------
  |  Branch (2529:13): [True: 0, False: 0]
  ------------------
 2530|      0|            error(loc, "endInvocationInterlockARB() must be in a fragment shader", "", "");
 2531|      0|        if (! inMain)
  ------------------
  |  Branch (2531:13): [True: 0, False: 0]
  ------------------
 2532|      0|            error(loc, "endInvocationInterlockARB() must be in main()", "", "");
 2533|      0|        else if (postEntryPointReturn)
  ------------------
  |  Branch (2533:18): [True: 0, False: 0]
  ------------------
 2534|      0|            error(loc, "endInvocationInterlockARB() cannot be placed after a return from main()", "", "");
 2535|      0|        if (controlFlowNestingLevel > 0)
  ------------------
  |  Branch (2535:13): [True: 0, False: 0]
  ------------------
 2536|      0|            error(loc, "endInvocationInterlockARB() cannot be placed within flow control", "", "");
 2537|       |
 2538|      0|        if (endInvocationInterlockCount > 0)
  ------------------
  |  Branch (2538:13): [True: 0, False: 0]
  ------------------
 2539|      0|            error(loc, "endInvocationInterlockARB() must only be called once", "", "");
 2540|      0|        if (beginInvocationInterlockCount == 0)
  ------------------
  |  Branch (2540:13): [True: 0, False: 0]
  ------------------
 2541|      0|            error(loc, "beginInvocationInterlockARB() must be called before endInvocationInterlockARB()", "", "");
 2542|       |
 2543|      0|        endInvocationInterlockCount++;
 2544|      0|        break;
 2545|  1.84k|    default:
  ------------------
  |  Branch (2545:5): [True: 1.84k, False: 0]
  ------------------
 2546|  1.84k|        break;
 2547|  1.84k|    }
 2548|  1.84k|}
_ZNK7glslang13TParseContext27addInputArgumentConversionsERKNS_9TFunctionERP11TIntermNode:
 2619|  1.85k|{
 2620|  1.85k|    TIntermAggregate* aggregate = arguments->getAsAggregate();
 2621|       |
 2622|       |    // Process each argument's conversion
 2623|  8.34k|    for (int i = 0; i < function.getParamCount(); ++i) {
  ------------------
  |  Branch (2623:21): [True: 6.48k, False: 1.85k]
  ------------------
 2624|       |        // At this early point there is a slight ambiguity between whether an aggregate 'arguments'
 2625|       |        // is the single argument itself or its children are the arguments.  Only one argument
 2626|       |        // means take 'arguments' itself as the one argument.
 2627|  6.48k|        TIntermTyped* arg = function.getParamCount() == 1 ? arguments->getAsTyped() : (aggregate ? aggregate->getSequence()[i]->getAsTyped() : arguments->getAsTyped());
  ------------------
  |  Branch (2627:29): [True: 123, False: 6.36k]
  |  Branch (2627:88): [True: 6.36k, False: 0]
  ------------------
 2628|  6.48k|        if (*function[i].type != arg->getType()) {
  ------------------
  |  Branch (2628:13): [True: 0, False: 6.48k]
  ------------------
 2629|      0|            if (function[i].type->getQualifier().isParamInput() &&
  ------------------
  |  Branch (2629:17): [True: 0, False: 0]
  ------------------
 2630|      0|               !function[i].type->isCoopMat() && !function[i].type->isTensorARM() &&
  ------------------
  |  Branch (2630:16): [True: 0, False: 0]
  |  Branch (2630:50): [True: 0, False: 0]
  ------------------
 2631|       |               // tensor layout/view type declarations don't do conversions, so we can't convert these parameters either
 2632|      0|               (function.getName() != "createTensorLayoutNV") &&
  ------------------
  |  Branch (2632:16): [True: 0, False: 0]
  ------------------
 2633|      0|               (function.getName() != "createTensorViewNV")) {
  ------------------
  |  Branch (2633:16): [True: 0, False: 0]
  ------------------
 2634|       |                // In-qualified arguments just need an extra node added above the argument to
 2635|       |                // convert to the correct type.
 2636|      0|                arg = intermediate.addConversion(EOpFunctionCall, *function[i].type, arg);
 2637|      0|                if (arg) {
  ------------------
  |  Branch (2637:21): [True: 0, False: 0]
  ------------------
 2638|      0|                    if (function.getParamCount() == 1)
  ------------------
  |  Branch (2638:25): [True: 0, False: 0]
  ------------------
 2639|      0|                        arguments = arg;
 2640|      0|                    else {
 2641|      0|                        if (aggregate)
  ------------------
  |  Branch (2641:29): [True: 0, False: 0]
  ------------------
 2642|      0|                            aggregate->getSequence()[i] = arg;
 2643|      0|                        else
 2644|      0|                            arguments = arg;
 2645|      0|                    }
 2646|      0|                }
 2647|      0|            }
 2648|      0|        }
 2649|  6.48k|    }
 2650|  1.85k|}
_ZNK7glslang13TParseContext28addOutputArgumentConversionsERKNS_9TFunctionERNS_16TIntermAggregateE:
 2660|  1.87k|{
 2661|  1.87k|    TIntermSequence& arguments = intermNode.getSequence();
 2662|       |
 2663|       |    // Will there be any output conversions?
 2664|  1.87k|    bool outputConversions = false;
 2665|  8.24k|    for (int i = 0; i < function.getParamCount(); ++i) {
  ------------------
  |  Branch (2665:21): [True: 6.36k, False: 1.87k]
  ------------------
 2666|  6.36k|        if (*function[i].type != arguments[i]->getAsTyped()->getType() && function[i].type->getQualifier().isParamOutput() &&
  ------------------
  |  Branch (2666:13): [True: 0, False: 6.36k]
  |  Branch (2666:75): [True: 0, False: 0]
  ------------------
 2667|      0|            !function[i].type->isCoopMat()) {
  ------------------
  |  Branch (2667:13): [True: 0, False: 0]
  ------------------
 2668|      0|            outputConversions = true;
 2669|      0|            break;
 2670|      0|        }
 2671|  6.36k|    }
 2672|       |
 2673|  1.87k|    if (! outputConversions)
  ------------------
  |  Branch (2673:9): [True: 1.87k, False: 0]
  ------------------
 2674|  1.87k|        return &intermNode;
 2675|       |
 2676|       |    // Setup for the new tree, if needed:
 2677|       |    //
 2678|       |    // Output conversions need a different tree topology.
 2679|       |    // Out-qualified arguments need a temporary of the correct type, with the call
 2680|       |    // followed by an assignment of the temporary to the original argument:
 2681|       |    //     void: function(arg, ...)  ->        (          function(tempArg, ...), arg = tempArg, ...)
 2682|       |    //     ret = function(arg, ...)  ->  ret = (tempRet = function(tempArg, ...), arg = tempArg, ..., tempRet)
 2683|       |    // Where the "tempArg" type needs no conversion as an argument, but will convert on assignment.
 2684|      0|    TIntermTyped* conversionTree = nullptr;
 2685|      0|    TVariable* tempRet = nullptr;
 2686|      0|    if (intermNode.getBasicType() != EbtVoid) {
  ------------------
  |  Branch (2686:9): [True: 0, False: 0]
  ------------------
 2687|       |        // do the "tempRet = function(...), " bit from above
 2688|      0|        tempRet = makeInternalVariable("tempReturn", intermNode.getType());
 2689|      0|        TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, intermNode.getLoc());
 2690|      0|        conversionTree = intermediate.addAssign(EOpAssign, tempRetNode, &intermNode, intermNode.getLoc());
 2691|      0|    } else
 2692|      0|        conversionTree = &intermNode;
 2693|       |
 2694|      0|    conversionTree = intermediate.makeAggregate(conversionTree);
 2695|       |
 2696|       |    // Process each argument's conversion
 2697|      0|    for (int i = 0; i < function.getParamCount(); ++i) {
  ------------------
  |  Branch (2697:21): [True: 0, False: 0]
  ------------------
 2698|      0|        if (*function[i].type != arguments[i]->getAsTyped()->getType()) {
  ------------------
  |  Branch (2698:13): [True: 0, False: 0]
  ------------------
 2699|      0|            if (function[i].type->getQualifier().isParamOutput()) {
  ------------------
  |  Branch (2699:17): [True: 0, False: 0]
  ------------------
 2700|       |                // Out-qualified arguments need to use the topology set up above.
 2701|       |                // do the " ...(tempArg, ...), arg = tempArg" bit from above
 2702|      0|                TType paramType;
 2703|      0|                paramType.shallowCopy(*function[i].type);
 2704|      0|                if (arguments[i]->getAsTyped()->getType().isParameterized() &&
  ------------------
  |  Branch (2704:21): [True: 0, False: 0]
  ------------------
 2705|      0|                    !paramType.isParameterized()) {
  ------------------
  |  Branch (2705:21): [True: 0, False: 0]
  ------------------
 2706|      0|                    paramType.shallowCopy(arguments[i]->getAsTyped()->getType());
 2707|      0|                    paramType.copyTypeParameters(*arguments[i]->getAsTyped()->getType().getTypeParameters());
 2708|      0|                }
 2709|      0|                TVariable* tempArg = makeInternalVariable("tempArg", paramType);
 2710|      0|                tempArg->getWritableType().getQualifier().makeTemporary();
 2711|      0|                TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, intermNode.getLoc());
 2712|      0|                TIntermTyped* tempAssign = intermediate.addAssign(EOpAssign, arguments[i]->getAsTyped(), tempArgNode, arguments[i]->getLoc());
 2713|      0|                conversionTree = intermediate.growAggregate(conversionTree, tempAssign, arguments[i]->getLoc());
 2714|       |                // replace the argument with another node for the same tempArg variable
 2715|      0|                arguments[i] = intermediate.addSymbol(*tempArg, intermNode.getLoc());
 2716|      0|            }
 2717|      0|        }
 2718|      0|    }
 2719|       |
 2720|       |    // Finalize the tree topology (see bigger comment above).
 2721|      0|    if (tempRet) {
  ------------------
  |  Branch (2721:9): [True: 0, False: 0]
  ------------------
 2722|       |        // do the "..., tempRet" bit from above
 2723|      0|        TIntermSymbol* tempRetNode = intermediate.addSymbol(*tempRet, intermNode.getLoc());
 2724|      0|        conversionTree = intermediate.growAggregate(conversionTree, tempRetNode, intermNode.getLoc());
 2725|      0|    }
 2726|      0|    conversionTree = intermediate.setAggregateOperator(conversionTree, EOpComma, intermNode.getType(), intermNode.getLoc());
 2727|       |
 2728|      0|    return conversionTree;
 2729|  1.87k|}
_ZN7glslang13TParseContext9addAssignERKNS_10TSourceLocENS_9TOperatorEPNS_12TIntermTypedES6_:
 2732|  1.62k|{
 2733|  1.62k|    if ((op == EOpAddAssign || op == EOpSubAssign) && left->isReference())
  ------------------
  |  Branch (2733:10): [True: 1.62k, False: 0]
  |  Branch (2733:32): [True: 0, False: 0]
  |  Branch (2733:55): [True: 0, False: 1.62k]
  ------------------
 2734|      0|        requireExtensions(loc, 1, &E_GL_EXT_buffer_reference2, "+= and -= on a buffer reference");
 2735|       |
 2736|  1.62k|    if (op == EOpAssign && left->getBasicType() == EbtSampler && right->getBasicType() == EbtSampler)
  ------------------
  |  Branch (2736:9): [True: 0, False: 1.62k]
  |  Branch (2736:28): [True: 0, False: 0]
  |  Branch (2736:66): [True: 0, False: 0]
  ------------------
 2737|      0|        requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "sampler assignment for bindless texture");
 2738|       |
 2739|  1.62k|    return intermediate.addAssign(op, left, right, loc);
 2740|  1.62k|}
_ZN7glslang13TParseContext23requireDerivativeLayoutERKNS_10TSourceLocEPKc:
 2950|    303|{
 2951|    303|    if (language != EShLangCompute && language != EShLangTask && language != EShLangMesh)
  ------------------
  |  Branch (2951:9): [True: 303, False: 0]
  |  Branch (2951:39): [True: 303, False: 0]
  |  Branch (2951:66): [True: 303, False: 0]
  ------------------
 2952|    303|        return;
 2953|       |
 2954|      0|    if (language == EShLangCompute) {
  ------------------
  |  Branch (2954:9): [True: 0, False: 0]
  ------------------
 2955|      0|        const char* const derivativeExts[] = { E_GL_NV_compute_shader_derivatives, E_GL_KHR_compute_shader_derivatives };
 2956|      0|        requireExtensions(loc, 2, derivativeExts, featureDesc);
 2957|      0|    } else {
 2958|      0|        requireExtensions(loc, 1, &E_GL_KHR_compute_shader_derivatives, featureDesc);
 2959|      0|    }
 2960|       |
 2961|      0|    if (extensionTurnedOn(E_GL_KHR_compute_shader_derivatives) &&
  ------------------
  |  Branch (2961:9): [True: 0, False: 0]
  ------------------
 2962|      0|        !intermediate.hasLayoutDerivativeModeNone())
  ------------------
  |  Branch (2962:9): [True: 0, False: 0]
  ------------------
 2963|      0|        error(loc, "requires a derivative_group_quads* or derivative_group_linear* layout qualifier", featureDesc, "");
 2964|      0|}
_ZN7glslang13TParseContext14builtInOpCheckERKNS_10TSourceLocERKNS_9TFunctionERNS_15TIntermOperatorE:
 2967|  1.84k|{
 2968|       |    // Set up convenience accessors to the argument(s).  There is almost always
 2969|       |    // multiple arguments for the cases below, but when there might be one,
 2970|       |    // check the unaryArg first.
 2971|  1.84k|    const TIntermSequence* argp = nullptr;   // confusing to use [] syntax on a pointer, so this is to help get a reference
 2972|  1.84k|    const TIntermTyped* unaryArg = nullptr;
 2973|  1.84k|    const TIntermTyped* arg0 = nullptr;
 2974|  1.84k|    if (callNode.getAsAggregate()) {
  ------------------
  |  Branch (2974:9): [True: 1.72k, False: 120]
  ------------------
 2975|  1.72k|        argp = &callNode.getAsAggregate()->getSequence();
 2976|  1.72k|        if (argp->size() > 0)
  ------------------
  |  Branch (2976:13): [True: 1.72k, False: 0]
  ------------------
 2977|  1.72k|            arg0 = (*argp)[0]->getAsTyped();
 2978|  1.72k|    } else {
 2979|    120|        assert(callNode.getAsUnaryNode());
 2980|    120|        unaryArg = callNode.getAsUnaryNode()->getOperand();
 2981|    120|        arg0 = unaryArg;
 2982|    120|    }
 2983|       |
 2984|  1.84k|    TString featureString;
 2985|  1.84k|    const char* feature = nullptr;
 2986|       |
 2987|  1.84k|    auto checkConstantArgWithLocation = [&](int argIndex, const char* argDescription,
 2988|  1.84k|                                                       const char* errMsg, int ioRTLocationSet) {
 2989|       |        //ioRTLocationSet refers to grouping of locations of RT input/outputs as defined in TIntermediate::usedIoRT
 2990|  1.84k|        if (!(*argp)[argIndex]->getAsConstantUnion()) {
 2991|  1.84k|            error(loc, "argument must be compile-time constant", argDescription, argIndex == 10 ? "a" : "");
 2992|  1.84k|        } else if (ioRTLocationSet >= 0) {
 2993|  1.84k|            unsigned int location = (*argp)[argIndex]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst();
 2994|  1.84k|            if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(ioRTLocationSet, location) < 0)
 2995|  1.84k|                error(loc, "with layout(location =", errMsg, "%d)", location);
 2996|  1.84k|        }
 2997|  1.84k|    };
 2998|       |
 2999|  1.84k|    switch (callNode.getOp()) {
 3000|      0|    case EOpDPdx:
  ------------------
  |  Branch (3000:5): [True: 0, False: 1.84k]
  ------------------
 3001|      0|    case EOpDPdxFine:
  ------------------
  |  Branch (3001:5): [True: 0, False: 1.84k]
  ------------------
 3002|      0|    case EOpDPdxCoarse:
  ------------------
  |  Branch (3002:5): [True: 0, False: 1.84k]
  ------------------
 3003|      0|    case EOpDPdy:
  ------------------
  |  Branch (3003:5): [True: 0, False: 1.84k]
  ------------------
 3004|      0|    case EOpDPdyFine:
  ------------------
  |  Branch (3004:5): [True: 0, False: 1.84k]
  ------------------
 3005|      0|    case EOpDPdyCoarse:
  ------------------
  |  Branch (3005:5): [True: 0, False: 1.84k]
  ------------------
 3006|      0|    case EOpFwidth:
  ------------------
  |  Branch (3006:5): [True: 0, False: 1.84k]
  ------------------
 3007|      0|    case EOpFwidthFine:
  ------------------
  |  Branch (3007:5): [True: 0, False: 1.84k]
  ------------------
 3008|      0|    case EOpFwidthCoarse:
  ------------------
  |  Branch (3008:5): [True: 0, False: 1.84k]
  ------------------
 3009|      0|        requireDerivativeLayout(loc, fnCandidate.getName().c_str());
 3010|      0|        break;
 3011|       |
 3012|     60|    case EOpTextureGather:
  ------------------
  |  Branch (3012:5): [True: 60, False: 1.78k]
  ------------------
 3013|     96|    case EOpTextureGatherOffset:
  ------------------
  |  Branch (3013:5): [True: 36, False: 1.81k]
  ------------------
 3014|    132|    case EOpTextureGatherOffsets:
  ------------------
  |  Branch (3014:5): [True: 36, False: 1.81k]
  ------------------
 3015|    132|    {
 3016|       |        // Figure out which variants are allowed by what extensions,
 3017|       |        // and what arguments must be constant for which situations.
 3018|       |
 3019|    132|        featureString = fnCandidate.getName();
 3020|    132|        featureString += "(...)";
 3021|    132|        feature = featureString.c_str();
 3022|    132|        profileRequires(loc, EEsProfile, 310, nullptr, feature);
 3023|    132|        int compArg = -1;  // track which argument, if any, is the constant component argument
 3024|    132|        const int numTexGatherExts = 3;
 3025|    132|        const char* texGatherExts[numTexGatherExts] = { E_GL_ARB_texture_gather,
 3026|    132|                                                        E_GL_ARB_gpu_shader5,
 3027|    132|                                                        E_GL_NV_gpu_shader5};
 3028|    132|        switch (callNode.getOp()) {
 3029|     60|        case EOpTextureGather:
  ------------------
  |  Branch (3029:9): [True: 60, False: 72]
  ------------------
 3030|       |            // More than two arguments needs gpu_shader5, and rectangular or shadow needs gpu_shader5,
 3031|       |            // otherwise, need GL_ARB_texture_gather.
 3032|     60|            if (fnCandidate.getParamCount() > 2 || fnCandidate[0].type->getSampler().dim == EsdRect || fnCandidate[0].type->getSampler().shadow) {
  ------------------
  |  Branch (3032:17): [True: 60, False: 0]
  |  Branch (3032:52): [True: 0, False: 0]
  |  Branch (3032:104): [True: 0, False: 0]
  ------------------
 3033|     60|                profileRequires(loc, ~EEsProfile, 400, Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, feature);
 3034|     60|                if (! fnCandidate[0].type->getSampler().shadow)
  ------------------
  |  Branch (3034:21): [True: 30, False: 30]
  ------------------
 3035|     30|                    compArg = 2;
 3036|     60|            } else
 3037|      0|                profileRequires(loc, ~EEsProfile, 400, numTexGatherExts, texGatherExts, feature);
 3038|     60|            break;
 3039|     36|        case EOpTextureGatherOffset:
  ------------------
  |  Branch (3039:9): [True: 36, False: 96]
  ------------------
 3040|       |            // GL_ARB_texture_gather is good enough for 2D non-shadow textures with no component argument
 3041|     36|            if (fnCandidate[0].type->getSampler().dim == Esd2D && ! fnCandidate[0].type->getSampler().shadow && fnCandidate.getParamCount() == 3)
  ------------------
  |  Branch (3041:17): [True: 24, False: 12]
  |  Branch (3041:67): [True: 12, False: 12]
  |  Branch (3041:113): [True: 0, False: 12]
  ------------------
 3042|      0|                profileRequires(loc, ~EEsProfile, 400, numTexGatherExts, texGatherExts, feature);
 3043|     36|            else
 3044|     36|                profileRequires(loc, ~EEsProfile, 400, Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, feature);
 3045|     36|            if (! (*argp)[fnCandidate[0].type->getSampler().shadow ? 3 : 2]->getAsConstantUnion())
  ------------------
  |  Branch (3045:17): [True: 0, False: 36]
  |  Branch (3045:27): [True: 18, False: 18]
  ------------------
 3046|      0|                profileRequires(loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5,
 3047|      0|                                "non-constant offset argument");
 3048|     36|            if (! fnCandidate[0].type->getSampler().shadow)
  ------------------
  |  Branch (3048:17): [True: 18, False: 18]
  ------------------
 3049|     18|                compArg = 3;
 3050|     36|            break;
 3051|     36|        case EOpTextureGatherOffsets:
  ------------------
  |  Branch (3051:9): [True: 36, False: 96]
  ------------------
 3052|     36|            profileRequires(loc, ~EEsProfile, 400, Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, feature);
 3053|     36|            if (! fnCandidate[0].type->getSampler().shadow)
  ------------------
  |  Branch (3053:17): [True: 18, False: 18]
  ------------------
 3054|     18|                compArg = 3;
 3055|       |            // check for constant offsets
 3056|     36|            if (! (*argp)[fnCandidate[0].type->getSampler().shadow ? 3 : 2]->getAsConstantUnion()
  ------------------
  |  Branch (3056:17): [True: 0, False: 36]
  |  Branch (3056:27): [True: 18, False: 18]
  ------------------
 3057|       |                // NV_gpu_shader5 relaxes this limitation and allows for non-constant offsets
 3058|      0|                && !extensionTurnedOn(E_GL_NV_gpu_shader5))
  ------------------
  |  Branch (3058:20): [True: 0, False: 0]
  ------------------
 3059|      0|                error(loc, "must be a compile-time constant:", feature, "offsets argument");
 3060|     36|            break;
 3061|      0|        default:
  ------------------
  |  Branch (3061:9): [True: 0, False: 132]
  ------------------
 3062|      0|            break;
 3063|    132|        }
 3064|       |
 3065|    132|        if (compArg > 0 && compArg < fnCandidate.getParamCount()) {
  ------------------
  |  Branch (3065:13): [True: 66, False: 66]
  |  Branch (3065:28): [True: 66, False: 0]
  ------------------
 3066|     66|            if ((*argp)[compArg]->getAsConstantUnion()) {
  ------------------
  |  Branch (3066:17): [True: 66, False: 0]
  ------------------
 3067|     66|                int value = (*argp)[compArg]->getAsConstantUnion()->getConstArray()[0].getIConst();
 3068|     66|                if (value < 0 || value > 3)
  ------------------
  |  Branch (3068:21): [True: 0, False: 66]
  |  Branch (3068:34): [True: 0, False: 66]
  ------------------
 3069|      0|                    error(loc, "must be 0, 1, 2, or 3:", feature, "component argument");
 3070|     66|            } else
 3071|      0|                error(loc, "must be a compile-time constant:", feature, "component argument");
 3072|     66|        }
 3073|       |
 3074|    132|        bool bias = false;
 3075|    132|        if (callNode.getOp() == EOpTextureGather)
  ------------------
  |  Branch (3075:13): [True: 60, False: 72]
  ------------------
 3076|     60|            bias = fnCandidate.getParamCount() > 3;
 3077|     72|        else if (callNode.getOp() == EOpTextureGatherOffset ||
  ------------------
  |  Branch (3077:18): [True: 36, False: 36]
  ------------------
 3078|     36|                 callNode.getOp() == EOpTextureGatherOffsets)
  ------------------
  |  Branch (3078:18): [True: 36, False: 0]
  ------------------
 3079|     72|            bias = fnCandidate.getParamCount() > 4;
 3080|       |
 3081|    132|        if (bias) {
  ------------------
  |  Branch (3081:13): [True: 0, False: 132]
  ------------------
 3082|      0|            featureString = fnCandidate.getName();
 3083|      0|            featureString += "with bias argument";
 3084|      0|            feature = featureString.c_str();
 3085|      0|            profileRequires(loc, ~EEsProfile, 450, nullptr, feature);
 3086|      0|            requireExtensions(loc, 1, &E_GL_AMD_texture_gather_bias_lod, feature);
 3087|      0|        }
 3088|    132|        break;
 3089|    132|    }
 3090|       |
 3091|    135|    case EOpTexture:
  ------------------
  |  Branch (3091:5): [True: 135, False: 1.71k]
  ------------------
 3092|    195|    case EOpTextureLod:
  ------------------
  |  Branch (3092:5): [True: 60, False: 1.78k]
  ------------------
 3093|    195|    {
 3094|    195|        if (callNode.getOp() == EOpTexture && fnCandidate.getParamCount() > 2)
  ------------------
  |  Branch (3094:13): [True: 135, False: 60]
  |  Branch (3094:47): [True: 9, False: 126]
  ------------------
 3095|      9|            requireDerivativeLayout(loc, (fnCandidate.getName() + " with bias argument").c_str());
 3096|       |
 3097|    195|        if ((fnCandidate.getParamCount() > 2) && ((*argp)[1]->getAsTyped()->getType().getBasicType() == EbtFloat) &&
  ------------------
  |  Branch (3097:13): [True: 69, False: 126]
  |  Branch (3097:50): [True: 69, False: 0]
  ------------------
 3098|     69|            ((*argp)[1]->getAsTyped()->getType().getVectorSize() == 4) && fnCandidate[0].type->getSampler().shadow) {
  ------------------
  |  Branch (3098:13): [True: 15, False: 54]
  |  Branch (3098:75): [True: 9, False: 6]
  ------------------
 3099|      9|            featureString = fnCandidate.getName();
 3100|      9|            if (callNode.getOp() == EOpTexture)
  ------------------
  |  Branch (3100:17): [True: 9, False: 0]
  ------------------
 3101|      9|                featureString += "(..., float bias)";
 3102|      0|            else
 3103|      0|                featureString += "(..., float lod)";
 3104|      9|            feature = featureString.c_str();
 3105|       |
 3106|      9|            if ((fnCandidate[0].type->getSampler().dim == Esd2D && fnCandidate[0].type->getSampler().arrayed) || //2D Array Shadow
  ------------------
  |  Branch (3106:18): [True: 0, False: 9]
  |  Branch (3106:68): [True: 0, False: 0]
  ------------------
 3107|      9|                (fnCandidate[0].type->getSampler().dim == EsdCube && fnCandidate[0].type->getSampler().arrayed && fnCandidate.getParamCount() > 3) || // Cube Array Shadow
  ------------------
  |  Branch (3107:18): [True: 9, False: 0]
  |  Branch (3107:70): [True: 9, False: 0]
  |  Branch (3107:115): [True: 0, False: 9]
  ------------------
 3108|      9|                (fnCandidate[0].type->getSampler().dim == EsdCube && callNode.getOp() == EOpTextureLod)) { // Cube Shadow
  ------------------
  |  Branch (3108:18): [True: 9, False: 0]
  |  Branch (3108:70): [True: 0, False: 9]
  ------------------
 3109|      0|                requireExtensions(loc, 1, &E_GL_EXT_texture_shadow_lod, feature);
 3110|      0|                if (isEsProfile()) {
  ------------------
  |  Branch (3110:21): [True: 0, False: 0]
  ------------------
 3111|      0|                    if (version < 320 &&
  ------------------
  |  Branch (3111:25): [True: 0, False: 0]
  ------------------
 3112|      0|                        !extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
  ------------------
  |  Branch (3112:25): [True: 0, False: 0]
  ------------------
 3113|      0|                        error(loc, "GL_EXT_texture_shadow_lod not supported for this ES version", feature, "");
 3114|      0|                    else
 3115|      0|                        profileRequires(loc, EEsProfile, 320, nullptr, feature);
 3116|      0|                } else { // Desktop
 3117|      0|                    profileRequires(loc, ~EEsProfile, 130, nullptr, feature);
 3118|      0|                }
 3119|      0|            }
 3120|      9|        }
 3121|    195|        break;
 3122|    135|    }
 3123|       |
 3124|     60|    case EOpTextureProj:
  ------------------
  |  Branch (3124:5): [True: 60, False: 1.78k]
  ------------------
 3125|    126|    case EOpSparseTexture:
  ------------------
  |  Branch (3125:5): [True: 66, False: 1.78k]
  ------------------
 3126|    126|    case EOpTextureQueryLod:
  ------------------
  |  Branch (3126:5): [True: 0, False: 1.84k]
  ------------------
 3127|    126|        requireDerivativeLayout(loc, fnCandidate.getName().c_str());
 3128|    126|        break;
 3129|       |
 3130|     30|    case EOpSparseTextureGather:
  ------------------
  |  Branch (3130:5): [True: 30, False: 1.81k]
  ------------------
 3131|     48|    case EOpSparseTextureGatherOffset:
  ------------------
  |  Branch (3131:5): [True: 18, False: 1.83k]
  ------------------
 3132|     66|    case EOpSparseTextureGatherOffsets:
  ------------------
  |  Branch (3132:5): [True: 18, False: 1.83k]
  ------------------
 3133|     66|    {
 3134|     66|        bool bias = false;
 3135|     66|        if (callNode.getOp() == EOpSparseTextureGather)
  ------------------
  |  Branch (3135:13): [True: 30, False: 36]
  ------------------
 3136|     30|            bias = fnCandidate.getParamCount() > 4;
 3137|     36|        else if (callNode.getOp() == EOpSparseTextureGatherOffset ||
  ------------------
  |  Branch (3137:18): [True: 18, False: 18]
  ------------------
 3138|     18|                 callNode.getOp() == EOpSparseTextureGatherOffsets)
  ------------------
  |  Branch (3138:18): [True: 18, False: 0]
  ------------------
 3139|     36|            bias = fnCandidate.getParamCount() > 5;
 3140|       |
 3141|     66|        if (bias) {
  ------------------
  |  Branch (3141:13): [True: 0, False: 66]
  ------------------
 3142|      0|            featureString = fnCandidate.getName();
 3143|      0|            featureString += "with bias argument";
 3144|      0|            feature = featureString.c_str();
 3145|      0|            profileRequires(loc, ~EEsProfile, 450, nullptr, feature);
 3146|      0|            requireExtensions(loc, 1, &E_GL_AMD_texture_gather_bias_lod, feature);
 3147|      0|        }
 3148|       |        // As per GL_ARB_sparse_texture2 extension "Offsets" parameter must be constant integral expression
 3149|       |        // for sparseTextureGatherOffsetsARB just as textureGatherOffsets
 3150|     66|        if (callNode.getOp() == EOpSparseTextureGatherOffsets) {
  ------------------
  |  Branch (3150:13): [True: 18, False: 48]
  ------------------
 3151|     18|            int offsetsArg = arg0->getType().getSampler().shadow ? 3 : 2;
  ------------------
  |  Branch (3151:30): [True: 9, False: 9]
  ------------------
 3152|     18|            if (!(*argp)[offsetsArg]->getAsConstantUnion())
  ------------------
  |  Branch (3152:17): [True: 0, False: 18]
  ------------------
 3153|      0|                error(loc, "argument must be compile-time constant", "offsets", "");
 3154|     18|        }
 3155|     66|        break;
 3156|     48|    }
 3157|       |
 3158|     12|    case EOpSparseTextureGatherLod:
  ------------------
  |  Branch (3158:5): [True: 12, False: 1.83k]
  ------------------
 3159|     18|    case EOpSparseTextureGatherLodOffset:
  ------------------
  |  Branch (3159:5): [True: 6, False: 1.84k]
  ------------------
 3160|     24|    case EOpSparseTextureGatherLodOffsets:
  ------------------
  |  Branch (3160:5): [True: 6, False: 1.84k]
  ------------------
 3161|     24|    {
 3162|     24|        requireExtensions(loc, 1, &E_GL_ARB_sparse_texture2, fnCandidate.getName().c_str());
 3163|     24|        break;
 3164|     18|    }
 3165|       |
 3166|      0|    case EOpSwizzleInvocations:
  ------------------
  |  Branch (3166:5): [True: 0, False: 1.84k]
  ------------------
 3167|      0|    {
 3168|      0|        if (! (*argp)[1]->getAsConstantUnion())
  ------------------
  |  Branch (3168:13): [True: 0, False: 0]
  ------------------
 3169|      0|            error(loc, "argument must be compile-time constant", "offset", "");
 3170|      0|        else {
 3171|      0|            unsigned offset[4] = {};
 3172|      0|            offset[0] = (*argp)[1]->getAsConstantUnion()->getConstArray()[0].getUConst();
 3173|      0|            offset[1] = (*argp)[1]->getAsConstantUnion()->getConstArray()[1].getUConst();
 3174|      0|            offset[2] = (*argp)[1]->getAsConstantUnion()->getConstArray()[2].getUConst();
 3175|      0|            offset[3] = (*argp)[1]->getAsConstantUnion()->getConstArray()[3].getUConst();
 3176|      0|            if (offset[0] > 3 || offset[1] > 3 || offset[2] > 3 || offset[3] > 3)
  ------------------
  |  Branch (3176:17): [True: 0, False: 0]
  |  Branch (3176:34): [True: 0, False: 0]
  |  Branch (3176:51): [True: 0, False: 0]
  |  Branch (3176:68): [True: 0, False: 0]
  ------------------
 3177|      0|                error(loc, "components must be in the range [0, 3]", "offset", "");
 3178|      0|        }
 3179|       |
 3180|      0|        break;
 3181|     18|    }
 3182|       |
 3183|      0|    case EOpSwizzleInvocationsMasked:
  ------------------
  |  Branch (3183:5): [True: 0, False: 1.84k]
  ------------------
 3184|      0|    {
 3185|      0|        if (! (*argp)[1]->getAsConstantUnion())
  ------------------
  |  Branch (3185:13): [True: 0, False: 0]
  ------------------
 3186|      0|            error(loc, "argument must be compile-time constant", "mask", "");
 3187|      0|        else {
 3188|      0|            unsigned mask[3] = {};
 3189|      0|            mask[0] = (*argp)[1]->getAsConstantUnion()->getConstArray()[0].getUConst();
 3190|      0|            mask[1] = (*argp)[1]->getAsConstantUnion()->getConstArray()[1].getUConst();
 3191|      0|            mask[2] = (*argp)[1]->getAsConstantUnion()->getConstArray()[2].getUConst();
 3192|      0|            if (mask[0] > 31 || mask[1] > 31 || mask[2] > 31)
  ------------------
  |  Branch (3192:17): [True: 0, False: 0]
  |  Branch (3192:33): [True: 0, False: 0]
  |  Branch (3192:49): [True: 0, False: 0]
  ------------------
 3193|      0|                error(loc, "components must be in the range [0, 31]", "mask", "");
 3194|      0|        }
 3195|       |
 3196|      0|        break;
 3197|     18|    }
 3198|       |
 3199|     66|    case EOpTextureOffset:
  ------------------
  |  Branch (3199:5): [True: 66, False: 1.78k]
  ------------------
 3200|    102|    case EOpTextureFetchOffset:
  ------------------
  |  Branch (3200:5): [True: 36, False: 1.81k]
  ------------------
 3201|    162|    case EOpTextureProjOffset:
  ------------------
  |  Branch (3201:5): [True: 60, False: 1.78k]
  ------------------
 3202|    210|    case EOpTextureLodOffset:
  ------------------
  |  Branch (3202:5): [True: 48, False: 1.80k]
  ------------------
 3203|    252|    case EOpTextureProjLodOffset:
  ------------------
  |  Branch (3203:5): [True: 42, False: 1.80k]
  ------------------
 3204|    318|    case EOpTextureGradOffset:
  ------------------
  |  Branch (3204:5): [True: 66, False: 1.78k]
  ------------------
 3205|    378|    case EOpTextureProjGradOffset:
  ------------------
  |  Branch (3205:5): [True: 60, False: 1.78k]
  ------------------
 3206|    420|    case EOpSparseTextureOffset:
  ------------------
  |  Branch (3206:5): [True: 42, False: 1.80k]
  ------------------
 3207|    432|    case EOpSparseTextureFetchOffset:
  ------------------
  |  Branch (3207:5): [True: 12, False: 1.83k]
  ------------------
 3208|    456|    case EOpSparseTextureLodOffset:
  ------------------
  |  Branch (3208:5): [True: 24, False: 1.82k]
  ------------------
 3209|    489|    case EOpSparseTextureGradOffset:
  ------------------
  |  Branch (3209:5): [True: 33, False: 1.81k]
  ------------------
 3210|    489|    {
 3211|    489|        if (callNode.getOp() == EOpTextureOffset || callNode.getOp() == EOpTextureProjOffset ||
  ------------------
  |  Branch (3211:13): [True: 66, False: 423]
  |  Branch (3211:53): [True: 60, False: 363]
  ------------------
 3212|    363|            callNode.getOp() == EOpSparseTextureOffset)
  ------------------
  |  Branch (3212:13): [True: 42, False: 321]
  ------------------
 3213|    168|            requireDerivativeLayout(loc, fnCandidate.getName().c_str());
 3214|       |
 3215|       |        // Handle texture-offset limits checking
 3216|       |        // Pick which argument has to hold constant offsets
 3217|    489|        int arg = -1;
 3218|    489|        switch (callNode.getOp()) {
 3219|     42|        case EOpSparseTextureOffset:
  ------------------
  |  Branch (3219:9): [True: 42, False: 447]
  ------------------
 3220|    108|        case EOpTextureOffset:
  ------------------
  |  Branch (3220:9): [True: 66, False: 423]
  ------------------
 3221|    168|        case EOpTextureProjOffset:
  ------------------
  |  Branch (3221:9): [True: 60, False: 429]
  ------------------
 3222|    168|            arg = 2;
 3223|    168|            break;
 3224|     24|        case EOpSparseTextureLodOffset:
  ------------------
  |  Branch (3224:9): [True: 24, False: 465]
  ------------------
 3225|     72|        case EOpTextureLodOffset:
  ------------------
  |  Branch (3225:9): [True: 48, False: 441]
  ------------------
 3226|    114|        case EOpTextureProjLodOffset:
  ------------------
  |  Branch (3226:9): [True: 42, False: 447]
  ------------------
 3227|    114|            arg = 3;
 3228|    114|            break;
 3229|     33|        case EOpSparseTextureGradOffset:
  ------------------
  |  Branch (3229:9): [True: 33, False: 456]
  ------------------
 3230|     99|        case EOpTextureGradOffset:
  ------------------
  |  Branch (3230:9): [True: 66, False: 423]
  ------------------
 3231|    159|        case EOpTextureProjGradOffset:
  ------------------
  |  Branch (3231:9): [True: 60, False: 429]
  ------------------
 3232|    159|            arg = 4;
 3233|    159|            break;
 3234|     12|        case EOpSparseTextureFetchOffset:
  ------------------
  |  Branch (3234:9): [True: 12, False: 477]
  ------------------
 3235|     48|        case EOpTextureFetchOffset:
  ------------------
  |  Branch (3235:9): [True: 36, False: 453]
  ------------------
 3236|     48|            arg = (arg0->getType().getSampler().isRect()) ? 2 : 3;
  ------------------
  |  Branch (3236:19): [True: 9, False: 39]
  ------------------
 3237|     48|            break;
 3238|      0|        default:
  ------------------
  |  Branch (3238:9): [True: 0, False: 489]
  ------------------
 3239|      0|            assert(0);
 3240|      0|            break;
 3241|    489|        }
 3242|       |
 3243|    489|        if (arg > 0) {
  ------------------
  |  Branch (3243:13): [True: 489, False: 0]
  ------------------
 3244|       |
 3245|    489|            bool f16ShadowCompare = (*argp)[1]->getAsTyped()->getBasicType() == EbtFloat16 &&
  ------------------
  |  Branch (3245:37): [True: 0, False: 489]
  ------------------
 3246|      0|                                    arg0->getType().getSampler().shadow;
  ------------------
  |  Branch (3246:37): [True: 0, False: 0]
  ------------------
 3247|    489|            if (f16ShadowCompare)
  ------------------
  |  Branch (3247:17): [True: 0, False: 489]
  ------------------
 3248|      0|                ++arg;
 3249|       |            // Allow non-constant offsets for certain texture ops
 3250|    489|            bool variableOffsetSupport = extensionTurnedOn(E_GL_NV_gpu_shader5) && 
  ------------------
  |  Branch (3250:42): [True: 0, False: 489]
  ------------------
 3251|      0|                (callNode.getOp() == EOpTextureOffset || 
  ------------------
  |  Branch (3251:18): [True: 0, False: 0]
  ------------------
 3252|      0|                 callNode.getOp() == EOpTextureFetchOffset ||
  ------------------
  |  Branch (3252:18): [True: 0, False: 0]
  ------------------
 3253|      0|                 callNode.getOp() == EOpTextureProjOffset || 
  ------------------
  |  Branch (3253:18): [True: 0, False: 0]
  ------------------
 3254|      0|                 callNode.getOp() == EOpTextureLodOffset ||
  ------------------
  |  Branch (3254:18): [True: 0, False: 0]
  ------------------
 3255|      0|                 callNode.getOp() == EOpTextureProjLodOffset);
  ------------------
  |  Branch (3255:18): [True: 0, False: 0]
  ------------------
 3256|    489|            if (! (*argp)[arg]->getAsTyped()->getQualifier().isConstant()) {
  ------------------
  |  Branch (3256:17): [True: 0, False: 489]
  ------------------
 3257|      0|				if (!extensionTurnedOn(E_GL_EXT_texture_offset_non_const) && !variableOffsetSupport)
  ------------------
  |  Branch (3257:9): [True: 0, False: 0]
  |  Branch (3257:66): [True: 0, False: 0]
  ------------------
 3258|      0|                    error(loc, "argument must be compile-time constant", "texel offset", "");
 3259|      0|            }
 3260|    489|            else if ((*argp)[arg]->getAsConstantUnion()) {
  ------------------
  |  Branch (3260:22): [True: 489, False: 0]
  ------------------
 3261|    489|                const TType& type = (*argp)[arg]->getAsTyped()->getType();
 3262|  1.39k|                for (int c = 0; c < type.getVectorSize(); ++c) {
  ------------------
  |  Branch (3262:33): [True: 903, False: 489]
  ------------------
 3263|    903|                    int offset = (*argp)[arg]->getAsConstantUnion()->getConstArray()[c].getIConst();
 3264|    903|                    if (offset > resources.maxProgramTexelOffset || offset < resources.minProgramTexelOffset)
  ------------------
  |  Branch (3264:25): [True: 0, False: 903]
  |  Branch (3264:69): [True: 0, False: 903]
  ------------------
 3265|      0|                        error(loc, "value is out of range:", "texel offset",
 3266|      0|                              "[gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]");
 3267|    903|                }
 3268|    489|            }
 3269|       |
 3270|       |            // This check does not apply to sparse because
 3271|       |            // GL_ARB_sparse_texture2 always includes this function.
 3272|    489|            if (callNode.getOp() == EOpTextureOffset) {
  ------------------
  |  Branch (3272:17): [True: 66, False: 423]
  ------------------
 3273|     66|                TSampler s = arg0->getType().getSampler();
 3274|     66|                if (s.is2D() && s.isArrayed() && s.isShadow()) {
  ------------------
  |  Branch (3274:21): [True: 24, False: 42]
  |  Branch (3274:33): [True: 12, False: 12]
  |  Branch (3274:50): [True: 6, False: 6]
  ------------------
 3275|      6|                    if (
 3276|      6|                        ((*argp)[1]->getAsTyped()->getType().getBasicType() == EbtFloat) &&
  ------------------
  |  Branch (3276:25): [True: 6, False: 0]
  ------------------
 3277|      6|                        ((*argp)[1]->getAsTyped()->getType().getVectorSize() == 4) &&
  ------------------
  |  Branch (3277:25): [True: 6, False: 0]
  ------------------
 3278|      6|                        (fnCandidate.getParamCount() == 4)) {
  ------------------
  |  Branch (3278:25): [True: 0, False: 6]
  ------------------
 3279|      0|                        featureString = fnCandidate.getName() + " for sampler2DArrayShadow";
 3280|      0|                        feature = featureString.c_str();
 3281|      0|                        requireExtensions(loc, 1, &E_GL_EXT_texture_shadow_lod, feature);
 3282|      0|                        profileRequires(loc, EEsProfile, 300, nullptr, feature);
 3283|      0|                        profileRequires(loc, ~EEsProfile, 130, nullptr, feature);
 3284|      0|                    }
 3285|      6|                    else if (isEsProfile())
  ------------------
  |  Branch (3285:30): [True: 0, False: 6]
  ------------------
 3286|      0|                        error(loc, "TextureOffset does not support sampler2DArrayShadow : ", "sampler", "ES Profile");
 3287|      6|                    else if (version <= 420)
  ------------------
  |  Branch (3287:30): [True: 0, False: 6]
  ------------------
 3288|      0|                        error(loc, "TextureOffset does not support sampler2DArrayShadow : ", "sampler", "version <= 420");
 3289|      6|                }
 3290|     66|            }
 3291|       |
 3292|       |            // This check does not apply to sparse because
 3293|       |            // GL_ARB_sparse_texture2 does not define sparseTextureLodOffsetARB
 3294|       |            // with a sampler2DArrayShadow.
 3295|    489|            if (callNode.getOp() == EOpTextureLodOffset) {
  ------------------
  |  Branch (3295:17): [True: 48, False: 441]
  ------------------
 3296|     48|                TSampler s = arg0->getType().getSampler();
 3297|     48|                if (s.is2D() && s.isArrayed() && s.isShadow() &&
  ------------------
  |  Branch (3297:21): [True: 18, False: 30]
  |  Branch (3297:33): [True: 6, False: 12]
  |  Branch (3297:50): [True: 0, False: 6]
  ------------------
 3298|      0|                    ((*argp)[1]->getAsTyped()->getType().getBasicType() == EbtFloat) &&
  ------------------
  |  Branch (3298:21): [True: 0, False: 0]
  ------------------
 3299|      0|                    ((*argp)[1]->getAsTyped()->getType().getVectorSize() == 4) &&
  ------------------
  |  Branch (3299:21): [True: 0, False: 0]
  ------------------
 3300|      0|                    (fnCandidate.getParamCount() == 4)) {
  ------------------
  |  Branch (3300:21): [True: 0, False: 0]
  ------------------
 3301|      0|                        featureString = fnCandidate.getName() + " for sampler2DArrayShadow";
 3302|      0|                        feature = featureString.c_str();
 3303|      0|                        profileRequires(loc, EEsProfile, 300, nullptr, feature);
 3304|      0|                        profileRequires(loc, ~EEsProfile, 130, nullptr, feature);
 3305|      0|                        requireExtensions(loc, 1, &E_GL_EXT_texture_shadow_lod, feature);
 3306|      0|                }
 3307|     48|            }
 3308|    489|        }
 3309|       |
 3310|    489|        break;
 3311|    489|    }
 3312|       |
 3313|       |
 3314|      0|    case EOpTraceNV:
  ------------------
  |  Branch (3314:5): [True: 0, False: 1.84k]
  ------------------
 3315|      0|        checkConstantArgWithLocation(10, "payload number", nullptr, -1);
 3316|      0|        break;
 3317|      0|    case EOpTraceRayMotionNV:
  ------------------
  |  Branch (3317:5): [True: 0, False: 1.84k]
  ------------------
 3318|      0|        checkConstantArgWithLocation(11, "payload number", nullptr, -1);
 3319|      0|        break;
 3320|      0|    case EOpTraceKHR:
  ------------------
  |  Branch (3320:5): [True: 0, False: 1.84k]
  ------------------
 3321|      0|        checkConstantArgWithLocation(10, "payload number", "no rayPayloadEXT/rayPayloadInEXT declared", 0);
 3322|      0|        break;
 3323|      0|    case EOpExecuteCallableNV:
  ------------------
  |  Branch (3323:5): [True: 0, False: 1.84k]
  ------------------
 3324|      0|        checkConstantArgWithLocation(1, "callable data number", nullptr, -1);
 3325|      0|        break;
 3326|      0|    case EOpExecuteCallableKHR:
  ------------------
  |  Branch (3326:5): [True: 0, False: 1.84k]
  ------------------
 3327|      0|        checkConstantArgWithLocation(1, "callable data number", "no callableDataEXT/callableDataInEXT declared", 1);
 3328|      0|        break;
 3329|       |
 3330|      0|    case EOpHitObjectTraceRayNV:
  ------------------
  |  Branch (3330:5): [True: 0, False: 1.84k]
  ------------------
 3331|      0|        checkConstantArgWithLocation(11, "payload number", "no rayPayloadEXT/rayPayloadInEXT declared", 0);
 3332|      0|        break;
 3333|      0|    case EOpHitObjectTraceRayMotionNV:
  ------------------
  |  Branch (3333:5): [True: 0, False: 1.84k]
  ------------------
 3334|      0|        checkConstantArgWithLocation(12, "payload number", "no rayPayloadEXT/rayPayloadInEXT declared", 0);
 3335|      0|        break;
 3336|      0|    case EOpHitObjectExecuteShaderNV:
  ------------------
  |  Branch (3336:5): [True: 0, False: 1.84k]
  ------------------
 3337|      0|        checkConstantArgWithLocation(1, "payload number", "no rayPayloadEXT/rayPayloadInEXT declared", 0);
 3338|      0|        break;
 3339|      0|    case EOpHitObjectRecordHitNV:
  ------------------
  |  Branch (3339:5): [True: 0, False: 1.84k]
  ------------------
 3340|      0|        checkConstantArgWithLocation(12, "hitobjectattribute number", "no hitObjectAttributeNV declared", 2);
 3341|      0|        break;
 3342|      0|    case EOpHitObjectRecordHitMotionNV:
  ------------------
  |  Branch (3342:5): [True: 0, False: 1.84k]
  ------------------
 3343|      0|        checkConstantArgWithLocation(13, "hitobjectattribute number", "no hitObjectAttributeNV declared", 2);
 3344|      0|        break;
 3345|      0|    case EOpHitObjectRecordHitWithIndexNV:
  ------------------
  |  Branch (3345:5): [True: 0, False: 1.84k]
  ------------------
 3346|      0|        checkConstantArgWithLocation(11, "hitobjectattribute number", "no hitObjectAttributeNV declared", 2);
 3347|      0|        break;
 3348|      0|    case EOpHitObjectRecordHitWithIndexMotionNV:
  ------------------
  |  Branch (3348:5): [True: 0, False: 1.84k]
  ------------------
 3349|      0|        checkConstantArgWithLocation(12, "hitobjectattribute number", "no hitObjectAttributeNV declared", 2);
 3350|      0|        break;
 3351|      0|    case EOpHitObjectGetAttributesNV:
  ------------------
  |  Branch (3351:5): [True: 0, False: 1.84k]
  ------------------
 3352|      0|        checkConstantArgWithLocation(1, "hitobjectattribute number", "no hitObjectAttributeNV declared", 2);
 3353|      0|        break;
 3354|       |
 3355|      0|    case EOpRayQueryGetIntersectionType:
  ------------------
  |  Branch (3355:5): [True: 0, False: 1.84k]
  ------------------
 3356|      0|    case EOpRayQueryGetIntersectionT:
  ------------------
  |  Branch (3356:5): [True: 0, False: 1.84k]
  ------------------
 3357|      0|    case EOpRayQueryGetIntersectionInstanceCustomIndex:
  ------------------
  |  Branch (3357:5): [True: 0, False: 1.84k]
  ------------------
 3358|      0|    case EOpRayQueryGetIntersectionInstanceId:
  ------------------
  |  Branch (3358:5): [True: 0, False: 1.84k]
  ------------------
 3359|      0|    case EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset:
  ------------------
  |  Branch (3359:5): [True: 0, False: 1.84k]
  ------------------
 3360|      0|    case EOpRayQueryGetIntersectionGeometryIndex:
  ------------------
  |  Branch (3360:5): [True: 0, False: 1.84k]
  ------------------
 3361|      0|    case EOpRayQueryGetIntersectionPrimitiveIndex:
  ------------------
  |  Branch (3361:5): [True: 0, False: 1.84k]
  ------------------
 3362|      0|    case EOpRayQueryGetIntersectionBarycentrics:
  ------------------
  |  Branch (3362:5): [True: 0, False: 1.84k]
  ------------------
 3363|      0|    case EOpRayQueryGetIntersectionFrontFace:
  ------------------
  |  Branch (3363:5): [True: 0, False: 1.84k]
  ------------------
 3364|      0|    case EOpRayQueryGetIntersectionObjectRayDirection:
  ------------------
  |  Branch (3364:5): [True: 0, False: 1.84k]
  ------------------
 3365|      0|    case EOpRayQueryGetIntersectionObjectRayOrigin:
  ------------------
  |  Branch (3365:5): [True: 0, False: 1.84k]
  ------------------
 3366|      0|    case EOpRayQueryGetIntersectionObjectToWorld:
  ------------------
  |  Branch (3366:5): [True: 0, False: 1.84k]
  ------------------
 3367|      0|    case EOpRayQueryGetIntersectionWorldToObject:
  ------------------
  |  Branch (3367:5): [True: 0, False: 1.84k]
  ------------------
 3368|      0|    case EOpRayQueryGetIntersectionTriangleVertexPositionsEXT:
  ------------------
  |  Branch (3368:5): [True: 0, False: 1.84k]
  ------------------
 3369|      0|    case EOpRayQueryGetIntersectionClusterIdNV:
  ------------------
  |  Branch (3369:5): [True: 0, False: 1.84k]
  ------------------
 3370|      0|    case EOpRayQueryGetIntersectionSpherePositionNV:
  ------------------
  |  Branch (3370:5): [True: 0, False: 1.84k]
  ------------------
 3371|      0|    case EOpRayQueryGetIntersectionSphereRadiusNV:
  ------------------
  |  Branch (3371:5): [True: 0, False: 1.84k]
  ------------------
 3372|      0|    case EOpRayQueryGetIntersectionLSSHitValueNV:
  ------------------
  |  Branch (3372:5): [True: 0, False: 1.84k]
  ------------------
 3373|      0|    case EOpRayQueryGetIntersectionLSSPositionsNV:
  ------------------
  |  Branch (3373:5): [True: 0, False: 1.84k]
  ------------------
 3374|      0|    case EOpRayQueryGetIntersectionLSSRadiiNV:
  ------------------
  |  Branch (3374:5): [True: 0, False: 1.84k]
  ------------------
 3375|      0|        if (!(*argp)[1]->getAsConstantUnion())
  ------------------
  |  Branch (3375:13): [True: 0, False: 0]
  ------------------
 3376|      0|            error(loc, "argument must be compile-time constant", "committed", "");
 3377|      0|        break;
 3378|       |
 3379|     12|    case EOpTextureQuerySamples:
  ------------------
  |  Branch (3379:5): [True: 12, False: 1.83k]
  ------------------
 3380|     12|    case EOpImageQuerySamples:
  ------------------
  |  Branch (3380:5): [True: 0, False: 1.84k]
  ------------------
 3381|       |        // GL_ARB_shader_texture_image_samples
 3382|     12|        profileRequires(loc, ~EEsProfile, 450, E_GL_ARB_shader_texture_image_samples, "textureSamples and imageSamples");
 3383|     12|        break;
 3384|       |
 3385|      0|    case EOpImageAtomicAdd:
  ------------------
  |  Branch (3385:5): [True: 0, False: 1.84k]
  ------------------
 3386|      0|    case EOpImageAtomicMin:
  ------------------
  |  Branch (3386:5): [True: 0, False: 1.84k]
  ------------------
 3387|      0|    case EOpImageAtomicMax:
  ------------------
  |  Branch (3387:5): [True: 0, False: 1.84k]
  ------------------
 3388|      0|    case EOpImageAtomicAnd:
  ------------------
  |  Branch (3388:5): [True: 0, False: 1.84k]
  ------------------
 3389|      0|    case EOpImageAtomicOr:
  ------------------
  |  Branch (3389:5): [True: 0, False: 1.84k]
  ------------------
 3390|      0|    case EOpImageAtomicXor:
  ------------------
  |  Branch (3390:5): [True: 0, False: 1.84k]
  ------------------
 3391|      0|    case EOpImageAtomicExchange:
  ------------------
  |  Branch (3391:5): [True: 0, False: 1.84k]
  ------------------
 3392|      0|    case EOpImageAtomicCompSwap:
  ------------------
  |  Branch (3392:5): [True: 0, False: 1.84k]
  ------------------
 3393|      0|    case EOpImageAtomicLoad:
  ------------------
  |  Branch (3393:5): [True: 0, False: 1.84k]
  ------------------
 3394|      0|    case EOpImageAtomicStore:
  ------------------
  |  Branch (3394:5): [True: 0, False: 1.84k]
  ------------------
 3395|      0|    {
 3396|       |        // Make sure the image types have the correct layout() format and correct argument types
 3397|      0|        const TType& imageType = arg0->getType();
 3398|      0|        if (imageType.getSampler().type == EbtInt || imageType.getSampler().type == EbtUint ||
  ------------------
  |  Branch (3398:13): [True: 0, False: 0]
  |  Branch (3398:54): [True: 0, False: 0]
  ------------------
 3399|      0|            imageType.getSampler().type == EbtInt64 || imageType.getSampler().type == EbtUint64) {
  ------------------
  |  Branch (3399:13): [True: 0, False: 0]
  |  Branch (3399:56): [True: 0, False: 0]
  ------------------
 3400|      0|            if (imageType.getQualifier().getFormat() != ElfR32i && imageType.getQualifier().getFormat() != ElfR32ui &&
  ------------------
  |  Branch (3400:17): [True: 0, False: 0]
  |  Branch (3400:68): [True: 0, False: 0]
  ------------------
 3401|      0|                imageType.getQualifier().getFormat() != ElfR64i && imageType.getQualifier().getFormat() != ElfR64ui)
  ------------------
  |  Branch (3401:17): [True: 0, False: 0]
  |  Branch (3401:68): [True: 0, False: 0]
  ------------------
 3402|      0|                error(loc, "only supported on image with format r32i or r32ui", fnCandidate.getName().c_str(), "");
 3403|      0|            if (callNode.getType().getBasicType() == EbtInt64 && imageType.getQualifier().getFormat() != ElfR64i)
  ------------------
  |  Branch (3403:17): [True: 0, False: 0]
  |  Branch (3403:66): [True: 0, False: 0]
  ------------------
 3404|      0|                error(loc, "only supported on image with format r64i", fnCandidate.getName().c_str(), "");
 3405|      0|            else if (callNode.getType().getBasicType() == EbtUint64 && imageType.getQualifier().getFormat() != ElfR64ui)
  ------------------
  |  Branch (3405:22): [True: 0, False: 0]
  |  Branch (3405:72): [True: 0, False: 0]
  ------------------
 3406|      0|                error(loc, "only supported on image with format r64ui", fnCandidate.getName().c_str(), "");
 3407|      0|        } else if(callNode.getType().getBasicType() == EbtFloat16 &&
  ------------------
  |  Branch (3407:19): [True: 0, False: 0]
  ------------------
 3408|      0|                ((callNode.getType().getVectorSize() == 2 && arg0->getType().getQualifier().getFormat() == ElfRg16f) ||
  ------------------
  |  Branch (3408:19): [True: 0, False: 0]
  |  Branch (3408:62): [True: 0, False: 0]
  ------------------
 3409|      0|                  (callNode.getType().getVectorSize() == 4 && arg0->getType().getQualifier().getFormat() == ElfRgba16f))) {
  ------------------
  |  Branch (3409:20): [True: 0, False: 0]
  |  Branch (3409:63): [True: 0, False: 0]
  ------------------
 3410|      0|            if (StartsWith(fnCandidate.getName(), "imageAtomicAdd") ||
  ------------------
  |  Branch (3410:17): [True: 0, False: 0]
  ------------------
 3411|      0|                StartsWith(fnCandidate.getName(), "imageAtomicExchange") ||
  ------------------
  |  Branch (3411:17): [True: 0, False: 0]
  ------------------
 3412|      0|                StartsWith(fnCandidate.getName(), "imageAtomicMin") ||
  ------------------
  |  Branch (3412:17): [True: 0, False: 0]
  ------------------
 3413|      0|                StartsWith(fnCandidate.getName(), "imageAtomicMax")) {
  ------------------
  |  Branch (3413:17): [True: 0, False: 0]
  ------------------
 3414|      0|                requireExtensions(loc, 1, &E_GL_NV_shader_atomic_fp16_vector, fnCandidate.getName().c_str());
 3415|      0|            } else {
 3416|      0|                error(loc, "f16vec2/4 operation not supported on: ", fnCandidate.getName().c_str(), "");
 3417|      0|            }
 3418|      0|        } else if (imageType.getSampler().type == EbtFloat) {
  ------------------
  |  Branch (3418:20): [True: 0, False: 0]
  ------------------
 3419|      0|            if (StartsWith(fnCandidate.getName(), "imageAtomicExchange")) {
  ------------------
  |  Branch (3419:17): [True: 0, False: 0]
  ------------------
 3420|       |                // imageAtomicExchange doesn't require an extension
 3421|      0|            } else if (StartsWith(fnCandidate.getName(), "imageAtomicAdd") ||
  ------------------
  |  Branch (3421:24): [True: 0, False: 0]
  ------------------
 3422|      0|                       StartsWith(fnCandidate.getName(), "imageAtomicLoad") ||
  ------------------
  |  Branch (3422:24): [True: 0, False: 0]
  ------------------
 3423|      0|                       StartsWith(fnCandidate.getName(), "imageAtomicStore")) {
  ------------------
  |  Branch (3423:24): [True: 0, False: 0]
  ------------------
 3424|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float, fnCandidate.getName().c_str());
 3425|      0|            } else if (StartsWith(fnCandidate.getName(), "imageAtomicMin") ||
  ------------------
  |  Branch (3425:24): [True: 0, False: 0]
  ------------------
 3426|      0|                       StartsWith(fnCandidate.getName(), "imageAtomicMax")) {
  ------------------
  |  Branch (3426:24): [True: 0, False: 0]
  ------------------
 3427|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float2, fnCandidate.getName().c_str());
 3428|      0|            } else {
 3429|      0|                error(loc, "only supported on integer images", fnCandidate.getName().c_str(), "");
 3430|      0|            }
 3431|      0|            if (imageType.getQualifier().getFormat() != ElfR32f && isEsProfile())
  ------------------
  |  Branch (3431:17): [True: 0, False: 0]
  |  Branch (3431:68): [True: 0, False: 0]
  ------------------
 3432|      0|                error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), "");
 3433|      0|        } else {
 3434|      0|            error(loc, "not supported on this image type", fnCandidate.getName().c_str(), "");
 3435|      0|        }
 3436|       |
 3437|      0|        const size_t maxArgs = imageType.getSampler().isMultiSample() ? 5 : 4;
  ------------------
  |  Branch (3437:32): [True: 0, False: 0]
  ------------------
 3438|      0|        if (argp->size() > maxArgs) {
  ------------------
  |  Branch (3438:13): [True: 0, False: 0]
  ------------------
 3439|      0|            requireExtensions(loc, 1, &E_GL_KHR_memory_scope_semantics, fnCandidate.getName().c_str());
 3440|      0|            memorySemanticsCheck(loc, fnCandidate, callNode);
 3441|      0|        }
 3442|       |
 3443|      0|        break;
 3444|      0|    }
 3445|       |
 3446|      0|    case EOpAtomicAdd:
  ------------------
  |  Branch (3446:5): [True: 0, False: 1.84k]
  ------------------
 3447|      0|    case EOpAtomicSubtract:
  ------------------
  |  Branch (3447:5): [True: 0, False: 1.84k]
  ------------------
 3448|      0|    case EOpAtomicMin:
  ------------------
  |  Branch (3448:5): [True: 0, False: 1.84k]
  ------------------
 3449|      0|    case EOpAtomicMax:
  ------------------
  |  Branch (3449:5): [True: 0, False: 1.84k]
  ------------------
 3450|      0|    case EOpAtomicAnd:
  ------------------
  |  Branch (3450:5): [True: 0, False: 1.84k]
  ------------------
 3451|      0|    case EOpAtomicOr:
  ------------------
  |  Branch (3451:5): [True: 0, False: 1.84k]
  ------------------
 3452|      0|    case EOpAtomicXor:
  ------------------
  |  Branch (3452:5): [True: 0, False: 1.84k]
  ------------------
 3453|      0|    case EOpAtomicExchange:
  ------------------
  |  Branch (3453:5): [True: 0, False: 1.84k]
  ------------------
 3454|      0|    case EOpAtomicCompSwap:
  ------------------
  |  Branch (3454:5): [True: 0, False: 1.84k]
  ------------------
 3455|      0|    case EOpAtomicLoad:
  ------------------
  |  Branch (3455:5): [True: 0, False: 1.84k]
  ------------------
 3456|      0|    case EOpAtomicStore:
  ------------------
  |  Branch (3456:5): [True: 0, False: 1.84k]
  ------------------
 3457|      0|    {
 3458|      0|        if (argp->size() > 3) {
  ------------------
  |  Branch (3458:13): [True: 0, False: 0]
  ------------------
 3459|      0|            requireExtensions(loc, 1, &E_GL_KHR_memory_scope_semantics, fnCandidate.getName().c_str());
 3460|      0|            memorySemanticsCheck(loc, fnCandidate, callNode);
 3461|      0|            if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange ||
  ------------------
  |  Branch (3461:18): [True: 0, False: 0]
  |  Branch (3461:54): [True: 0, False: 0]
  ------------------
 3462|      0|                callNode.getOp() == EOpAtomicLoad || callNode.getOp() == EOpAtomicStore) &&
  ------------------
  |  Branch (3462:17): [True: 0, False: 0]
  |  Branch (3462:54): [True: 0, False: 0]
  ------------------
 3463|      0|                (arg0->getType().getBasicType() == EbtFloat ||
  ------------------
  |  Branch (3463:18): [True: 0, False: 0]
  ------------------
 3464|      0|                 arg0->getType().getBasicType() == EbtDouble)) {
  ------------------
  |  Branch (3464:18): [True: 0, False: 0]
  ------------------
 3465|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float, fnCandidate.getName().c_str());
 3466|      0|            } else if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange ||
  ------------------
  |  Branch (3466:25): [True: 0, False: 0]
  |  Branch (3466:61): [True: 0, False: 0]
  ------------------
 3467|      0|                        callNode.getOp() == EOpAtomicLoad || callNode.getOp() == EOpAtomicStore ||
  ------------------
  |  Branch (3467:25): [True: 0, False: 0]
  |  Branch (3467:62): [True: 0, False: 0]
  ------------------
 3468|      0|                        callNode.getOp() == EOpAtomicMin || callNode.getOp() == EOpAtomicMax) &&
  ------------------
  |  Branch (3468:25): [True: 0, False: 0]
  |  Branch (3468:61): [True: 0, False: 0]
  ------------------
 3469|      0|                       arg0->getType().isFloatingDomain()) {
  ------------------
  |  Branch (3469:24): [True: 0, False: 0]
  ------------------
 3470|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float2, fnCandidate.getName().c_str());
 3471|      0|            }
 3472|      0|        } else if (arg0->getType().getBasicType() == EbtInt64 || arg0->getType().getBasicType() == EbtUint64) {
  ------------------
  |  Branch (3472:20): [True: 0, False: 0]
  |  Branch (3472:66): [True: 0, False: 0]
  ------------------
 3473|      0|            const char* const extensions[2] = { E_GL_NV_shader_atomic_int64,
 3474|      0|                                                E_GL_EXT_shader_atomic_int64 };
 3475|      0|            requireExtensions(loc, 2, extensions, fnCandidate.getName().c_str());
 3476|      0|        } else if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange ||
  ------------------
  |  Branch (3476:21): [True: 0, False: 0]
  |  Branch (3476:57): [True: 0, False: 0]
  ------------------
 3477|      0|                    callNode.getOp() == EOpAtomicMin || callNode.getOp() == EOpAtomicMax) &&
  ------------------
  |  Branch (3477:21): [True: 0, False: 0]
  |  Branch (3477:57): [True: 0, False: 0]
  ------------------
 3478|      0|                   arg0->getType().getBasicType() == EbtFloat16 &&
  ------------------
  |  Branch (3478:20): [True: 0, False: 0]
  ------------------
 3479|      0|                   (arg0->getType().getVectorSize() == 2 || arg0->getType().getVectorSize() == 4 )) {
  ------------------
  |  Branch (3479:21): [True: 0, False: 0]
  |  Branch (3479:61): [True: 0, False: 0]
  ------------------
 3480|      0|            requireExtensions(loc, 1, &E_GL_NV_shader_atomic_fp16_vector, fnCandidate.getName().c_str());
 3481|      0|        } else if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange) &&
  ------------------
  |  Branch (3481:21): [True: 0, False: 0]
  |  Branch (3481:57): [True: 0, False: 0]
  ------------------
 3482|      0|                   (arg0->getType().getBasicType() == EbtFloat ||
  ------------------
  |  Branch (3482:21): [True: 0, False: 0]
  ------------------
 3483|      0|                    arg0->getType().getBasicType() == EbtDouble)) {
  ------------------
  |  Branch (3483:21): [True: 0, False: 0]
  ------------------
 3484|      0|            requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float, fnCandidate.getName().c_str());
 3485|      0|        } else if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange ||
  ------------------
  |  Branch (3485:21): [True: 0, False: 0]
  |  Branch (3485:57): [True: 0, False: 0]
  ------------------
 3486|      0|                    callNode.getOp() == EOpAtomicLoad || callNode.getOp() == EOpAtomicStore ||
  ------------------
  |  Branch (3486:21): [True: 0, False: 0]
  |  Branch (3486:58): [True: 0, False: 0]
  ------------------
 3487|      0|                    callNode.getOp() == EOpAtomicMin || callNode.getOp() == EOpAtomicMax) &&
  ------------------
  |  Branch (3487:21): [True: 0, False: 0]
  |  Branch (3487:57): [True: 0, False: 0]
  ------------------
 3488|      0|                   arg0->getType().isFloatingDomain()) {
  ------------------
  |  Branch (3488:20): [True: 0, False: 0]
  ------------------
 3489|      0|            requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float2, fnCandidate.getName().c_str());
 3490|      0|        }
 3491|       |
 3492|      0|        const TIntermTyped* base = TIntermediate::traverseLValueBase(arg0, true, true);
 3493|      0|        const char* errMsg = "Only l-values corresponding to shader block storage or shared variables can be used with "
 3494|      0|                             "atomic memory functions.";
 3495|      0|        if (base) {
  ------------------
  |  Branch (3495:13): [True: 0, False: 0]
  ------------------
 3496|      0|            const TType* refType = (base->getType().isReference()) ? base->getType().getReferentType() : nullptr;
  ------------------
  |  Branch (3496:36): [True: 0, False: 0]
  ------------------
 3497|      0|            const TQualifier& qualifier =
 3498|      0|                (refType != nullptr) ? refType->getQualifier() : base->getType().getQualifier();
  ------------------
  |  Branch (3498:17): [True: 0, False: 0]
  ------------------
 3499|      0|            if (qualifier.storage != EvqShared && qualifier.storage != EvqBuffer &&
  ------------------
  |  Branch (3499:17): [True: 0, False: 0]
  |  Branch (3499:51): [True: 0, False: 0]
  ------------------
 3500|      0|                qualifier.storage != EvqtaskPayloadSharedEXT)
  ------------------
  |  Branch (3500:17): [True: 0, False: 0]
  ------------------
 3501|      0|                error(loc, errMsg, fnCandidate.getName().c_str(), "");
 3502|      0|        } else {
 3503|      0|            error(loc, errMsg, fnCandidate.getName().c_str(), "");
 3504|      0|        }
 3505|       |
 3506|      0|        break;
 3507|      0|    }
 3508|       |
 3509|      0|    case EOpInterpolateAtCentroid:
  ------------------
  |  Branch (3509:5): [True: 0, False: 1.84k]
  ------------------
 3510|      0|    case EOpInterpolateAtSample:
  ------------------
  |  Branch (3510:5): [True: 0, False: 1.84k]
  ------------------
 3511|      0|    case EOpInterpolateAtOffset:
  ------------------
  |  Branch (3511:5): [True: 0, False: 1.84k]
  ------------------
 3512|      0|    case EOpInterpolateAtVertex: {
  ------------------
  |  Branch (3512:5): [True: 0, False: 1.84k]
  ------------------
 3513|      0|        if (arg0->getType().getQualifier().storage != EvqVaryingIn) {
  ------------------
  |  Branch (3513:13): [True: 0, False: 0]
  ------------------
 3514|       |            // Traverse down the left branch of arg0 to ensure this argument is a valid interpolant.
 3515|       |            //
 3516|       |            // For desktop GL >4.3 we effectively only need to ensure that arg0 represents an l-value from an
 3517|       |            // input declaration.
 3518|       |            //
 3519|       |            // For desktop GL <= 4.3 and ES, we must also ensure that swizzling is not used
 3520|       |            //
 3521|       |            // For ES, we must also ensure that a field selection operator (i.e., '.') is not used on a named
 3522|       |            // struct.
 3523|       |
 3524|      0|            const bool esProfile = isEsProfile();
 3525|      0|            const bool swizzleOkay = !esProfile && (version >= 440);
  ------------------
  |  Branch (3525:38): [True: 0, False: 0]
  |  Branch (3525:52): [True: 0, False: 0]
  ------------------
 3526|       |
 3527|      0|            std::string interpolantErrorMsg = "first argument must be an interpolant, or interpolant-array element";
 3528|      0|            bool isValid = true; // Assume that the interpolant is valid until we find a condition making it invalid
 3529|      0|            bool isIn = false;   // Checks whether or not the interpolant is a shader input
 3530|      0|            bool structAccessOp = false; // Whether or not the previous node in the chain is a struct accessor
 3531|      0|            TIntermediate::traverseLValueBase(
 3532|      0|                arg0, swizzleOkay, false,
 3533|      0|                [&isValid, &isIn, &interpolantErrorMsg, esProfile, &structAccessOp](const TIntermNode& n) -> bool {
 3534|      0|                    auto* type = n.getAsTyped();
 3535|      0|                    if (type) {
 3536|      0|                        if (type->getType().getQualifier().storage == EvqVaryingIn) {
 3537|      0|                            isIn = true;
 3538|      0|                        }
 3539|       |                        // If a field accessor was used, it can only be used to access a field with an input block, not a struct.
 3540|      0|                        if (structAccessOp && (type->getType().getBasicType() != EbtBlock)) {
 3541|      0|                            interpolantErrorMsg +=
 3542|      0|                                ". Using the field of a named struct as an interpolant argument is not "
 3543|      0|                                "allowed (ES-only).";
 3544|      0|                            isValid = false;
 3545|      0|                        }
 3546|      0|                    }
 3547|       |
 3548|       |                    // ES has different requirements for interpolants than GL
 3549|      0|                    if (esProfile) {
 3550|       |                        // Swizzling will be taken care of by the 'swizzleOkay' argument passsed to traverseLValueBase,
 3551|       |                        // so we only ned to check whether or not a field accessor has been used with a named struct.
 3552|      0|                        auto* binary = n.getAsBinaryNode();
 3553|      0|                        if (binary && (binary->getOp() == EOpIndexDirectStruct)) {
 3554|      0|                            structAccessOp = true;
 3555|      0|                        }
 3556|      0|                    }
 3557|       |                    // Don't continue traversing if we know we have an invalid interpolant at this point.
 3558|      0|                    return isValid;
 3559|      0|                });
 3560|      0|            if (!isIn || !isValid) {
  ------------------
  |  Branch (3560:17): [True: 0, False: 0]
  |  Branch (3560:26): [True: 0, False: 0]
  ------------------
 3561|      0|                error(loc, interpolantErrorMsg.c_str(), fnCandidate.getName().c_str(), "");
 3562|      0|            }
 3563|      0|        }
 3564|       |
 3565|      0|        if (callNode.getOp() == EOpInterpolateAtVertex) {
  ------------------
  |  Branch (3565:13): [True: 0, False: 0]
  ------------------
 3566|      0|            if (!arg0->getType().getQualifier().isExplicitInterpolation())
  ------------------
  |  Branch (3566:17): [True: 0, False: 0]
  ------------------
 3567|      0|                error(loc, "argument must be qualified as __explicitInterpAMD in", "interpolant", "");
 3568|      0|            else {
 3569|      0|                if (! (*argp)[1]->getAsConstantUnion())
  ------------------
  |  Branch (3569:21): [True: 0, False: 0]
  ------------------
 3570|      0|                    error(loc, "argument must be compile-time constant", "vertex index", "");
 3571|      0|                else {
 3572|      0|                    unsigned vertexIdx = (*argp)[1]->getAsConstantUnion()->getConstArray()[0].getUConst();
 3573|      0|                    if (vertexIdx > 2)
  ------------------
  |  Branch (3573:25): [True: 0, False: 0]
  ------------------
 3574|      0|                        error(loc, "must be in the range [0, 2]", "vertex index", "");
 3575|      0|                }
 3576|      0|            }
 3577|      0|        }
 3578|      0|    } break;
 3579|       |
 3580|      0|    case EOpEmitStreamVertex:
  ------------------
  |  Branch (3580:5): [True: 0, False: 1.84k]
  ------------------
 3581|      0|    case EOpEndStreamPrimitive:
  ------------------
  |  Branch (3581:5): [True: 0, False: 1.84k]
  ------------------
 3582|      0|        if (version == 150)
  ------------------
  |  Branch (3582:13): [True: 0, False: 0]
  ------------------
 3583|      0|            requireExtensions(loc, Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, "if the verison is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5/GL_NV_gpu_shader5");
 3584|      0|        intermediate.setMultiStream();
 3585|      0|        break;
 3586|       |
 3587|      0|    case EOpSubgroupClusteredAdd:
  ------------------
  |  Branch (3587:5): [True: 0, False: 1.84k]
  ------------------
 3588|      0|    case EOpSubgroupClusteredMul:
  ------------------
  |  Branch (3588:5): [True: 0, False: 1.84k]
  ------------------
 3589|      0|    case EOpSubgroupClusteredMin:
  ------------------
  |  Branch (3589:5): [True: 0, False: 1.84k]
  ------------------
 3590|      0|    case EOpSubgroupClusteredMax:
  ------------------
  |  Branch (3590:5): [True: 0, False: 1.84k]
  ------------------
 3591|      0|    case EOpSubgroupClusteredAnd:
  ------------------
  |  Branch (3591:5): [True: 0, False: 1.84k]
  ------------------
 3592|      0|    case EOpSubgroupClusteredOr:
  ------------------
  |  Branch (3592:5): [True: 0, False: 1.84k]
  ------------------
 3593|      0|    case EOpSubgroupClusteredXor:
  ------------------
  |  Branch (3593:5): [True: 0, False: 1.84k]
  ------------------
 3594|       |        // The <clusterSize> as used in the subgroupClustered<op>() operations must be:
 3595|       |        // - An integral constant expression.
 3596|       |        // - At least 1.
 3597|       |        // - A power of 2.
 3598|      0|        if ((*argp)[1]->getAsConstantUnion() == nullptr)
  ------------------
  |  Branch (3598:13): [True: 0, False: 0]
  ------------------
 3599|      0|            error(loc, "argument must be compile-time constant", "cluster size", "");
 3600|      0|        else {
 3601|      0|            int size = (*argp)[1]->getAsConstantUnion()->getConstArray()[0].getIConst();
 3602|      0|            if (size < 1)
  ------------------
  |  Branch (3602:17): [True: 0, False: 0]
  ------------------
 3603|      0|                error(loc, "argument must be at least 1", "cluster size", "");
 3604|      0|            else if (!IsPow2(size))
  ------------------
  |  Branch (3604:22): [True: 0, False: 0]
  ------------------
 3605|      0|                error(loc, "argument must be a power of 2", "cluster size", "");
 3606|      0|        }
 3607|      0|        break;
 3608|       |
 3609|      0|    case EOpSubgroupBroadcast:
  ------------------
  |  Branch (3609:5): [True: 0, False: 1.84k]
  ------------------
 3610|      0|    case EOpSubgroupQuadBroadcast:
  ------------------
  |  Branch (3610:5): [True: 0, False: 1.84k]
  ------------------
 3611|      0|        if (spvVersion.spv < EShTargetSpv_1_5) {
  ------------------
  |  Branch (3611:13): [True: 0, False: 0]
  ------------------
 3612|       |            // <id> must be an integral constant expression.
 3613|      0|            if ((*argp)[1]->getAsConstantUnion() == nullptr)
  ------------------
  |  Branch (3613:17): [True: 0, False: 0]
  ------------------
 3614|      0|                error(loc, "argument must be compile-time constant", "id", "");
 3615|      0|        }
 3616|      0|        break;
 3617|       |
 3618|      0|    case EOpBarrier:
  ------------------
  |  Branch (3618:5): [True: 0, False: 1.84k]
  ------------------
 3619|      0|    case EOpMemoryBarrier:
  ------------------
  |  Branch (3619:5): [True: 0, False: 1.84k]
  ------------------
 3620|      0|        if (argp->size() > 0) {
  ------------------
  |  Branch (3620:13): [True: 0, False: 0]
  ------------------
 3621|      0|            requireExtensions(loc, 1, &E_GL_KHR_memory_scope_semantics, fnCandidate.getName().c_str());
 3622|      0|            memorySemanticsCheck(loc, fnCandidate, callNode);
 3623|      0|        }
 3624|      0|        break;
 3625|       |
 3626|      0|    case EOpMix:
  ------------------
  |  Branch (3626:5): [True: 0, False: 1.84k]
  ------------------
 3627|      0|        if (profile == EEsProfile && version < 310) {
  ------------------
  |  Branch (3627:13): [True: 0, False: 0]
  |  Branch (3627:38): [True: 0, False: 0]
  ------------------
 3628|       |            // Look for specific signatures
 3629|      0|            if ((*argp)[0]->getAsTyped()->getBasicType() != EbtFloat &&
  ------------------
  |  Branch (3629:17): [True: 0, False: 0]
  ------------------
 3630|      0|                (*argp)[1]->getAsTyped()->getBasicType() != EbtFloat &&
  ------------------
  |  Branch (3630:17): [True: 0, False: 0]
  ------------------
 3631|      0|                (*argp)[2]->getAsTyped()->getBasicType() == EbtBool) {
  ------------------
  |  Branch (3631:17): [True: 0, False: 0]
  ------------------
 3632|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_integer_mix, "specific signature of builtin mix");
 3633|      0|            }
 3634|      0|        }
 3635|       |
 3636|      0|        if (profile != EEsProfile && version < 450) {
  ------------------
  |  Branch (3636:13): [True: 0, False: 0]
  |  Branch (3636:38): [True: 0, False: 0]
  ------------------
 3637|      0|            if ((*argp)[0]->getAsTyped()->getBasicType() != EbtFloat &&
  ------------------
  |  Branch (3637:17): [True: 0, False: 0]
  ------------------
 3638|      0|                (*argp)[0]->getAsTyped()->getBasicType() != EbtDouble &&
  ------------------
  |  Branch (3638:17): [True: 0, False: 0]
  ------------------
 3639|      0|                (*argp)[1]->getAsTyped()->getBasicType() != EbtFloat &&
  ------------------
  |  Branch (3639:17): [True: 0, False: 0]
  ------------------
 3640|      0|                (*argp)[1]->getAsTyped()->getBasicType() != EbtDouble &&
  ------------------
  |  Branch (3640:17): [True: 0, False: 0]
  ------------------
 3641|      0|                (*argp)[2]->getAsTyped()->getBasicType() == EbtBool) {
  ------------------
  |  Branch (3641:17): [True: 0, False: 0]
  ------------------
 3642|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_integer_mix, fnCandidate.getName().c_str());
 3643|      0|            }
 3644|      0|        }
 3645|       |
 3646|      0|        break;
 3647|      0|    case EOpLessThan:
  ------------------
  |  Branch (3647:5): [True: 0, False: 1.84k]
  ------------------
 3648|      0|    case EOpLessThanEqual:
  ------------------
  |  Branch (3648:5): [True: 0, False: 1.84k]
  ------------------
 3649|      0|    case EOpGreaterThan:
  ------------------
  |  Branch (3649:5): [True: 0, False: 1.84k]
  ------------------
 3650|      0|    case EOpGreaterThanEqual:
  ------------------
  |  Branch (3650:5): [True: 0, False: 1.84k]
  ------------------
 3651|      0|    case EOpEqual:
  ------------------
  |  Branch (3651:5): [True: 0, False: 1.84k]
  ------------------
 3652|      0|    case EOpNotEqual:
  ------------------
  |  Branch (3652:5): [True: 0, False: 1.84k]
  ------------------
 3653|      0|        if (profile != EEsProfile && version >= 150 && version < 450) {
  ------------------
  |  Branch (3653:13): [True: 0, False: 0]
  |  Branch (3653:38): [True: 0, False: 0]
  |  Branch (3653:56): [True: 0, False: 0]
  ------------------
 3654|      0|            if ((*argp)[1]->getAsTyped()->getBasicType() == EbtInt64 ||                 
  ------------------
  |  Branch (3654:17): [True: 0, False: 0]
  ------------------
 3655|      0|                (*argp)[1]->getAsTyped()->getBasicType() == EbtUint64)
  ------------------
  |  Branch (3655:17): [True: 0, False: 0]
  ------------------
 3656|      0|                requireExtensions(loc, 1, &E_GL_NV_gpu_shader5, fnCandidate.getName().c_str());
 3657|      0|        }
 3658|      0|    break;
 3659|      0|    case EOpFma:
  ------------------
  |  Branch (3659:5): [True: 0, False: 1.84k]
  ------------------
 3660|      0|    case EOpFrexp:
  ------------------
  |  Branch (3660:5): [True: 0, False: 1.84k]
  ------------------
 3661|      0|    case EOpLdexp:
  ------------------
  |  Branch (3661:5): [True: 0, False: 1.84k]
  ------------------
 3662|      0|        if (profile != EEsProfile && version < 400) {
  ------------------
  |  Branch (3662:13): [True: 0, False: 0]
  |  Branch (3662:38): [True: 0, False: 0]
  ------------------
 3663|      0|            if ((*argp)[0]->getAsTyped()->getBasicType() == EbtFloat) {
  ------------------
  |  Branch (3663:17): [True: 0, False: 0]
  ------------------
 3664|      0|                requireExtensions(loc, Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, fnCandidate.getName().c_str());
 3665|      0|            }
 3666|      0|        }
 3667|       |
 3668|      0|        break;
 3669|      0|    case EOpCooperativeVectorMatMulNV:
  ------------------
  |  Branch (3669:5): [True: 0, False: 1.84k]
  ------------------
 3670|      0|    case EOpCooperativeVectorMatMulAddNV:
  ------------------
  |  Branch (3670:5): [True: 0, False: 1.84k]
  ------------------
 3671|      0|        {
 3672|      0|            int inputInterpIdx = 2;
 3673|      0|            int matrixInterpIdx = 5;
 3674|      0|            int biasInterpIdx = 8;
 3675|      0|            int MIdx = callNode.getOp() == EOpCooperativeVectorMatMulAddNV ? 9 : 6;
  ------------------
  |  Branch (3675:24): [True: 0, False: 0]
  ------------------
 3676|      0|            int KIdx = callNode.getOp() == EOpCooperativeVectorMatMulAddNV ? 10 : 7;
  ------------------
  |  Branch (3676:24): [True: 0, False: 0]
  ------------------
 3677|      0|            int matrixLayoutIdx = callNode.getOp() == EOpCooperativeVectorMatMulAddNV ? 11 : 8;
  ------------------
  |  Branch (3677:35): [True: 0, False: 0]
  ------------------
 3678|      0|            int transposeIdx = callNode.getOp() == EOpCooperativeVectorMatMulAddNV ? 12 : 9;
  ------------------
  |  Branch (3678:32): [True: 0, False: 0]
  ------------------
 3679|       |
 3680|      0|            if (!(*argp)[inputInterpIdx]->getAsTyped()->getType().getQualifier().isConstant())
  ------------------
  |  Branch (3680:17): [True: 0, False: 0]
  ------------------
 3681|      0|                error(loc, "argument must be compile-time constant", "inputInterpretation", "");
 3682|      0|            if (!(*argp)[matrixInterpIdx]->getAsTyped()->getType().getQualifier().isConstant())
  ------------------
  |  Branch (3682:17): [True: 0, False: 0]
  ------------------
 3683|      0|                error(loc, "argument must be compile-time constant", "matrixInterpretation", "");
 3684|      0|            if (callNode.getOp() == EOpCooperativeVectorMatMulAddNV) {
  ------------------
  |  Branch (3684:17): [True: 0, False: 0]
  ------------------
 3685|      0|                if (!(*argp)[biasInterpIdx]->getAsTyped()->getType().getQualifier().isConstant())
  ------------------
  |  Branch (3685:21): [True: 0, False: 0]
  ------------------
 3686|      0|                    error(loc, "argument must be compile-time constant", "biasInterpretation", "");
 3687|      0|            }
 3688|      0|            if (!(*argp)[MIdx]->getAsTyped()->getType().getQualifier().isConstant())
  ------------------
  |  Branch (3688:17): [True: 0, False: 0]
  ------------------
 3689|      0|                error(loc, "argument must be compile-time constant", "M", "");
 3690|      0|            if (!(*argp)[KIdx]->getAsTyped()->getType().getQualifier().isConstant())
  ------------------
  |  Branch (3690:17): [True: 0, False: 0]
  ------------------
 3691|      0|                error(loc, "argument must be compile-time constant", "K", "");
 3692|      0|            if (!(*argp)[matrixLayoutIdx]->getAsTyped()->getType().getQualifier().isConstant())
  ------------------
  |  Branch (3692:17): [True: 0, False: 0]
  ------------------
 3693|      0|                error(loc, "argument must be compile-time constant", "matrixLayout", "");
 3694|      0|            if (!(*argp)[transposeIdx]->getAsTyped()->getType().getQualifier().isConstant())
  ------------------
  |  Branch (3694:17): [True: 0, False: 0]
  ------------------
 3695|      0|                error(loc, "argument must be compile-time constant", "transpose", "");
 3696|      0|        }
 3697|      0|        break;
 3698|      0|    case EOpCooperativeVectorOuterProductAccumulateNV:
  ------------------
  |  Branch (3698:5): [True: 0, False: 1.84k]
  ------------------
 3699|      0|        if (!(*argp)[5]->getAsTyped()->getType().getQualifier().isConstant())
  ------------------
  |  Branch (3699:13): [True: 0, False: 0]
  ------------------
 3700|      0|            error(loc, "argument must be compile-time constant", "matrixLayout", "");
 3701|      0|        if (!(*argp)[6]->getAsTyped()->getType().getQualifier().isConstant())
  ------------------
  |  Branch (3701:13): [True: 0, False: 0]
  ------------------
 3702|      0|            error(loc, "argument must be compile-time constant", "matrixInterpretation", "");
 3703|      0|        break;
 3704|       |
 3705|      0|    case EOpCooperativeMatrixLoad:
  ------------------
  |  Branch (3705:5): [True: 0, False: 1.84k]
  ------------------
 3706|      0|    case EOpCooperativeMatrixLoadNV:
  ------------------
  |  Branch (3706:5): [True: 0, False: 1.84k]
  ------------------
 3707|      0|    case EOpCooperativeMatrixLoadTensorNV:
  ------------------
  |  Branch (3707:5): [True: 0, False: 1.84k]
  ------------------
 3708|      0|    case EOpCooperativeMatrixStore:
  ------------------
  |  Branch (3708:5): [True: 0, False: 1.84k]
  ------------------
 3709|      0|    case EOpCooperativeMatrixStoreNV:
  ------------------
  |  Branch (3709:5): [True: 0, False: 1.84k]
  ------------------
 3710|      0|    case EOpCooperativeMatrixStoreTensorNV:
  ------------------
  |  Branch (3710:5): [True: 0, False: 1.84k]
  ------------------
 3711|      0|    {
 3712|      0|        const TIntermTyped *arg1 = (*argp)[1]->getAsTyped();
 3713|      0|        const TIntermTyped* base = TIntermediate::traverseLValueBase(arg1, true, true);
 3714|      0|        const char* errMsg = "Only l-values corresponding to storage block or shared variables can be used with "
 3715|      0|                             "cooperative matrix load/store functions.";
 3716|      0|        if (base) {
  ------------------
  |  Branch (3716:13): [True: 0, False: 0]
  ------------------
 3717|      0|            const TType* refType = (base->getType().isReference()) ? base->getType().getReferentType() : nullptr;
  ------------------
  |  Branch (3717:36): [True: 0, False: 0]
  ------------------
 3718|      0|            const TQualifier& qualifier =
 3719|      0|                (refType != nullptr) ? refType->getQualifier() : base->getType().getQualifier();
  ------------------
  |  Branch (3719:17): [True: 0, False: 0]
  ------------------
 3720|      0|            if (qualifier.storage != EvqShared && qualifier.storage != EvqBuffer)
  ------------------
  |  Branch (3720:17): [True: 0, False: 0]
  |  Branch (3720:51): [True: 0, False: 0]
  ------------------
 3721|      0|                error(loc, errMsg, fnCandidate.getName().c_str(), "");
 3722|      0|        } else {
 3723|      0|            error(loc, errMsg, fnCandidate.getName().c_str(), "");
 3724|      0|        }
 3725|      0|    }
 3726|      0|    break;
 3727|       |
 3728|    804|    default:
  ------------------
  |  Branch (3728:5): [True: 804, False: 1.04k]
  ------------------
 3729|    804|        break;
 3730|  1.84k|    }
 3731|       |
 3732|       |    // Texture operations on texture objects (aside from texelFetch on a
 3733|       |    // textureBuffer) require EXT_samplerless_texture_functions.
 3734|  1.84k|    switch (callNode.getOp()) {
 3735|    108|    case EOpTextureQuerySize:
  ------------------
  |  Branch (3735:5): [True: 108, False: 1.74k]
  ------------------
 3736|    186|    case EOpTextureQueryLevels:
  ------------------
  |  Branch (3736:5): [True: 78, False: 1.77k]
  ------------------
 3737|    198|    case EOpTextureQuerySamples:
  ------------------
  |  Branch (3737:5): [True: 12, False: 1.83k]
  ------------------
 3738|    252|    case EOpTextureFetch:
  ------------------
  |  Branch (3738:5): [True: 54, False: 1.79k]
  ------------------
 3739|    288|    case EOpTextureFetchOffset:
  ------------------
  |  Branch (3739:5): [True: 36, False: 1.81k]
  ------------------
 3740|    288|    {
 3741|    288|        const TSampler& sampler = fnCandidate[0].type->getSampler();
 3742|       |
 3743|    288|        const bool isTexture = sampler.isTexture() && !sampler.isCombined();
  ------------------
  |  Branch (3743:32): [True: 288, False: 0]
  |  Branch (3743:55): [True: 0, False: 288]
  ------------------
 3744|    288|        const bool isBuffer = sampler.isBuffer();
 3745|    288|        const bool isFetch = callNode.getOp() == EOpTextureFetch || callNode.getOp() == EOpTextureFetchOffset;
  ------------------
  |  Branch (3745:30): [True: 54, False: 234]
  |  Branch (3745:69): [True: 36, False: 198]
  ------------------
 3746|       |
 3747|    288|        if (isTexture && (!isBuffer || !isFetch))
  ------------------
  |  Branch (3747:13): [True: 0, False: 288]
  |  Branch (3747:27): [True: 0, False: 0]
  |  Branch (3747:40): [True: 0, False: 0]
  ------------------
 3748|      0|            requireExtensions(loc, 1, &E_GL_EXT_samplerless_texture_functions, fnCandidate.getName().c_str());
 3749|       |
 3750|    288|        break;
 3751|    252|    }
 3752|       |
 3753|      0|    case EOpConstructSaturated:
  ------------------
  |  Branch (3753:5): [True: 0, False: 1.84k]
  ------------------
 3754|      0|    {
 3755|      0|        auto &sequence = callNode.getAsAggregate()->getSequence();
 3756|      0|        if (sequence.size() != 2) {
  ------------------
  |  Branch (3756:13): [True: 0, False: 0]
  ------------------
 3757|      0|            error(loc, "requires exactly two parameters", "", "");
 3758|      0|        }
 3759|      0|        auto &op0Type = sequence[0]->getAsTyped()->getType();
 3760|      0|        auto &op1Type = sequence[1]->getAsTyped()->getType();
 3761|      0|        if (op0Type.getBasicType() != EbtFloatE5M2 && op0Type.getBasicType() != EbtFloatE4M3) {
  ------------------
  |  Branch (3761:13): [True: 0, False: 0]
  |  Branch (3761:55): [True: 0, False: 0]
  ------------------
 3762|      0|            error(loc, "first parameter must have floate5m2 or floate4m3 basic type", "", "");
 3763|      0|        }
 3764|      0|        if (op1Type.getBasicType() == EbtFloatE5M2 || op1Type.getBasicType() == EbtFloatE4M3) {
  ------------------
  |  Branch (3764:13): [True: 0, False: 0]
  |  Branch (3764:55): [True: 0, False: 0]
  ------------------
 3765|      0|            error(loc, "second parameter must not have floate5m2 or floate4m3 basic type", "", "");
 3766|      0|        }
 3767|       |
 3768|      0|        if (!(op0Type.isScalar() || op0Type.isVector() || op0Type.isLongVector() || op0Type.isCoopMatKHR())) {
  ------------------
  |  Branch (3768:15): [True: 0, False: 0]
  |  Branch (3768:37): [True: 0, False: 0]
  |  Branch (3768:59): [True: 0, False: 0]
  |  Branch (3768:85): [True: 0, False: 0]
  ------------------
 3769|      0|            error(loc, "first parameter must be scalar, vector, or cooperative matrix", "", "");
 3770|      0|        }
 3771|      0|        if (!(op1Type.isScalar() || op1Type.isVector() || op1Type.isLongVector() || op1Type.isCoopMatKHR())) {
  ------------------
  |  Branch (3771:15): [True: 0, False: 0]
  |  Branch (3771:37): [True: 0, False: 0]
  |  Branch (3771:59): [True: 0, False: 0]
  |  Branch (3771:85): [True: 0, False: 0]
  ------------------
 3772|      0|            error(loc, "second parameter must be scalar, vector, or cooperative matrix", "", "");
 3773|      0|        }
 3774|      0|        if (!(op0Type.sameElementShape(op1Type) || op0Type.sameCoopMatShape(op1Type))) {
  ------------------
  |  Branch (3774:15): [True: 0, False: 0]
  |  Branch (3774:52): [True: 0, False: 0]
  ------------------
 3775|      0|            error(loc, "types must match other than scalar type and coopmat Use", "", "");
 3776|      0|        }
 3777|      0|        break;
 3778|    252|    }
 3779|      0|    case EOpTensorReadARM:
  ------------------
  |  Branch (3779:5): [True: 0, False: 1.84k]
  ------------------
 3780|      0|    case EOpTensorWriteARM:
  ------------------
  |  Branch (3780:5): [True: 0, False: 1.84k]
  ------------------
 3781|      0|    {
 3782|      0|        const TType &tensorType = (*argp)[0]->getAsTyped()->getType();
 3783|       |
 3784|       |        // Check that coordinates argument length matches rank of tensor argument.
 3785|      0|        int tensorRank = tensorType.getTensorRankARM();
 3786|      0|        const TArraySizes *coordArgArrayTy = (*argp)[1]->getAsTyped()->getType().getArraySizes();
 3787|      0|        assert(coordArgArrayTy->getNumDims() == 1 && "expecting 1D coordinate array");
 3788|      0|        if (coordArgArrayTy->getDimSize(0) != tensorRank) {
  ------------------
  |  Branch (3788:13): [True: 0, False: 0]
  ------------------
 3789|      0|            error(loc, "number of coordinates does not match tensor rank", "coord", "");
 3790|      0|        }
 3791|       |
 3792|       |        // Check that tensor element type matches data argument.
 3793|      0|        TBasicType eltTy = tensorType.getBasicType();
 3794|      0|        TBasicType argTy = (*argp)[2]->getAsTyped()->getType().getBasicType();
 3795|      0|        if (eltTy != argTy) {
  ------------------
  |  Branch (3795:13): [True: 0, False: 0]
  ------------------
 3796|      0|            error(loc, "", "data", "data argument type (%s) does not match tensor element type (%s)",
 3797|      0|                  TType::getBasicString(argTy), TType::getBasicString(eltTy));
 3798|      0|        }
 3799|       |
 3800|       |        // Check optional tensor operands.
 3801|      0|        if (argp->size() > 3) {
  ------------------
  |  Branch (3801:13): [True: 0, False: 0]
  ------------------
 3802|      0|            const TIntermConstantUnion* opArg = (*argp)[3]->getAsConstantUnion();
 3803|      0|            if (!opArg) {
  ------------------
  |  Branch (3803:17): [True: 0, False: 0]
  ------------------
 3804|      0|                error(loc, "tensor operands argument must be a constant integral expression", "tensorOps", "");
 3805|      0|            }
 3806|      0|            const unsigned int ops = opArg ? opArg->getConstArray()[0].getUConst() : 0;
  ------------------
  |  Branch (3806:38): [True: 0, False: 0]
  ------------------
 3807|      0|            const int gl_TensorOperandsOutOfBoundsValueARM = 0x2;
 3808|      0|            if (ops & gl_TensorOperandsOutOfBoundsValueARM) {
  ------------------
  |  Branch (3808:17): [True: 0, False: 0]
  ------------------
 3809|       |                // Out-of-bounds values can only be used with reads.
 3810|      0|                if (callNode.getOp() != EOpTensorReadARM) {
  ------------------
  |  Branch (3810:21): [True: 0, False: 0]
  ------------------
 3811|      0|                    error(loc, "out-of-bounds value is only valid with tensorReadARM", "tensorOps", "");
 3812|      0|                }
 3813|       |                // Check that an out-of-bounds value is present.
 3814|      0|                if (argp->size() == 4) {
  ------------------
  |  Branch (3814:21): [True: 0, False: 0]
  ------------------
 3815|      0|                    error(loc, "expecting out-of-bounds value as next argument", "tensorOps", "");
 3816|      0|                } else {
 3817|       |                    // Check constantness of out-of-bounds value.
 3818|      0|                    const TIntermConstantUnion* oobArg = (*argp)[4]->getAsConstantUnion();
 3819|      0|                    if (!oobArg) {
  ------------------
  |  Branch (3819:25): [True: 0, False: 0]
  ------------------
 3820|      0|                        error(loc, "argument following gl_TensorOperandsOutOfBoundsValueARM must be constant", "vararg",
 3821|      0|                              "");
 3822|      0|                    } else if (oobArg->getType().getBasicType() != tensorType.getBasicType()) {
  ------------------
  |  Branch (3822:32): [True: 0, False: 0]
  ------------------
 3823|       |                        // The type of the OOB value does not match the tensor type.
 3824|      0|                        error(loc, "", "vararg",
 3825|      0|                            "out-of-bounds value type (%s) does not match tensor element type (%s)",
 3826|      0|                            TType::getBasicString(oobArg->getBasicType()), TType::getBasicString(eltTy));
 3827|       |
 3828|      0|                    }
 3829|      0|                }
 3830|      0|            }
 3831|      0|        }
 3832|      0|        break;
 3833|      0|    }
 3834|       |
 3835|      0|    case EOpTensorSizeARM:
  ------------------
  |  Branch (3835:5): [True: 0, False: 1.84k]
  ------------------
 3836|      0|    {
 3837|      0|        unsigned int tensorRank = (*argp)[0]->getAsTyped()->getType().getTensorRankARM();
 3838|      0|        const TIntermConstantUnion *dimArg = (*argp)[1]->getAsConstantUnion();
 3839|      0|        if (dimArg) {
  ------------------
  |  Branch (3839:13): [True: 0, False: 0]
  ------------------
 3840|      0|            if (dimArg->getConstArray()[0].getUConst() >= tensorRank) {
  ------------------
  |  Branch (3840:17): [True: 0, False: 0]
  ------------------
 3841|      0|                error(loc, "dimension argument exceeds tensor rank", "dim", "");
 3842|      0|            }
 3843|      0|        } else {
 3844|      0|            error(loc, "dimension argument must be constant", "dim", "");
 3845|      0|        }
 3846|      0|        break;
 3847|      0|    }
 3848|       |
 3849|  1.56k|    default:
  ------------------
  |  Branch (3849:5): [True: 1.56k, False: 288]
  ------------------
 3850|  1.56k|        break;
 3851|  1.84k|    }
 3852|       |
 3853|  1.84k|    if (callNode.isSubgroup()) {
  ------------------
  |  Branch (3853:9): [True: 0, False: 1.84k]
  ------------------
 3854|       |        // these require SPIR-V 1.3
 3855|      0|        if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_3)
  ------------------
  |  Branch (3855:13): [True: 0, False: 0]
  |  Branch (3855:35): [True: 0, False: 0]
  ------------------
 3856|      0|            error(loc, "requires SPIR-V 1.3", "subgroup op", "");
 3857|       |
 3858|       |        // Check that if extended types are being used that the correct extensions are enabled.
 3859|      0|        if (arg0 != nullptr) {
  ------------------
  |  Branch (3859:13): [True: 0, False: 0]
  ------------------
 3860|      0|            const TType& type = arg0->getType();
 3861|      0|            bool enhanced = intermediate.getEnhancedMsgs();
 3862|      0|            switch (type.getBasicType()) {
 3863|      0|            default:
  ------------------
  |  Branch (3863:13): [True: 0, False: 0]
  ------------------
 3864|      0|                break;
 3865|      0|            case EbtInt8:
  ------------------
  |  Branch (3865:13): [True: 0, False: 0]
  ------------------
 3866|      0|            case EbtUint8:
  ------------------
  |  Branch (3866:13): [True: 0, False: 0]
  ------------------
 3867|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int8, type.getCompleteString(enhanced).c_str());
 3868|      0|                break;
 3869|      0|            case EbtInt16:
  ------------------
  |  Branch (3869:13): [True: 0, False: 0]
  ------------------
 3870|      0|            case EbtUint16:
  ------------------
  |  Branch (3870:13): [True: 0, False: 0]
  ------------------
 3871|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int16, type.getCompleteString(enhanced).c_str());
 3872|      0|                break;
 3873|      0|            case EbtInt64:
  ------------------
  |  Branch (3873:13): [True: 0, False: 0]
  ------------------
 3874|      0|            case EbtUint64:
  ------------------
  |  Branch (3874:13): [True: 0, False: 0]
  ------------------
 3875|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int64, type.getCompleteString(enhanced).c_str());
 3876|      0|                break;
 3877|      0|            case EbtFloat16:
  ------------------
  |  Branch (3877:13): [True: 0, False: 0]
  ------------------
 3878|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_float16, type.getCompleteString(enhanced).c_str());
 3879|      0|                break;
 3880|      0|            }
 3881|      0|        }
 3882|      0|    }
 3883|  1.84k|}
_ZN7glslang13TParseContext21userFunctionCallCheckERKNS_10TSourceLocERNS_16TIntermAggregateE:
 4016|    147|{
 4017|    147|    TIntermSequence& arguments = callNode.getSequence();
 4018|       |
 4019|    150|    for (int i = 0; i < (int)arguments.size(); ++i)
  ------------------
  |  Branch (4019:21): [True: 3, False: 147]
  ------------------
 4020|      3|        samplerConstructorLocationCheck(loc, "call argument", arguments[i]);
 4021|    147|}
_ZN7glslang13TParseContext31samplerConstructorLocationCheckERKNS_10TSourceLocEPKcP11TIntermNode:
 4027|      3|{
 4028|      3|    if (node->getAsOperator() && node->getAsOperator()->getOp() == EOpConstructTextureSampler)
  ------------------
  |  Branch (4028:9): [True: 0, False: 3]
  |  Branch (4028:34): [True: 0, False: 0]
  ------------------
 4029|      0|        error(loc, "sampler constructor must appear at point of use", token, "");
 4030|      3|}
_ZN7glslang13TParseContext21handleConstructorCallERKNS_10TSourceLocERKNS_11TPublicTypeE:
 4036|    807|{
 4037|    807|    TType type(publicType);
 4038|    807|    type.getQualifier().precision = EpqNone;
 4039|       |
 4040|    807|    if (type.isArray()) {
  ------------------
  |  Branch (4040:9): [True: 3, False: 804]
  ------------------
 4041|      3|        profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed constructor");
 4042|      3|        profileRequires(loc, EEsProfile, 300, nullptr, "arrayed constructor");
 4043|      3|    }
 4044|       |
 4045|       |    // Reuse EOpConstructTextureSampler for bindless image constructor
 4046|       |    // uvec2 imgHandle;
 4047|       |    // imageLoad(image1D(imgHandle), 0);
 4048|    807|    if (type.isImage() && extensionTurnedOn(E_GL_ARB_bindless_texture))
  ------------------
  |  Branch (4048:9): [True: 0, False: 807]
  |  Branch (4048:27): [True: 0, False: 0]
  ------------------
 4049|      0|    {
 4050|      0|        intermediate.setBindlessImageMode(currentCaller, AstRefTypeFunc);
 4051|      0|    }
 4052|       |
 4053|    807|    TOperator op = intermediate.mapTypeToConstructorOp(type);
 4054|       |
 4055|    807|    if (op == EOpNull) {
  ------------------
  |  Branch (4055:9): [True: 0, False: 807]
  ------------------
 4056|      0|      if (intermediate.getEnhancedMsgs() && type.getBasicType() == EbtSampler)
  ------------------
  |  Branch (4056:11): [True: 0, False: 0]
  |  Branch (4056:45): [True: 0, False: 0]
  ------------------
 4057|      0|            error(loc, "function not supported in this version; use texture() instead", "texture*D*", "");
 4058|      0|        else
 4059|      0|            error(loc, "cannot construct this type", type.getBasicString(), "");
 4060|      0|        op = EOpConstructFloat;
 4061|      0|        TType errorType(EbtFloat);
 4062|      0|        type.shallowCopy(errorType);
 4063|      0|    }
 4064|       |
 4065|    807|    TString empty("");
 4066|       |
 4067|    807|    return new TFunction(&empty, type, op);
 4068|    807|}
_ZN7glslang13TParseContext24handlePrecisionQualifierERKNS_10TSourceLocERNS_10TQualifierENS_19TPrecisionQualifierE:
 4072|  86.5k|{
 4073|  86.5k|    if (obeyPrecisionQualifiers())
  ------------------
  |  Branch (4073:9): [True: 86.5k, False: 0]
  ------------------
 4074|  86.5k|        qualifier.precision = precision;
 4075|  86.5k|}
_ZN7glslang13TParseContext23checkPrecisionQualifierERKNS_10TSourceLocENS_19TPrecisionQualifierE:
 4080|  86.5k|{
 4081|  86.5k|    if (precisionManager.shouldWarnAboutDefaults()) {
  ------------------
  |  Branch (4081:9): [True: 0, False: 86.5k]
  ------------------
 4082|      0|        warn(loc, "all default precisions are highp; use precision statements to quiet warning, e.g.:\n"
 4083|      0|                  "         \"precision mediump int; precision highp float;\"", "", "");
 4084|      0|        precisionManager.defaultWarningGiven();
 4085|      0|    }
 4086|  86.5k|}
_ZN7glslang13TParseContext13variableCheckERPNS_12TIntermTypedE:
 4124|  21.2k|{
 4125|  21.2k|    TIntermSymbol* symbol = nodePtr->getAsSymbolNode();
 4126|  21.2k|    if (! symbol)
  ------------------
  |  Branch (4126:9): [True: 13.2k, False: 8.03k]
  ------------------
 4127|  13.2k|        return;
 4128|       |
 4129|  8.03k|    if (symbol->getType().getBasicType() == EbtVoid) {
  ------------------
  |  Branch (4129:9): [True: 3, False: 8.03k]
  ------------------
 4130|      3|        const char *extraInfoFormat = "";
 4131|      3|        if (spvVersion.vulkan != 0 && symbol->getName() == "gl_VertexID") {
  ------------------
  |  Branch (4131:13): [True: 3, False: 0]
  |  Branch (4131:39): [True: 0, False: 3]
  ------------------
 4132|      0|          extraInfoFormat = "(Did you mean gl_VertexIndex?)";
 4133|      3|        } else if (spvVersion.vulkan != 0 && symbol->getName() == "gl_InstanceID") {
  ------------------
  |  Branch (4133:20): [True: 3, False: 0]
  |  Branch (4133:46): [True: 0, False: 3]
  ------------------
 4134|      0|          extraInfoFormat = "(Did you mean gl_InstanceIndex?)";
 4135|      0|        }
 4136|      3|        error(symbol->getLoc(), "undeclared identifier", symbol->getName().c_str(), extraInfoFormat);
 4137|       |
 4138|       |        // Add to symbol table to prevent future error messages on the same name
 4139|      3|        if (symbol->getName().size() > 0) {
  ------------------
  |  Branch (4139:13): [True: 3, False: 0]
  ------------------
 4140|      3|            TVariable* fakeVariable = new TVariable(&symbol->getName(), TType(EbtFloat));
 4141|      3|            symbolTable.insert(*fakeVariable);
 4142|       |
 4143|       |            // substitute a symbol node for this new variable
 4144|      3|            nodePtr = intermediate.addSymbol(*fakeVariable, symbol->getLoc());
 4145|      3|        }
 4146|  8.03k|    } else {
 4147|  8.03k|        switch (symbol->getQualifier().storage) {
 4148|      0|        case EvqPointCoord:
  ------------------
  |  Branch (4148:9): [True: 0, False: 8.03k]
  ------------------
 4149|      0|            profileRequires(symbol->getLoc(), ENoProfile, 120, nullptr, "gl_PointCoord");
 4150|      0|            break;
 4151|  8.03k|        default: break; // some compilers want this
  ------------------
  |  Branch (4151:9): [True: 8.03k, False: 0]
  ------------------
 4152|  8.03k|        }
 4153|  8.03k|    }
 4154|  8.03k|}
_ZN7glslang13TParseContext16lValueErrorCheckERKNS_10TSourceLocEPKcPNS_12TIntermTypedE:
 4163|  2.63k|{
 4164|  2.63k|    TIntermBinary* binaryNode = node->getAsBinaryNode();
 4165|       |
 4166|  2.63k|    if (binaryNode) {
  ------------------
  |  Branch (4166:9): [True: 564, False: 2.07k]
  ------------------
 4167|    564|        bool errorReturn = false;
 4168|       |
 4169|    564|        switch(binaryNode->getOp()) {
 4170|    471|        case EOpIndexDirect:
  ------------------
  |  Branch (4170:9): [True: 471, False: 93]
  ------------------
 4171|    471|        case EOpIndexIndirect:
  ------------------
  |  Branch (4171:9): [True: 0, False: 564]
  ------------------
 4172|       |            // ...  tessellation control shader ...
 4173|       |            // If a per-vertex output variable is used as an l-value, it is a
 4174|       |            // compile-time or link-time error if the expression indicating the
 4175|       |            // vertex index is not the identifier gl_InvocationID.
 4176|    471|            if (language == EShLangTessControl) {
  ------------------
  |  Branch (4176:17): [True: 471, False: 0]
  ------------------
 4177|    471|                const TType& leftType = binaryNode->getLeft()->getType();
 4178|    471|                if (leftType.getQualifier().storage == EvqVaryingOut && ! leftType.getQualifier().patch && binaryNode->getLeft()->getAsSymbolNode()) {
  ------------------
  |  Branch (4178:21): [True: 0, False: 471]
  |  Branch (4178:73): [True: 0, False: 0]
  |  Branch (4178:108): [True: 0, False: 0]
  ------------------
 4179|       |                    // we have a per-vertex output
 4180|      0|                    const TIntermSymbol* rightSymbol = binaryNode->getRight()->getAsSymbolNode();
 4181|      0|                    if (! rightSymbol || rightSymbol->getQualifier().builtIn != EbvInvocationId)
  ------------------
  |  Branch (4181:25): [True: 0, False: 0]
  |  Branch (4181:42): [True: 0, False: 0]
  ------------------
 4182|      0|                        error(loc, "tessellation-control per-vertex output l-value must be indexed with gl_InvocationID", "[]", "");
 4183|      0|                }
 4184|    471|            }
 4185|    471|            break; // left node is checked by base class
 4186|     93|        case EOpVectorSwizzle:
  ------------------
  |  Branch (4186:9): [True: 93, False: 471]
  ------------------
 4187|     93|            errorReturn = lValueErrorCheck(loc, op, binaryNode->getLeft());
 4188|     93|            if (!errorReturn) {
  ------------------
  |  Branch (4188:17): [True: 93, False: 0]
  ------------------
 4189|     93|                int offset[4] = {0,0,0,0};
 4190|       |
 4191|     93|                TIntermTyped* rightNode = binaryNode->getRight();
 4192|     93|                TIntermAggregate *aggrNode = rightNode->getAsAggregate();
 4193|       |
 4194|     93|                for (TIntermSequence::iterator p = aggrNode->getSequence().begin();
 4195|    315|                                               p != aggrNode->getSequence().end(); p++) {
  ------------------
  |  Branch (4195:48): [True: 222, False: 93]
  ------------------
 4196|    222|                    int value = (*p)->getAsTyped()->getAsConstantUnion()->getConstArray()[0].getIConst();
 4197|    222|                    offset[value]++;
 4198|    222|                    if (offset[value] > 1) {
  ------------------
  |  Branch (4198:25): [True: 0, False: 222]
  ------------------
 4199|      0|                        error(loc, " l-value of swizzle cannot have duplicate components", op, "", "");
 4200|       |
 4201|      0|                        return true;
 4202|      0|                    }
 4203|    222|                }
 4204|     93|            }
 4205|       |
 4206|     93|            return errorReturn;
 4207|      0|        default:
  ------------------
  |  Branch (4207:9): [True: 0, False: 564]
  ------------------
 4208|      0|            break;
 4209|    564|        }
 4210|       |
 4211|    471|        if (errorReturn) {
  ------------------
  |  Branch (4211:13): [True: 0, False: 471]
  ------------------
 4212|      0|            error(loc, " l-value required", op, "", "");
 4213|      0|            return true;
 4214|      0|        }
 4215|    471|    }
 4216|       |
 4217|  2.54k|    if (binaryNode && binaryNode->getOp() == EOpIndexDirectStruct && binaryNode->getLeft()->isReference())
  ------------------
  |  Branch (4217:9): [True: 471, False: 2.07k]
  |  Branch (4217:23): [True: 0, False: 471]
  |  Branch (4217:70): [True: 0, False: 0]
  ------------------
 4218|      0|        return false;
 4219|       |
 4220|       |    // Let the base class check errors
 4221|  2.54k|    if (TParseContextBase::lValueErrorCheck(loc, op, node))
  ------------------
  |  Branch (4221:9): [True: 0, False: 2.54k]
  ------------------
 4222|      0|        return true;
 4223|       |
 4224|  2.54k|    const char* symbol = nullptr;
 4225|  2.54k|    TIntermSymbol* symNode = node->getAsSymbolNode();
 4226|  2.54k|    if (symNode != nullptr)
  ------------------
  |  Branch (4226:9): [True: 2.07k, False: 471]
  ------------------
 4227|  2.07k|        symbol = symNode->getName().c_str();
 4228|       |
 4229|  2.54k|    const char* message = nullptr;
 4230|  2.54k|    switch (node->getQualifier().storage) {
 4231|      0|    case EvqVaryingIn:      message = "can't modify shader input";   break;
  ------------------
  |  Branch (4231:5): [True: 0, False: 2.54k]
  ------------------
 4232|      0|    case EvqInstanceId:     message = "can't modify gl_InstanceID";  break;
  ------------------
  |  Branch (4232:5): [True: 0, False: 2.54k]
  ------------------
 4233|      0|    case EvqVertexId:       message = "can't modify gl_VertexID";    break;
  ------------------
  |  Branch (4233:5): [True: 0, False: 2.54k]
  ------------------
 4234|      0|    case EvqFace:           message = "can't modify gl_FrontFace";   break;
  ------------------
  |  Branch (4234:5): [True: 0, False: 2.54k]
  ------------------
 4235|      0|    case EvqFragCoord:      message = "can't modify gl_FragCoord";   break;
  ------------------
  |  Branch (4235:5): [True: 0, False: 2.54k]
  ------------------
 4236|      0|    case EvqPointCoord:     message = "can't modify gl_PointCoord";  break;
  ------------------
  |  Branch (4236:5): [True: 0, False: 2.54k]
  ------------------
 4237|      0|    case EvqFragDepth:
  ------------------
  |  Branch (4237:5): [True: 0, False: 2.54k]
  ------------------
 4238|      0|        intermediate.setDepthReplacing();
 4239|       |        // "In addition, it is an error to statically write to gl_FragDepth in the fragment shader."
 4240|      0|        if (isEsProfile() && intermediate.getEarlyFragmentTests())
  ------------------
  |  Branch (4240:13): [True: 0, False: 0]
  |  Branch (4240:30): [True: 0, False: 0]
  ------------------
 4241|      0|            message = "can't modify gl_FragDepth if using early_fragment_tests";
 4242|      0|        break;
 4243|      0|    case EvqFragStencil:
  ------------------
  |  Branch (4243:5): [True: 0, False: 2.54k]
  ------------------
 4244|      0|        intermediate.setStencilReplacing();
 4245|       |        // "In addition, it is an error to statically write to gl_FragDepth in the fragment shader."
 4246|      0|        if (isEsProfile() && intermediate.getEarlyFragmentTests())
  ------------------
  |  Branch (4246:13): [True: 0, False: 0]
  |  Branch (4246:30): [True: 0, False: 0]
  ------------------
 4247|      0|            message = "can't modify EvqFragStencil if using early_fragment_tests";
 4248|      0|        break;
 4249|       |
 4250|      0|    case EvqtaskPayloadSharedEXT:
  ------------------
  |  Branch (4250:5): [True: 0, False: 2.54k]
  ------------------
 4251|      0|        if (language == EShLangMesh)
  ------------------
  |  Branch (4251:13): [True: 0, False: 0]
  ------------------
 4252|      0|            message = "can't modify variable with storage qualifier taskPayloadSharedEXT in mesh shaders";
 4253|      0|        break;
 4254|  2.54k|    default:
  ------------------
  |  Branch (4254:5): [True: 2.54k, False: 0]
  ------------------
 4255|  2.54k|        break;
 4256|  2.54k|    }
 4257|       |
 4258|  2.54k|    if (message == nullptr && binaryNode == nullptr && symNode == nullptr) {
  ------------------
  |  Branch (4258:9): [True: 2.54k, False: 0]
  |  Branch (4258:31): [True: 2.07k, False: 471]
  |  Branch (4258:56): [True: 0, False: 2.07k]
  ------------------
 4259|      0|        error(loc, " l-value required", op, "", "");
 4260|       |
 4261|      0|        return true;
 4262|      0|    }
 4263|       |
 4264|       |    //
 4265|       |    // Everything else is okay, no error.
 4266|       |    //
 4267|  2.54k|    if (message == nullptr)
  ------------------
  |  Branch (4267:9): [True: 2.54k, False: 0]
  ------------------
 4268|  2.54k|        return false;
 4269|       |
 4270|       |    //
 4271|       |    // If we get here, we have an error and a message.
 4272|       |    //
 4273|      0|    if (symNode)
  ------------------
  |  Branch (4273:9): [True: 0, False: 0]
  ------------------
 4274|      0|        error(loc, " l-value required", op, "\"%s\" (%s)", symbol, message);
 4275|      0|    else
 4276|      0|        error(loc, " l-value required", op, "(%s)", message);
 4277|       |
 4278|      0|    return true;
 4279|  2.54k|}
_ZN7glslang13TParseContext16rValueErrorCheckERKNS_10TSourceLocEPKcPNS_12TIntermTypedE:
 4283|  6.93k|{
 4284|       |    // Let the base class check errors
 4285|  6.93k|    TParseContextBase::rValueErrorCheck(loc, op, node);
 4286|       |
 4287|  6.93k|    TIntermSymbol* symNode = node->getAsSymbolNode();
 4288|  6.93k|    if (!(symNode && symNode->getQualifier().isWriteOnly())) // base class checks
  ------------------
  |  Branch (4288:11): [True: 432, False: 6.50k]
  |  Branch (4288:22): [True: 0, False: 432]
  ------------------
 4289|  6.93k|        if (symNode && symNode->getQualifier().isExplicitInterpolation())
  ------------------
  |  Branch (4289:13): [True: 432, False: 6.50k]
  |  Branch (4289:24): [True: 0, False: 432]
  ------------------
 4290|      0|            error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str());
 4291|       |
 4292|       |    // local_size_{xyz} must be assigned or specialized before gl_WorkGroupSize can be assigned.
 4293|  6.93k|    if(node->getQualifier().builtIn == EbvWorkGroupSize &&
  ------------------
  |  Branch (4293:8): [True: 0, False: 6.93k]
  ------------------
 4294|      0|       !(intermediate.isLocalSizeSet() || intermediate.isLocalSizeSpecialized()))
  ------------------
  |  Branch (4294:10): [True: 0, False: 0]
  |  Branch (4294:43): [True: 0, False: 0]
  ------------------
 4295|      0|        error(loc, "can't read from gl_WorkGroupSize before a fixed workgroup size has been declared", op, "");
 4296|  6.93k|}
_ZN7glslang13TParseContext18constantValueCheckEPNS_12TIntermTypedEPKc:
 4303|    612|{
 4304|    612|    if (! node->getQualifier().isConstant())
  ------------------
  |  Branch (4304:9): [True: 0, False: 612]
  ------------------
 4305|      0|        error(node->getLoc(), "constant expression required", token, "");
 4306|    612|}
_ZN7glslang13TParseContext12integerCheckEPKNS_12TIntermTypedEPKc:
 4313|    612|{
 4314|    612|    auto from_type = node->getBasicType();
 4315|    612|    if ((from_type == EbtInt || from_type == EbtUint ||
  ------------------
  |  Branch (4315:10): [True: 612, False: 0]
  |  Branch (4315:33): [True: 0, False: 0]
  ------------------
 4316|      0|         intermediate.canImplicitlyPromote(from_type, EbtInt, EOpNull) ||
  ------------------
  |  Branch (4316:10): [True: 0, False: 0]
  ------------------
 4317|    612|         intermediate.canImplicitlyPromote(from_type, EbtUint, EOpNull)) && node->isScalar())
  ------------------
  |  Branch (4317:10): [True: 0, False: 0]
  |  Branch (4317:77): [True: 612, False: 0]
  ------------------
 4318|    612|        return;
 4319|       |
 4320|      0|    error(node->getLoc(), "scalar integer expression required", token, "");
 4321|      0|}
_ZN7glslang13TParseContext11globalCheckERKNS_10TSourceLocEPKc:
 4343|  23.5k|{
 4344|  23.5k|    if (! symbolTable.atGlobalLevel())
  ------------------
  |  Branch (4344:9): [True: 0, False: 23.5k]
  ------------------
 4345|      0|        error(loc, "not allowed in nested scope", token, "");
 4346|  23.5k|}
_ZN7glslang13TParseContext18reservedErrorCheckERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 4352|   143k|{
 4353|       |    // "Identifiers starting with "gl_" are reserved for use by OpenGL, and may not be
 4354|       |    // declared in a shader; this results in a compile-time error."
 4355|   143k|    if (! symbolTable.atBuiltInLevel()) {
  ------------------
  |  Branch (4355:9): [True: 2.79k, False: 140k]
  ------------------
 4356|       |        // The extension GL_EXT_conservative_depth allows us to declare "gl_FragDepth".
 4357|  2.79k|        if (identifier == "gl_FragDepth" && extensionTurnedOn(E_GL_EXT_conservative_depth))
  ------------------
  |  Branch (4357:13): [True: 0, False: 2.79k]
  |  Branch (4357:45): [True: 0, False: 0]
  ------------------
 4358|      0|            return;
 4359|       |
 4360|  2.79k|        if (builtInName(identifier) && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics))
  ------------------
  |  Branch (4360:13): [True: 0, False: 2.79k]
  |  Branch (4360:40): [True: 0, False: 0]
  ------------------
 4361|       |            // The extension GL_EXT_spirv_intrinsics allows us to declare identifiers starting with "gl_".
 4362|      0|            error(loc, "identifiers starting with \"gl_\" are reserved", identifier.c_str(), "");
 4363|       |
 4364|       |        // "__" are not supposed to be an error.  ES 300 (and desktop) added the clarification:
 4365|       |        // "In addition, all identifiers containing two consecutive underscores (__) are
 4366|       |        // reserved; using such a name does not itself result in an error, but may result
 4367|       |        // in undefined behavior."
 4368|       |        // however, before that, ES tests required an error.
 4369|  2.79k|        if (identifier.find("__") != TString::npos && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) {
  ------------------
  |  Branch (4369:13): [True: 0, False: 2.79k]
  |  Branch (4369:55): [True: 0, False: 0]
  ------------------
 4370|       |            // The extension GL_EXT_spirv_intrinsics allows us to declare identifiers starting with "__".
 4371|      0|            if (isEsProfile() && version < 300)
  ------------------
  |  Branch (4371:17): [True: 0, False: 0]
  |  Branch (4371:34): [True: 0, False: 0]
  ------------------
 4372|      0|                error(loc, "identifiers containing consecutive underscores (\"__\") are reserved, and an error if version < 300", identifier.c_str(), "");
 4373|      0|            else
 4374|      0|                warn(loc, "identifiers containing consecutive underscores (\"__\") are reserved", identifier.c_str(), "");
 4375|      0|        }
 4376|  2.79k|    }
 4377|   143k|}
_ZN7glslang13TParseContext20reservedPpErrorCheckERKNS_10TSourceLocEPKcS5_:
 4383|     35|{
 4384|       |    // "__" are not supposed to be an error.  ES 300 (and desktop) added the clarification:
 4385|       |    // "All macro names containing two consecutive underscores ( __ ) are reserved;
 4386|       |    // defining such a name does not itself result in an error, but may result in
 4387|       |    // undefined behavior.  All macro names prefixed with "GL_" ("GL" followed by a
 4388|       |    // single underscore) are also reserved, and defining such a name results in a
 4389|       |    // compile-time error."
 4390|       |    // however, before that, ES tests required an error.
 4391|     35|    if (strncmp(identifier, "GL_", 3) == 0 && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics))
  ------------------
  |  Branch (4391:9): [True: 0, False: 35]
  |  Branch (4391:47): [True: 0, False: 0]
  ------------------
 4392|       |        // The extension GL_EXT_spirv_intrinsics allows us to declare macros prefixed with "GL_".
 4393|      0|        ppError(loc, "names beginning with \"GL_\" can't be (un)defined:", op,  identifier);
 4394|     35|    else if (strncmp(identifier, "defined", 8) == 0)
  ------------------
  |  Branch (4394:14): [True: 0, False: 35]
  ------------------
 4395|      0|        if (relaxedErrors())
  ------------------
  |  Branch (4395:13): [True: 0, False: 0]
  ------------------
 4396|      0|            ppWarn(loc, "\"defined\" is (un)defined:", op,  identifier);
 4397|      0|        else
 4398|      0|            ppError(loc, "\"defined\" can't be (un)defined:", op,  identifier);
 4399|     35|    else if (strstr(identifier, "__") != nullptr && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) {
  ------------------
  |  Branch (4399:14): [True: 0, False: 35]
  |  Branch (4399:53): [True: 0, False: 0]
  ------------------
 4400|       |        // The extension GL_EXT_spirv_intrinsics allows us to declare macros prefixed with "__".
 4401|      0|        if (isEsProfile() && version >= 300 &&
  ------------------
  |  Branch (4401:13): [True: 0, False: 0]
  |  Branch (4401:30): [True: 0, False: 0]
  ------------------
 4402|      0|            (strcmp(identifier, "__LINE__") == 0 ||
  ------------------
  |  Branch (4402:14): [True: 0, False: 0]
  ------------------
 4403|      0|             strcmp(identifier, "__FILE__") == 0 ||
  ------------------
  |  Branch (4403:14): [True: 0, False: 0]
  ------------------
 4404|      0|             strcmp(identifier, "__VERSION__") == 0))
  ------------------
  |  Branch (4404:14): [True: 0, False: 0]
  ------------------
 4405|      0|            ppError(loc, "predefined names can't be (un)defined:", op,  identifier);
 4406|      0|        else {
 4407|      0|            if (isEsProfile() && version < 300 && !relaxedErrors())
  ------------------
  |  Branch (4407:17): [True: 0, False: 0]
  |  Branch (4407:34): [True: 0, False: 0]
  |  Branch (4407:51): [True: 0, False: 0]
  ------------------
 4408|      0|                ppError(loc, "names containing consecutive underscores are reserved, and an error if version < 300:", op, identifier);
 4409|      0|            else
 4410|      0|                ppWarn(loc, "names containing consecutive underscores are reserved:", op, identifier);
 4411|      0|        }
 4412|      0|    }
 4413|     35|}
_ZN7glslang13TParseContext11builtInNameERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 4449|  16.5k|{
 4450|  16.5k|    return identifier.compare(0, 3, "gl_") == 0;
 4451|  16.5k|}
_ZN7glslang13TParseContext16constructorErrorERKNS_10TSourceLocEP11TIntermNodeRNS_9TFunctionENS_9TOperatorERNS_5TTypeE:
 4473|    804|{
 4474|       |    // See if the constructor does not establish the main type, only requalifies
 4475|       |    // it, in which case the type comes from the argument instead of from the
 4476|       |    // constructor function.
 4477|    804|    switch (op) {
 4478|      0|    case EOpConstructNonuniform:
  ------------------
  |  Branch (4478:5): [True: 0, False: 804]
  ------------------
 4479|      0|        if (node != nullptr && node->getAsTyped() != nullptr) {
  ------------------
  |  Branch (4479:13): [True: 0, False: 0]
  |  Branch (4479:32): [True: 0, False: 0]
  ------------------
 4480|      0|            type.shallowCopy(node->getAsTyped()->getType());
 4481|      0|            type.getQualifier().makeTemporary();
 4482|      0|            type.getQualifier().nonUniform = true;
 4483|      0|        }
 4484|      0|        break;
 4485|    804|    default:
  ------------------
  |  Branch (4485:5): [True: 804, False: 0]
  ------------------
 4486|    804|        type.shallowCopy(function.getType());
 4487|    804|        break;
 4488|    804|    }
 4489|       |
 4490|    804|    TString constructorString;
 4491|    804|    if (intermediate.getEnhancedMsgs())
  ------------------
  |  Branch (4491:9): [True: 0, False: 804]
  ------------------
 4492|      0|        constructorString.append(type.getCompleteString(true, false, false, true)).append(" constructor");
 4493|    804|    else
 4494|    804|        constructorString.append("constructor");
 4495|       |
 4496|       |    // See if it's a matrix
 4497|    804|    bool constructingMatrix = false;
 4498|    804|    switch (op) {
 4499|     45|    case EOpConstructTextureSampler:
  ------------------
  |  Branch (4499:5): [True: 45, False: 759]
  ------------------
 4500|     45|        return constructorTextureSamplerError(loc, function);
 4501|      0|    case EOpConstructMat2x2:
  ------------------
  |  Branch (4501:5): [True: 0, False: 804]
  ------------------
 4502|      0|    case EOpConstructMat2x3:
  ------------------
  |  Branch (4502:5): [True: 0, False: 804]
  ------------------
 4503|      0|    case EOpConstructMat2x4:
  ------------------
  |  Branch (4503:5): [True: 0, False: 804]
  ------------------
 4504|      0|    case EOpConstructMat3x2:
  ------------------
  |  Branch (4504:5): [True: 0, False: 804]
  ------------------
 4505|      0|    case EOpConstructMat3x3:
  ------------------
  |  Branch (4505:5): [True: 0, False: 804]
  ------------------
 4506|      0|    case EOpConstructMat3x4:
  ------------------
  |  Branch (4506:5): [True: 0, False: 804]
  ------------------
 4507|      0|    case EOpConstructMat4x2:
  ------------------
  |  Branch (4507:5): [True: 0, False: 804]
  ------------------
 4508|      0|    case EOpConstructMat4x3:
  ------------------
  |  Branch (4508:5): [True: 0, False: 804]
  ------------------
 4509|      0|    case EOpConstructMat4x4:
  ------------------
  |  Branch (4509:5): [True: 0, False: 804]
  ------------------
 4510|      0|    case EOpConstructDMat2x2:
  ------------------
  |  Branch (4510:5): [True: 0, False: 804]
  ------------------
 4511|      0|    case EOpConstructDMat2x3:
  ------------------
  |  Branch (4511:5): [True: 0, False: 804]
  ------------------
 4512|      0|    case EOpConstructDMat2x4:
  ------------------
  |  Branch (4512:5): [True: 0, False: 804]
  ------------------
 4513|      0|    case EOpConstructDMat3x2:
  ------------------
  |  Branch (4513:5): [True: 0, False: 804]
  ------------------
 4514|      0|    case EOpConstructDMat3x3:
  ------------------
  |  Branch (4514:5): [True: 0, False: 804]
  ------------------
 4515|      0|    case EOpConstructDMat3x4:
  ------------------
  |  Branch (4515:5): [True: 0, False: 804]
  ------------------
 4516|      0|    case EOpConstructDMat4x2:
  ------------------
  |  Branch (4516:5): [True: 0, False: 804]
  ------------------
 4517|      0|    case EOpConstructDMat4x3:
  ------------------
  |  Branch (4517:5): [True: 0, False: 804]
  ------------------
 4518|      0|    case EOpConstructDMat4x4:
  ------------------
  |  Branch (4518:5): [True: 0, False: 804]
  ------------------
 4519|      0|    case EOpConstructF16Mat2x2:
  ------------------
  |  Branch (4519:5): [True: 0, False: 804]
  ------------------
 4520|      0|    case EOpConstructF16Mat2x3:
  ------------------
  |  Branch (4520:5): [True: 0, False: 804]
  ------------------
 4521|      0|    case EOpConstructF16Mat2x4:
  ------------------
  |  Branch (4521:5): [True: 0, False: 804]
  ------------------
 4522|      0|    case EOpConstructF16Mat3x2:
  ------------------
  |  Branch (4522:5): [True: 0, False: 804]
  ------------------
 4523|      0|    case EOpConstructF16Mat3x3:
  ------------------
  |  Branch (4523:5): [True: 0, False: 804]
  ------------------
 4524|      0|    case EOpConstructF16Mat3x4:
  ------------------
  |  Branch (4524:5): [True: 0, False: 804]
  ------------------
 4525|      0|    case EOpConstructF16Mat4x2:
  ------------------
  |  Branch (4525:5): [True: 0, False: 804]
  ------------------
 4526|      0|    case EOpConstructF16Mat4x3:
  ------------------
  |  Branch (4526:5): [True: 0, False: 804]
  ------------------
 4527|      0|    case EOpConstructF16Mat4x4:
  ------------------
  |  Branch (4527:5): [True: 0, False: 804]
  ------------------
 4528|      0|        constructingMatrix = true;
 4529|      0|        break;
 4530|    759|    default:
  ------------------
  |  Branch (4530:5): [True: 759, False: 45]
  ------------------
 4531|    759|        break;
 4532|    804|    }
 4533|       |
 4534|       |    //
 4535|       |    // Walk the arguments for first-pass checks and collection of information.
 4536|       |    //
 4537|       |
 4538|    759|    int size = 0;
 4539|    759|    bool constType = true;
 4540|    759|    bool specConstType = false;   // value is only valid if constType is true
 4541|    759|    bool full = false;
 4542|    759|    bool overFull = false;
 4543|    759|    bool matrixInMatrix = false;
 4544|    759|    bool arrayArg = false;
 4545|    759|    bool floatArgument = false;
 4546|    759|    bool intArgument = false;
 4547|  1.67k|    for (int arg = 0; arg < function.getParamCount(); ++arg) {
  ------------------
  |  Branch (4547:23): [True: 918, False: 759]
  ------------------
 4548|    918|        if (function[arg].type->isArray()) {
  ------------------
  |  Branch (4548:13): [True: 0, False: 918]
  ------------------
 4549|      0|            if (function[arg].type->isUnsizedArray()) {
  ------------------
  |  Branch (4549:17): [True: 0, False: 0]
  ------------------
 4550|       |                // Can't construct from an unsized array.
 4551|      0|                error(loc, "array argument must be sized", constructorString.c_str(), "");
 4552|      0|                return true;
 4553|      0|            }
 4554|      0|            arrayArg = true;
 4555|      0|        }
 4556|    918|        if (constructingMatrix && function[arg].type->isMatrix())
  ------------------
  |  Branch (4556:13): [True: 0, False: 918]
  |  Branch (4556:35): [True: 0, False: 0]
  ------------------
 4557|      0|            matrixInMatrix = true;
 4558|       |
 4559|       |        // 'full' will go to true when enough args have been seen.  If we loop
 4560|       |        // again, there is an extra argument.
 4561|    918|        if (full) {
  ------------------
  |  Branch (4561:13): [True: 0, False: 918]
  ------------------
 4562|       |            // For vectors and matrices, it's okay to have too many components
 4563|       |            // available, but not okay to have unused arguments.
 4564|      0|            overFull = true;
 4565|      0|        }
 4566|       |
 4567|    918|        size += function[arg].type->computeNumComponents();
 4568|    918|        if (op != EOpConstructStruct && ! type.isArray() && size >= type.computeNumComponents())
  ------------------
  |  Branch (4568:13): [True: 918, False: 0]
  |  Branch (4568:41): [True: 906, False: 12]
  |  Branch (4568:61): [True: 519, False: 387]
  ------------------
 4569|    519|            full = true;
 4570|       |
 4571|    918|        if (! function[arg].type->getQualifier().isConstant())
  ------------------
  |  Branch (4571:13): [True: 438, False: 480]
  ------------------
 4572|    438|            constType = false;
 4573|    918|        if (function[arg].type->getQualifier().isSpecConstant())
  ------------------
  |  Branch (4573:13): [True: 0, False: 918]
  ------------------
 4574|      0|            specConstType = true;
 4575|    918|        if (function[arg].type->isFloatingDomain())
  ------------------
  |  Branch (4575:13): [True: 654, False: 264]
  ------------------
 4576|    654|            floatArgument = true;
 4577|    918|        if (function[arg].type->isIntegerDomain())
  ------------------
  |  Branch (4577:13): [True: 264, False: 654]
  ------------------
 4578|    264|            intArgument = true;
 4579|    918|        if (type.isStruct()) {
  ------------------
  |  Branch (4579:13): [True: 0, False: 918]
  ------------------
 4580|      0|            if (function[arg].type->contains16BitFloat()) {
  ------------------
  |  Branch (4580:17): [True: 0, False: 0]
  ------------------
 4581|      0|                requireFloat16Arithmetic(loc, constructorString.c_str(), "can't construct structure containing 16-bit type");
 4582|      0|            }
 4583|      0|            if (function[arg].type->contains16BitInt()) {
  ------------------
  |  Branch (4583:17): [True: 0, False: 0]
  ------------------
 4584|      0|                requireInt16Arithmetic(loc, constructorString.c_str(), "can't construct structure containing 16-bit type");
 4585|      0|            }
 4586|      0|            if (function[arg].type->contains8BitInt()) {
  ------------------
  |  Branch (4586:17): [True: 0, False: 0]
  ------------------
 4587|      0|                requireInt8Arithmetic(loc, constructorString.c_str(), "can't construct structure containing 8-bit type");
 4588|      0|            }
 4589|      0|        }
 4590|    918|    }
 4591|    759|    if (op == EOpConstructNonuniform)
  ------------------
  |  Branch (4591:9): [True: 0, False: 759]
  ------------------
 4592|      0|        constType = false;
 4593|       |
 4594|    759|    switch (op) {
 4595|      0|    case EOpConstructFloat16:
  ------------------
  |  Branch (4595:5): [True: 0, False: 759]
  ------------------
 4596|      0|    case EOpConstructF16Vec2:
  ------------------
  |  Branch (4596:5): [True: 0, False: 759]
  ------------------
 4597|      0|    case EOpConstructF16Vec3:
  ------------------
  |  Branch (4597:5): [True: 0, False: 759]
  ------------------
 4598|      0|    case EOpConstructF16Vec4:
  ------------------
  |  Branch (4598:5): [True: 0, False: 759]
  ------------------
 4599|      0|        if (type.isArray())
  ------------------
  |  Branch (4599:13): [True: 0, False: 0]
  ------------------
 4600|      0|            requireFloat16Arithmetic(loc, constructorString.c_str(), "16-bit arrays not supported");
 4601|      0|        if (type.isVector() && function.getParamCount() != 1)
  ------------------
  |  Branch (4601:13): [True: 0, False: 0]
  |  Branch (4601:32): [True: 0, False: 0]
  ------------------
 4602|      0|            requireFloat16Arithmetic(loc, constructorString.c_str(), "16-bit vectors only take vector types");
 4603|      0|        break;
 4604|      0|    case EOpConstructUint16:
  ------------------
  |  Branch (4604:5): [True: 0, False: 759]
  ------------------
 4605|      0|    case EOpConstructU16Vec2:
  ------------------
  |  Branch (4605:5): [True: 0, False: 759]
  ------------------
 4606|      0|    case EOpConstructU16Vec3:
  ------------------
  |  Branch (4606:5): [True: 0, False: 759]
  ------------------
 4607|      0|    case EOpConstructU16Vec4:
  ------------------
  |  Branch (4607:5): [True: 0, False: 759]
  ------------------
 4608|      0|    case EOpConstructInt16:
  ------------------
  |  Branch (4608:5): [True: 0, False: 759]
  ------------------
 4609|      0|    case EOpConstructI16Vec2:
  ------------------
  |  Branch (4609:5): [True: 0, False: 759]
  ------------------
 4610|      0|    case EOpConstructI16Vec3:
  ------------------
  |  Branch (4610:5): [True: 0, False: 759]
  ------------------
 4611|      0|    case EOpConstructI16Vec4:
  ------------------
  |  Branch (4611:5): [True: 0, False: 759]
  ------------------
 4612|      0|        if (type.isArray())
  ------------------
  |  Branch (4612:13): [True: 0, False: 0]
  ------------------
 4613|      0|            requireInt16Arithmetic(loc, constructorString.c_str(), "16-bit arrays not supported");
 4614|      0|        if (type.isVector() && function.getParamCount() != 1)
  ------------------
  |  Branch (4614:13): [True: 0, False: 0]
  |  Branch (4614:32): [True: 0, False: 0]
  ------------------
 4615|      0|            requireInt16Arithmetic(loc, constructorString.c_str(), "16-bit vectors only take vector types");
 4616|      0|        break;
 4617|      0|    case EOpConstructUint8:
  ------------------
  |  Branch (4617:5): [True: 0, False: 759]
  ------------------
 4618|      0|    case EOpConstructU8Vec2:
  ------------------
  |  Branch (4618:5): [True: 0, False: 759]
  ------------------
 4619|      0|    case EOpConstructU8Vec3:
  ------------------
  |  Branch (4619:5): [True: 0, False: 759]
  ------------------
 4620|      0|    case EOpConstructU8Vec4:
  ------------------
  |  Branch (4620:5): [True: 0, False: 759]
  ------------------
 4621|      0|    case EOpConstructInt8:
  ------------------
  |  Branch (4621:5): [True: 0, False: 759]
  ------------------
 4622|      0|    case EOpConstructI8Vec2:
  ------------------
  |  Branch (4622:5): [True: 0, False: 759]
  ------------------
 4623|      0|    case EOpConstructI8Vec3:
  ------------------
  |  Branch (4623:5): [True: 0, False: 759]
  ------------------
 4624|      0|    case EOpConstructI8Vec4:
  ------------------
  |  Branch (4624:5): [True: 0, False: 759]
  ------------------
 4625|      0|        if (type.isArray())
  ------------------
  |  Branch (4625:13): [True: 0, False: 0]
  ------------------
 4626|      0|            requireInt8Arithmetic(loc, constructorString.c_str(), "8-bit arrays not supported");
 4627|      0|        if (type.isVector() && function.getParamCount() != 1)
  ------------------
  |  Branch (4627:13): [True: 0, False: 0]
  |  Branch (4627:32): [True: 0, False: 0]
  ------------------
 4628|      0|            requireInt8Arithmetic(loc, constructorString.c_str(), "8-bit vectors only take vector types");
 4629|      0|        break;
 4630|    759|    default:
  ------------------
  |  Branch (4630:5): [True: 759, False: 0]
  ------------------
 4631|    759|        break;
 4632|    759|    }
 4633|       |
 4634|       |    // inherit constness from children
 4635|    759|    if (constType) {
  ------------------
  |  Branch (4635:9): [True: 321, False: 438]
  ------------------
 4636|    321|        bool makeSpecConst;
 4637|       |        // Finish pinning down spec-const semantics
 4638|    321|        if (specConstType) {
  ------------------
  |  Branch (4638:13): [True: 0, False: 321]
  ------------------
 4639|      0|            switch (op) {
 4640|      0|            case EOpConstructInt8:
  ------------------
  |  Branch (4640:13): [True: 0, False: 0]
  ------------------
 4641|      0|            case EOpConstructInt:
  ------------------
  |  Branch (4641:13): [True: 0, False: 0]
  ------------------
 4642|      0|            case EOpConstructUint:
  ------------------
  |  Branch (4642:13): [True: 0, False: 0]
  ------------------
 4643|      0|            case EOpConstructBool:
  ------------------
  |  Branch (4643:13): [True: 0, False: 0]
  ------------------
 4644|      0|            case EOpConstructBVec2:
  ------------------
  |  Branch (4644:13): [True: 0, False: 0]
  ------------------
 4645|      0|            case EOpConstructBVec3:
  ------------------
  |  Branch (4645:13): [True: 0, False: 0]
  ------------------
 4646|      0|            case EOpConstructBVec4:
  ------------------
  |  Branch (4646:13): [True: 0, False: 0]
  ------------------
 4647|      0|            case EOpConstructIVec2:
  ------------------
  |  Branch (4647:13): [True: 0, False: 0]
  ------------------
 4648|      0|            case EOpConstructIVec3:
  ------------------
  |  Branch (4648:13): [True: 0, False: 0]
  ------------------
 4649|      0|            case EOpConstructIVec4:
  ------------------
  |  Branch (4649:13): [True: 0, False: 0]
  ------------------
 4650|      0|            case EOpConstructUVec2:
  ------------------
  |  Branch (4650:13): [True: 0, False: 0]
  ------------------
 4651|      0|            case EOpConstructUVec3:
  ------------------
  |  Branch (4651:13): [True: 0, False: 0]
  ------------------
 4652|      0|            case EOpConstructUVec4:
  ------------------
  |  Branch (4652:13): [True: 0, False: 0]
  ------------------
 4653|      0|            case EOpConstructUint8:
  ------------------
  |  Branch (4653:13): [True: 0, False: 0]
  ------------------
 4654|      0|            case EOpConstructInt16:
  ------------------
  |  Branch (4654:13): [True: 0, False: 0]
  ------------------
 4655|      0|            case EOpConstructUint16:
  ------------------
  |  Branch (4655:13): [True: 0, False: 0]
  ------------------
 4656|      0|            case EOpConstructInt64:
  ------------------
  |  Branch (4656:13): [True: 0, False: 0]
  ------------------
 4657|      0|            case EOpConstructUint64:
  ------------------
  |  Branch (4657:13): [True: 0, False: 0]
  ------------------
 4658|      0|            case EOpConstructI8Vec2:
  ------------------
  |  Branch (4658:13): [True: 0, False: 0]
  ------------------
 4659|      0|            case EOpConstructI8Vec3:
  ------------------
  |  Branch (4659:13): [True: 0, False: 0]
  ------------------
 4660|      0|            case EOpConstructI8Vec4:
  ------------------
  |  Branch (4660:13): [True: 0, False: 0]
  ------------------
 4661|      0|            case EOpConstructU8Vec2:
  ------------------
  |  Branch (4661:13): [True: 0, False: 0]
  ------------------
 4662|      0|            case EOpConstructU8Vec3:
  ------------------
  |  Branch (4662:13): [True: 0, False: 0]
  ------------------
 4663|      0|            case EOpConstructU8Vec4:
  ------------------
  |  Branch (4663:13): [True: 0, False: 0]
  ------------------
 4664|      0|            case EOpConstructI16Vec2:
  ------------------
  |  Branch (4664:13): [True: 0, False: 0]
  ------------------
 4665|      0|            case EOpConstructI16Vec3:
  ------------------
  |  Branch (4665:13): [True: 0, False: 0]
  ------------------
 4666|      0|            case EOpConstructI16Vec4:
  ------------------
  |  Branch (4666:13): [True: 0, False: 0]
  ------------------
 4667|      0|            case EOpConstructU16Vec2:
  ------------------
  |  Branch (4667:13): [True: 0, False: 0]
  ------------------
 4668|      0|            case EOpConstructU16Vec3:
  ------------------
  |  Branch (4668:13): [True: 0, False: 0]
  ------------------
 4669|      0|            case EOpConstructU16Vec4:
  ------------------
  |  Branch (4669:13): [True: 0, False: 0]
  ------------------
 4670|      0|            case EOpConstructI64Vec2:
  ------------------
  |  Branch (4670:13): [True: 0, False: 0]
  ------------------
 4671|      0|            case EOpConstructI64Vec3:
  ------------------
  |  Branch (4671:13): [True: 0, False: 0]
  ------------------
 4672|      0|            case EOpConstructI64Vec4:
  ------------------
  |  Branch (4672:13): [True: 0, False: 0]
  ------------------
 4673|      0|            case EOpConstructU64Vec2:
  ------------------
  |  Branch (4673:13): [True: 0, False: 0]
  ------------------
 4674|      0|            case EOpConstructU64Vec3:
  ------------------
  |  Branch (4674:13): [True: 0, False: 0]
  ------------------
 4675|      0|            case EOpConstructU64Vec4:
  ------------------
  |  Branch (4675:13): [True: 0, False: 0]
  ------------------
 4676|       |                // This was the list of valid ones, if they aren't converting from float
 4677|       |                // and aren't making an array.
 4678|      0|                makeSpecConst = ! floatArgument && ! type.isArray();
  ------------------
  |  Branch (4678:33): [True: 0, False: 0]
  |  Branch (4678:52): [True: 0, False: 0]
  ------------------
 4679|      0|                break;
 4680|       |
 4681|      0|            case EOpConstructVec2:
  ------------------
  |  Branch (4681:13): [True: 0, False: 0]
  ------------------
 4682|      0|            case EOpConstructVec3:
  ------------------
  |  Branch (4682:13): [True: 0, False: 0]
  ------------------
 4683|      0|            case EOpConstructVec4:
  ------------------
  |  Branch (4683:13): [True: 0, False: 0]
  ------------------
 4684|       |                // This was the list of valid ones, if they aren't converting from int
 4685|       |                // and aren't making an array.
 4686|      0|                makeSpecConst = ! intArgument && !type.isArray();
  ------------------
  |  Branch (4686:33): [True: 0, False: 0]
  |  Branch (4686:50): [True: 0, False: 0]
  ------------------
 4687|      0|                break;
 4688|       |
 4689|      0|            case EOpConstructCooperativeMatrixNV:
  ------------------
  |  Branch (4689:13): [True: 0, False: 0]
  ------------------
 4690|      0|            case EOpConstructCooperativeMatrixKHR:
  ------------------
  |  Branch (4690:13): [True: 0, False: 0]
  ------------------
 4691|      0|            case EOpConstructStruct:
  ------------------
  |  Branch (4691:13): [True: 0, False: 0]
  ------------------
 4692|      0|                {
 4693|      0|                    const char *specConstantCompositeExt[] = { E_GL_EXT_spec_constant_composites };
 4694|      0|                    if (checkExtensionsRequested(loc, 1, specConstantCompositeExt, "spec constant aggregate constructor")) {
  ------------------
  |  Branch (4694:25): [True: 0, False: 0]
  ------------------
 4695|      0|                        makeSpecConst = true;
 4696|      0|                    } else {
 4697|      0|                        makeSpecConst = false;
 4698|      0|                    }
 4699|      0|                }
 4700|      0|                break;
 4701|       |
 4702|      0|            default:
  ------------------
  |  Branch (4702:13): [True: 0, False: 0]
  ------------------
 4703|       |                // anything else wasn't white-listed in the spec as a conversion
 4704|      0|                makeSpecConst = false;
 4705|      0|                break;
 4706|      0|            }
 4707|      0|        } else
 4708|    321|            makeSpecConst = false;
 4709|       |
 4710|    321|        if (makeSpecConst)
  ------------------
  |  Branch (4710:13): [True: 0, False: 321]
  ------------------
 4711|      0|            type.getQualifier().makeSpecConstant();
 4712|    321|        else if (specConstType)
  ------------------
  |  Branch (4712:18): [True: 0, False: 321]
  ------------------
 4713|      0|            type.getQualifier().makeTemporary();
 4714|    321|        else
 4715|    321|            type.getQualifier().storage = EvqConst;
 4716|    321|    }
 4717|       |
 4718|    759|    if (type.isArray()) {
  ------------------
  |  Branch (4718:9): [True: 3, False: 756]
  ------------------
 4719|      3|        if (function.getParamCount() == 0) {
  ------------------
  |  Branch (4719:13): [True: 0, False: 3]
  ------------------
 4720|      0|            error(loc, "array constructor must have at least one argument", constructorString.c_str(), "");
 4721|      0|            return true;
 4722|      0|        }
 4723|       |
 4724|      3|        if (type.isUnsizedArray()) {
  ------------------
  |  Branch (4724:13): [True: 0, False: 3]
  ------------------
 4725|       |            // auto adapt the constructor type to the number of arguments
 4726|      0|            type.changeOuterArraySize(function.getParamCount());
 4727|      3|        } else if (type.getOuterArraySize() != function.getParamCount()) {
  ------------------
  |  Branch (4727:20): [True: 0, False: 3]
  ------------------
 4728|      0|            error(loc, "array constructor needs one argument per array element", constructorString.c_str(), "");
 4729|      0|            return true;
 4730|      0|        }
 4731|       |
 4732|      3|        if (type.isArrayOfArrays()) {
  ------------------
  |  Branch (4732:13): [True: 0, False: 3]
  ------------------
 4733|       |            // Types have to match, but we're still making the type.
 4734|       |            // Finish making the type, and the comparison is done later
 4735|       |            // when checking for conversion.
 4736|      0|            TArraySizes& arraySizes = *type.getArraySizes();
 4737|       |
 4738|       |            // At least the dimensionalities have to match.
 4739|      0|            if (! function[0].type->isArray() ||
  ------------------
  |  Branch (4739:17): [True: 0, False: 0]
  ------------------
 4740|      0|                    arraySizes.getNumDims() != function[0].type->getArraySizes()->getNumDims() + 1) {
  ------------------
  |  Branch (4740:21): [True: 0, False: 0]
  ------------------
 4741|      0|                error(loc, "array constructor argument not correct type to construct array element", constructorString.c_str(), "");
 4742|      0|                return true;
 4743|      0|            }
 4744|       |
 4745|      0|            if (arraySizes.isInnerUnsized()) {
  ------------------
  |  Branch (4745:17): [True: 0, False: 0]
  ------------------
 4746|       |                // "Arrays of arrays ..., and the size for any dimension is optional"
 4747|       |                // That means we need to adopt (from the first argument) the other array sizes into the type.
 4748|      0|                for (int d = 1; d < arraySizes.getNumDims(); ++d) {
  ------------------
  |  Branch (4748:33): [True: 0, False: 0]
  ------------------
 4749|      0|                    if (arraySizes.getDimSize(d) == UnsizedArraySize) {
  ------------------
  |  Branch (4749:25): [True: 0, False: 0]
  ------------------
 4750|      0|                        arraySizes.setDimSize(d, function[0].type->getArraySizes()->getDimSize(d - 1));
 4751|      0|                    }
 4752|      0|                }
 4753|      0|            }
 4754|      0|        }
 4755|      3|    }
 4756|       |
 4757|    759|    if (arrayArg && op != EOpConstructStruct && ! type.isArrayOfArrays()) {
  ------------------
  |  Branch (4757:9): [True: 0, False: 759]
  |  Branch (4757:21): [True: 0, False: 0]
  |  Branch (4757:49): [True: 0, False: 0]
  ------------------
 4758|      0|        error(loc, "constructing non-array constituent from array argument", constructorString.c_str(), "");
 4759|      0|        return true;
 4760|      0|    }
 4761|       |
 4762|    759|    if (matrixInMatrix && ! type.isArray()) {
  ------------------
  |  Branch (4762:9): [True: 0, False: 759]
  |  Branch (4762:27): [True: 0, False: 0]
  ------------------
 4763|      0|        profileRequires(loc, ENoProfile, 120, nullptr, "constructing matrix from matrix");
 4764|       |
 4765|       |        // "If a matrix argument is given to a matrix constructor,
 4766|       |        // it is a compile-time error to have any other arguments."
 4767|      0|        if (function.getParamCount() != 1)
  ------------------
  |  Branch (4767:13): [True: 0, False: 0]
  ------------------
 4768|      0|            error(loc, "matrix constructed from matrix can only have one argument", constructorString.c_str(), "");
 4769|      0|        return false;
 4770|      0|    }
 4771|       |
 4772|    759|    if (overFull) {
  ------------------
  |  Branch (4772:9): [True: 0, False: 759]
  ------------------
 4773|      0|        error(loc, "too many arguments", constructorString.c_str(), "");
 4774|      0|        return true;
 4775|      0|    }
 4776|       |
 4777|    759|    if (op == EOpConstructStruct && ! type.isArray() && (int)type.getStruct()->size() != function.getParamCount()) {
  ------------------
  |  Branch (4777:9): [True: 0, False: 759]
  |  Branch (4777:37): [True: 0, False: 0]
  |  Branch (4777:57): [True: 0, False: 0]
  ------------------
 4778|      0|        error(loc, "Number of constructor parameters does not match the number of structure fields", constructorString.c_str(), "");
 4779|      0|        return true;
 4780|      0|    }
 4781|       |
 4782|    759|    if (type.isLongVector() && !isValidLongVectorElseError(loc, type)) {
  ------------------
  |  Branch (4782:9): [True: 0, False: 759]
  |  Branch (4782:32): [True: 0, False: 0]
  ------------------
 4783|      0|        return true;
 4784|      0|    }
 4785|       |
 4786|    759|    if ((op != EOpConstructStruct && size != 1 && size < type.computeNumComponents()) ||
  ------------------
  |  Branch (4786:10): [True: 759, False: 0]
  |  Branch (4786:38): [True: 324, False: 435]
  |  Branch (4786:51): [True: 0, False: 324]
  ------------------
 4787|    759|        (op == EOpConstructStruct && size < type.computeNumComponents())) {
  ------------------
  |  Branch (4787:10): [True: 0, False: 759]
  |  Branch (4787:38): [True: 0, False: 0]
  ------------------
 4788|      0|        error(loc, "not enough data provided for construction", constructorString.c_str(), "");
 4789|      0|        return true;
 4790|      0|    }
 4791|       |
 4792|    759|    if (type.isCoopMat() && function.getParamCount() != 1) {
  ------------------
  |  Branch (4792:9): [True: 0, False: 759]
  |  Branch (4792:29): [True: 0, False: 0]
  ------------------
 4793|      0|        error(loc, "wrong number of arguments", constructorString.c_str(), "");
 4794|      0|        return true;
 4795|      0|    }
 4796|    759|    if (type.isCoopMat() &&
  ------------------
  |  Branch (4796:9): [True: 0, False: 759]
  ------------------
 4797|      0|        !(function[0].type->isScalar() || function[0].type->isCoopMat())) {
  ------------------
  |  Branch (4797:11): [True: 0, False: 0]
  |  Branch (4797:43): [True: 0, False: 0]
  ------------------
 4798|      0|        error(loc, "Cooperative matrix constructor argument must be scalar or cooperative matrix", constructorString.c_str(), "");
 4799|      0|        return true;
 4800|      0|    }
 4801|       |
 4802|    759|    TIntermTyped* typed = node->getAsTyped();
 4803|    759|    if (type.isCoopMat() && typed->getType().isCoopMat() &&
  ------------------
  |  Branch (4803:9): [True: 0, False: 759]
  |  Branch (4803:29): [True: 0, False: 0]
  ------------------
 4804|      0|        ((extensionTurnedOn(E_GL_NV_cooperative_matrix2) && !type.sameCoopMatShape(typed->getType())) ||
  ------------------
  |  Branch (4804:11): [True: 0, False: 0]
  |  Branch (4804:61): [True: 0, False: 0]
  ------------------
 4805|      0|         (!extensionTurnedOn(E_GL_NV_cooperative_matrix2) && !type.sameCoopMatShapeAndUse(typed->getType())))) {
  ------------------
  |  Branch (4805:11): [True: 0, False: 0]
  |  Branch (4805:62): [True: 0, False: 0]
  ------------------
 4806|      0|        error(loc, "Cooperative matrix type parameters mismatch", constructorString.c_str(), "");
 4807|      0|        return true;
 4808|      0|    }
 4809|       |
 4810|    759|    if (typed == nullptr) {
  ------------------
  |  Branch (4810:9): [True: 0, False: 759]
  ------------------
 4811|      0|        error(loc, "constructor argument does not have a type", constructorString.c_str(), "");
 4812|      0|        return true;
 4813|      0|    }
 4814|    759|    if (op != EOpConstructStruct && op != EOpConstructNonuniform && typed->getBasicType() == EbtSampler) {
  ------------------
  |  Branch (4814:9): [True: 759, False: 0]
  |  Branch (4814:37): [True: 759, False: 0]
  |  Branch (4814:69): [True: 0, False: 759]
  ------------------
 4815|      0|        if (op == EOpConstructUVec2 && extensionTurnedOn(E_GL_ARB_bindless_texture)) {
  ------------------
  |  Branch (4815:13): [True: 0, False: 0]
  |  Branch (4815:40): [True: 0, False: 0]
  ------------------
 4816|      0|            intermediate.setBindlessTextureMode(currentCaller, AstRefTypeFunc);
 4817|      0|        }
 4818|      0|        else {
 4819|      0|            error(loc, "cannot convert a sampler", constructorString.c_str(), "");
 4820|      0|            return true;
 4821|      0|        }
 4822|      0|    }
 4823|    759|    if (op != EOpConstructStruct && typed->isAtomic()) {
  ------------------
  |  Branch (4823:9): [True: 759, False: 0]
  |  Branch (4823:37): [True: 0, False: 759]
  ------------------
 4824|      0|        error(loc, "cannot convert an atomic_uint", constructorString.c_str(), "");
 4825|      0|        return true;
 4826|      0|    }
 4827|    759|    if (typed->getBasicType() == EbtVoid) {
  ------------------
  |  Branch (4827:9): [True: 0, False: 759]
  ------------------
 4828|      0|        error(loc, "cannot convert a void", constructorString.c_str(), "");
 4829|      0|        return true;
 4830|      0|    }
 4831|       |
 4832|    759|    return false;
 4833|    759|}
_ZN7glslang13TParseContext30constructorTextureSamplerErrorERKNS_10TSourceLocERKNS_9TFunctionE:
 4838|     45|{
 4839|     45|    TString constructorName = function.getType().getBasicTypeString();  // TODO: performance: should not be making copy; interface needs to change
 4840|     45|    const char* token = constructorName.c_str();
 4841|       |    // verify the constructor for bindless texture, the input must be ivec2 or uvec2
 4842|     45|    if (function.getParamCount() == 1) {
  ------------------
  |  Branch (4842:9): [True: 0, False: 45]
  ------------------
 4843|      0|        TType* pType = function[0].type;
 4844|      0|        TBasicType basicType = pType->getBasicType();
 4845|      0|        bool isIntegerVec2 = ((basicType == EbtUint || basicType == EbtInt) && pType->getVectorSize() == 2);
  ------------------
  |  Branch (4845:32): [True: 0, False: 0]
  |  Branch (4845:56): [True: 0, False: 0]
  |  Branch (4845:80): [True: 0, False: 0]
  ------------------
 4846|      0|        bool bindlessMode = extensionTurnedOn(E_GL_ARB_bindless_texture);
 4847|      0|        if (isIntegerVec2 && bindlessMode) {
  ------------------
  |  Branch (4847:13): [True: 0, False: 0]
  |  Branch (4847:30): [True: 0, False: 0]
  ------------------
 4848|      0|            if (pType->getSampler().isImage())
  ------------------
  |  Branch (4848:17): [True: 0, False: 0]
  ------------------
 4849|      0|                intermediate.setBindlessImageMode(currentCaller, AstRefTypeFunc);
 4850|      0|            else
 4851|      0|                intermediate.setBindlessTextureMode(currentCaller, AstRefTypeFunc);
 4852|      0|            return false;
 4853|      0|        } else {
 4854|      0|            if (!bindlessMode)
  ------------------
  |  Branch (4854:17): [True: 0, False: 0]
  ------------------
 4855|      0|                error(loc, "sampler-constructor requires the extension GL_ARB_bindless_texture enabled", token, "");
 4856|      0|            else
 4857|      0|                error(loc, "sampler-constructor requires the input to be ivec2 or uvec2", token, "");
 4858|      0|            return true;
 4859|      0|        }
 4860|      0|    }
 4861|       |
 4862|       |    // exactly two arguments needed
 4863|     45|    if (function.getParamCount() != 2) {
  ------------------
  |  Branch (4863:9): [True: 0, False: 45]
  ------------------
 4864|      0|        error(loc, "sampler-constructor requires two arguments", token, "");
 4865|      0|        return true;
 4866|      0|    }
 4867|       |
 4868|       |    // For now, not allowing arrayed constructors, the rest of this function
 4869|       |    // is set up to allow them, if this test is removed:
 4870|     45|    if (function.getType().isArray()) {
  ------------------
  |  Branch (4870:9): [True: 0, False: 45]
  ------------------
 4871|      0|        error(loc, "sampler-constructor cannot make an array of samplers", token, "");
 4872|      0|        return true;
 4873|      0|    }
 4874|       |
 4875|       |    // first argument
 4876|       |    //  * the constructor's first argument must be a texture type
 4877|       |    //  * the dimensionality (1D, 2D, 3D, Cube, Rect, Buffer, MS, and Array)
 4878|       |    //    of the texture type must match that of the constructed sampler type
 4879|       |    //    (that is, the suffixes of the type of the first argument and the
 4880|       |    //    type of the constructor will be spelled the same way)
 4881|     45|    if (function[0].type->getBasicType() != EbtSampler ||
  ------------------
  |  Branch (4881:9): [True: 0, False: 45]
  ------------------
 4882|     45|        ! function[0].type->getSampler().isTexture() ||
  ------------------
  |  Branch (4882:9): [True: 0, False: 45]
  ------------------
 4883|     45|        function[0].type->isArray()) {
  ------------------
  |  Branch (4883:9): [True: 0, False: 45]
  ------------------
 4884|      0|        error(loc, "sampler-constructor first argument must be a scalar *texture* type", token, "");
 4885|      0|        return true;
 4886|      0|    }
 4887|       |
 4888|       |    // simulate the first argument's impact on the result type, so it can be compared with the encapsulated operator!=()
 4889|     45|    TSampler texture = function.getType().getSampler();
 4890|     45|    texture.setCombined(false);
 4891|     45|    texture.shadow = false;
 4892|     45|    if (function[0].type->getSampler().isTileAttachmentQCOM()) {
  ------------------
  |  Branch (4892:9): [True: 0, False: 45]
  ------------------
 4893|       |      //TSampler& texture = const_cast<TFunction&>(function).getWritableType().getSampler();
 4894|      0|      texture.image = true;
 4895|      0|      texture.tileQCOM = true;
 4896|      0|    }
 4897|     45|    if (texture != function[0].type->getSampler()) {
  ------------------
  |  Branch (4897:9): [True: 0, False: 45]
  ------------------
 4898|      0|        error(loc, "sampler-constructor first argument must be a *texture* type"
 4899|      0|                   " matching the dimensionality and sampled type of the constructor", token, "");
 4900|      0|        return true;
 4901|      0|    }
 4902|       |
 4903|       |    // second argument
 4904|       |    //   * the constructor's second argument must be a scalar of type
 4905|       |    //     *sampler* or *samplerShadow*
 4906|     45|    if (  function[1].type->getBasicType() != EbtSampler ||
  ------------------
  |  Branch (4906:11): [True: 0, False: 45]
  ------------------
 4907|     45|        ! function[1].type->getSampler().isPureSampler() ||
  ------------------
  |  Branch (4907:9): [True: 0, False: 45]
  ------------------
 4908|     45|          function[1].type->isArray()) {
  ------------------
  |  Branch (4908:11): [True: 0, False: 45]
  ------------------
 4909|      0|        error(loc, "sampler-constructor second argument must be a scalar sampler or samplerShadow", token, "");
 4910|      0|        return true;
 4911|      0|    }
 4912|       |
 4913|     45|    return false;
 4914|     45|}
_ZN7glslang13TParseContext14voidErrorCheckERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEENS_10TBasicTypeE:
 4921|  14.2k|{
 4922|  14.2k|    if (basicType == EbtVoid) {
  ------------------
  |  Branch (4922:9): [True: 0, False: 14.2k]
  ------------------
 4923|      0|        error(loc, "illegal use of type 'void'", identifier.c_str(), "");
 4924|      0|        return true;
 4925|      0|    }
 4926|       |
 4927|  14.2k|    return false;
 4928|  14.2k|}
_ZN7glslang13TParseContext12samplerCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEEPNS_12TIntermTypedE:
 4945|  13.7k|{
 4946|       |    // Check that the appropriate extension is enabled if external sampler is used.
 4947|       |    // There are two extensions. The correct one must be used based on GLSL version.
 4948|  13.7k|    if (type.getBasicType() == EbtSampler && type.getSampler().isExternal()) {
  ------------------
  |  Branch (4948:9): [True: 264, False: 13.4k]
  |  Branch (4948:46): [True: 0, False: 264]
  ------------------
 4949|      0|        if (version < 300) {
  ------------------
  |  Branch (4949:13): [True: 0, False: 0]
  ------------------
 4950|      0|            requireExtensions(loc, 1, &E_GL_OES_EGL_image_external, "samplerExternalOES");
 4951|      0|        } else {
 4952|      0|            requireExtensions(loc, 1, &E_GL_OES_EGL_image_external_essl3, "samplerExternalOES");
 4953|      0|        }
 4954|      0|    }
 4955|  13.7k|    if (type.getSampler().isYuv()) {
  ------------------
  |  Branch (4955:9): [True: 0, False: 13.7k]
  ------------------
 4956|      0|        requireExtensions(loc, 1, &E_GL_EXT_YUV_target, "__samplerExternal2DY2YEXT");
 4957|      0|    }
 4958|       |
 4959|  13.7k|    if (type.getQualifier().storage == EvqUniform)
  ------------------
  |  Branch (4959:9): [True: 399, False: 13.3k]
  ------------------
 4960|    399|        return;
 4961|       |
 4962|  13.3k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtSampler)) {
  ------------------
  |  Branch (4962:9): [True: 0, False: 13.3k]
  |  Branch (4962:45): [True: 0, False: 0]
  ------------------
 4963|       |        // For bindless texture, sampler can be declared as an struct member
 4964|      0|        if (extensionTurnedOn(E_GL_ARB_bindless_texture)) {
  ------------------
  |  Branch (4964:13): [True: 0, False: 0]
  ------------------
 4965|      0|            if (type.getSampler().isImage())
  ------------------
  |  Branch (4965:17): [True: 0, False: 0]
  ------------------
 4966|      0|                intermediate.setBindlessImageMode(currentCaller, AstRefTypeVar);
 4967|      0|            else
 4968|      0|                intermediate.setBindlessTextureMode(currentCaller, AstRefTypeVar);
 4969|      0|        }
 4970|      0|        else {
 4971|      0|            error(loc, "non-uniform struct contains a sampler or image:", type.getBasicTypeString().c_str(), identifier.c_str());
 4972|      0|        }
 4973|      0|    }
 4974|  13.3k|    else if (type.getBasicType() == EbtSampler && type.getQualifier().storage != EvqUniform) {
  ------------------
  |  Branch (4974:14): [True: 0, False: 13.3k]
  |  Branch (4974:51): [True: 0, False: 0]
  ------------------
 4975|       |        // For bindless texture, sampler can be declared as an input/output/block member
 4976|      0|        if (extensionTurnedOn(E_GL_ARB_bindless_texture)) {
  ------------------
  |  Branch (4976:13): [True: 0, False: 0]
  ------------------
 4977|      0|            if (type.getSampler().isImage())
  ------------------
  |  Branch (4977:17): [True: 0, False: 0]
  ------------------
 4978|      0|                intermediate.setBindlessImageMode(currentCaller, AstRefTypeVar);
 4979|      0|            else
 4980|      0|                intermediate.setBindlessTextureMode(currentCaller, AstRefTypeVar);
 4981|      0|        }
 4982|      0|        else {
 4983|       |            // non-uniform sampler
 4984|       |            // not yet:  okay if it has an initializer
 4985|       |            // if (! initializer)
 4986|      0|            if (type.getSampler().isAttachmentEXT() && type.getQualifier().storage != EvqTileImageEXT)
  ------------------
  |  Branch (4986:17): [True: 0, False: 0]
  |  Branch (4986:56): [True: 0, False: 0]
  ------------------
 4987|      0|                 error(loc, "can only be used in tileImageEXT variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
 4988|      0|            else if (type.getQualifier().storage != EvqTileImageEXT)
  ------------------
  |  Branch (4988:22): [True: 0, False: 0]
  ------------------
 4989|      0|                 error(loc, "sampler/image types can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
 4990|      0|        }
 4991|      0|    }
 4992|  13.3k|    else if (type.isTensorARM() && type.getQualifier().storage != EvqUniform) {
  ------------------
  |  Branch (4992:14): [True: 0, False: 13.3k]
  |  Branch (4992:36): [True: 0, False: 0]
  ------------------
 4993|      0|        error(loc, "tensorARM types can only be used in uniform variables or function parameters:", "tensorARM", identifier.c_str());
 4994|      0|    }
 4995|  13.3k|}
_ZN7glslang13TParseContext15atomicUintCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 4998|  13.7k|{
 4999|  13.7k|    if (type.getQualifier().storage == EvqUniform)
  ------------------
  |  Branch (4999:9): [True: 399, False: 13.3k]
  ------------------
 5000|    399|        return;
 5001|       |
 5002|  13.3k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtAtomicUint))
  ------------------
  |  Branch (5002:9): [True: 0, False: 13.3k]
  |  Branch (5002:45): [True: 0, False: 0]
  ------------------
 5003|      0|        error(loc, "non-uniform struct contains an atomic_uint:", type.getBasicTypeString().c_str(), identifier.c_str());
 5004|  13.3k|    else if (type.getBasicType() == EbtAtomicUint && type.getQualifier().storage != EvqUniform)
  ------------------
  |  Branch (5004:14): [True: 0, False: 13.3k]
  |  Branch (5004:54): [True: 0, False: 0]
  ------------------
 5005|      0|        error(loc, "atomic_uints can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str());
 5006|  13.3k|}
_ZN7glslang13TParseContext14accStructCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 5009|  13.7k|{
 5010|  13.7k|    if (type.getQualifier().storage == EvqUniform)
  ------------------
  |  Branch (5010:9): [True: 399, False: 13.3k]
  ------------------
 5011|    399|        return;
 5012|       |
 5013|  13.3k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtAccStruct))
  ------------------
  |  Branch (5013:9): [True: 0, False: 13.3k]
  |  Branch (5013:45): [True: 0, False: 0]
  ------------------
 5014|      0|        error(loc, "non-uniform struct contains an accelerationStructureNV:", type.getBasicTypeString().c_str(), identifier.c_str());
 5015|  13.3k|    else if (type.getBasicType() == EbtAccStruct && type.getQualifier().storage != EvqUniform)
  ------------------
  |  Branch (5015:14): [True: 0, False: 13.3k]
  |  Branch (5015:53): [True: 0, False: 0]
  ------------------
 5016|      0|        error(loc, "accelerationStructureNV can only be used in uniform variables or function parameters:",
 5017|      0|            type.getBasicTypeString().c_str(), identifier.c_str());
 5018|       |
 5019|  13.3k|}
_ZN7glslang13TParseContext17hitObjectEXTCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 5022|  13.7k|{
 5023|  13.7k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtHitObjectEXT)) {
  ------------------
  |  Branch (5023:9): [True: 0, False: 13.7k]
  |  Branch (5023:45): [True: 0, False: 0]
  ------------------
 5024|      0|        error(loc, "struct is not allowed to contain hitObjectEXT:", type.getTypeName().c_str(), identifier.c_str());
 5025|  13.7k|    } else if (type.getBasicType() == EbtHitObjectEXT) {
  ------------------
  |  Branch (5025:16): [True: 0, False: 13.7k]
  ------------------
 5026|      0|        TStorageQualifier qualifier = type.getQualifier().storage;
 5027|      0|        if (qualifier != EvqGlobal && qualifier != EvqTemporary) {
  ------------------
  |  Branch (5027:13): [True: 0, False: 0]
  |  Branch (5027:39): [True: 0, False: 0]
  ------------------
 5028|      0|            error(loc, "hitObjectEXT can only be declared in global or function scope with no storage qualifier:", "hitObjectEXT", identifier.c_str());
 5029|      0|        }
 5030|      0|    }
 5031|  13.7k|}
_ZN7glslang13TParseContext16hitObjectNVCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 5033|  13.7k|{
 5034|  13.7k|    if (type.getBasicType() == EbtStruct && ( containsFieldWithBasicType(type, EbtHitObjectNV))) {
  ------------------
  |  Branch (5034:9): [True: 0, False: 13.7k]
  |  Branch (5034:45): [True: 0, False: 0]
  ------------------
 5035|      0|        error(loc, "struct is not allowed to contain hitObjectNV:", type.getTypeName().c_str(), identifier.c_str());
 5036|  13.7k|    } else if ((type.getBasicType() == EbtHitObjectNV)) {
  ------------------
  |  Branch (5036:16): [True: 0, False: 13.7k]
  ------------------
 5037|      0|        TStorageQualifier qualifier = type.getQualifier().storage;
 5038|      0|        if (qualifier != EvqGlobal && qualifier != EvqTemporary) {
  ------------------
  |  Branch (5038:13): [True: 0, False: 0]
  |  Branch (5038:39): [True: 0, False: 0]
  ------------------
 5039|      0|            error(loc, "hitObjectNV can only be declared in global or function scope with no storage qualifier:", "hitObjectNV", identifier.c_str());
 5040|      0|        }
 5041|      0|    }
 5042|  13.7k|}
_ZN7glslang13TParseContext22transparentOpaqueCheckERKNS_10TSourceLocERKNS_5TTypeERKNSt3__112basic_stringIcNS7_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 5045|  13.7k|{
 5046|  13.7k|    if (parsingBuiltins)
  ------------------
  |  Branch (5046:9): [True: 13.1k, False: 600]
  ------------------
 5047|  13.1k|        return;
 5048|       |
 5049|    600|    if (type.getQualifier().storage != EvqUniform)
  ------------------
  |  Branch (5049:9): [True: 336, False: 264]
  ------------------
 5050|    336|        return;
 5051|       |
 5052|    264|    if (type.containsNonOpaque()) {
  ------------------
  |  Branch (5052:9): [True: 0, False: 264]
  ------------------
 5053|       |        // Vulkan doesn't allow transparent uniforms outside of blocks
 5054|      0|        if (spvVersion.vulkan > 0 && !spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (5054:13): [True: 0, False: 0]
  |  Branch (5054:38): [True: 0, False: 0]
  ------------------
 5055|      0|            vulkanRemoved(loc, "non-opaque uniforms outside a block");
 5056|       |        // OpenGL wants locations on these (unless they are getting automapped)
 5057|      0|        if (spvVersion.openGl > 0 && !type.getQualifier().hasLocation() && !intermediate.getAutoMapLocations())
  ------------------
  |  Branch (5057:13): [True: 0, False: 0]
  |  Branch (5057:38): [True: 0, False: 0]
  |  Branch (5057:76): [True: 0, False: 0]
  ------------------
 5058|      0|            error(loc, "non-opaque uniform variables need a layout(location=L)", identifier.c_str(), "");
 5059|      0|    }
 5060|    264|}
_ZN7glslang13TParseContext20memberQualifierCheckERNS_11TPublicTypeE:
 5066|     35|{
 5067|     35|    globalQualifierFixCheck(publicType.loc, publicType.qualifier, true);
 5068|     35|    checkNoShaderLayouts(publicType.loc, publicType.shaderQualifiers);
 5069|     35|    if (publicType.qualifier.isNonUniform()) {
  ------------------
  |  Branch (5069:9): [True: 0, False: 35]
  ------------------
 5070|      0|        error(publicType.loc, "not allowed on block or structure members", "nonuniformEXT", "");
 5071|      0|        publicType.qualifier.nonUniform = false;
 5072|      0|    }
 5073|     35|    if (publicType.qualifier.isPatch()) {
  ------------------
  |  Branch (5073:9): [True: 0, False: 35]
  ------------------
 5074|      0|        error(publicType.loc, "not allowed on block or structure members",
 5075|      0|              "patch", "");
 5076|      0|    }
 5077|     35|}
_ZN7glslang13TParseContext23globalQualifierFixCheckERKNS_10TSourceLocERNS_10TQualifierEbPKNS_11TPublicTypeE:
 5083|  50.8k|{
 5084|  50.8k|    bool nonuniformOkay = false;
 5085|       |
 5086|       |    // move from parameter/unknown qualifiers to pipeline in/out qualifiers
 5087|  50.8k|    switch (qualifier.storage) {
 5088|  7.71k|    case EvqIn:
  ------------------
  |  Branch (5088:5): [True: 7.71k, False: 43.1k]
  ------------------
 5089|  7.71k|        profileRequires(loc, ENoProfile, 130, nullptr, "in for stage inputs");
 5090|  7.71k|        profileRequires(loc, EEsProfile, 300, nullptr, "in for stage inputs");
 5091|  7.71k|        qualifier.storage = EvqVaryingIn;
 5092|  7.71k|        nonuniformOkay = true;
 5093|  7.71k|        break;
 5094|    647|    case EvqOut:
  ------------------
  |  Branch (5094:5): [True: 647, False: 50.1k]
  ------------------
 5095|    647|        profileRequires(loc, ENoProfile, 130, nullptr, "out for stage outputs");
 5096|    647|        profileRequires(loc, EEsProfile, 300, nullptr, "out for stage outputs");
 5097|    647|        qualifier.storage = EvqVaryingOut;
 5098|    647|        if (intermediate.isInvariantAll())
  ------------------
  |  Branch (5098:13): [True: 0, False: 647]
  ------------------
 5099|      0|            qualifier.invariant = true;
 5100|    647|        break;
 5101|      0|    case EvqInOut:
  ------------------
  |  Branch (5101:5): [True: 0, False: 50.8k]
  ------------------
 5102|      0|        qualifier.storage = EvqVaryingIn;
 5103|      0|        error(loc, "cannot use 'inout' at global scope", "", "");
 5104|      0|        break;
 5105|  37.4k|    case EvqGlobal:
  ------------------
  |  Branch (5105:5): [True: 37.4k, False: 13.3k]
  ------------------
 5106|  37.4k|    case EvqTemporary:
  ------------------
  |  Branch (5106:5): [True: 35, False: 50.7k]
  ------------------
 5107|  37.4k|        nonuniformOkay = true;
 5108|  37.4k|        break;
 5109|    399|    case EvqUniform:
  ------------------
  |  Branch (5109:5): [True: 399, False: 50.4k]
  ------------------
 5110|       |        // According to GLSL spec: The std430 qualifier is supported only for shader storage blocks; a shader using
 5111|       |        // the std430 qualifier on a uniform block will fail to compile.
 5112|       |        // Only check the global declaration: layout(std430) uniform;
 5113|    399|        if (blockName == nullptr &&
  ------------------
  |  Branch (5113:13): [True: 359, False: 40]
  ------------------
 5114|    359|            qualifier.layoutPacking == ElpStd430)
  ------------------
  |  Branch (5114:13): [True: 0, False: 359]
  ------------------
 5115|      0|        {
 5116|      0|            requireExtensions(loc, 1, &E_GL_EXT_scalar_block_layout, "default std430 layout for uniform");
 5117|      0|        }
 5118|       |
 5119|    399|        if (publicType != nullptr && publicType->isImage() &&
  ------------------
  |  Branch (5119:13): [True: 399, False: 0]
  |  Branch (5119:38): [True: 66, False: 333]
  ------------------
 5120|     66|            (qualifier.layoutFormat > ElfExtSizeGuard && qualifier.layoutFormat < ElfCount))
  ------------------
  |  Branch (5120:14): [True: 0, False: 66]
  |  Branch (5120:58): [True: 0, False: 0]
  ------------------
 5121|      0|            qualifier.layoutFormat = mapLegacyLayoutFormat(qualifier.layoutFormat, publicType->sampler.getBasicType());
 5122|       |
 5123|    399|        break;
 5124|  4.57k|    default:
  ------------------
  |  Branch (5124:5): [True: 4.57k, False: 46.2k]
  ------------------
 5125|  4.57k|        break;
 5126|  50.8k|    }
 5127|       |
 5128|  50.8k|    if (!nonuniformOkay && qualifier.isNonUniform())
  ------------------
  |  Branch (5128:9): [True: 5.61k, False: 45.2k]
  |  Branch (5128:28): [True: 0, False: 5.61k]
  ------------------
 5129|      0|        error(loc, "for non-parameter, can only apply to 'in' or no storage qualifier", "nonuniformEXT", "");
 5130|       |
 5131|  50.8k|    if (qualifier.isSpirvByReference())
  ------------------
  |  Branch (5131:9): [True: 0, False: 50.8k]
  ------------------
 5132|      0|        error(loc, "can only apply to parameter", "spirv_by_reference", "");
 5133|       |
 5134|  50.8k|    if (qualifier.isSpirvLiteral())
  ------------------
  |  Branch (5134:9): [True: 0, False: 50.8k]
  ------------------
 5135|      0|        error(loc, "can only apply to parameter", "spirv_literal", "");
 5136|       |
 5137|       |    // Storage qualifier isn't ready for memberQualifierCheck, we should skip invariantCheck for it.
 5138|  50.8k|    if (!isMemberCheck || structNestingLevel > 0)
  ------------------
  |  Branch (5138:9): [True: 50.7k, False: 35]
  |  Branch (5138:27): [True: 0, False: 35]
  ------------------
 5139|  50.7k|        invariantCheck(loc, qualifier);
 5140|       |
 5141|  50.8k|    if (qualifier.isFullQuads()) {
  ------------------
  |  Branch (5141:9): [True: 0, False: 50.8k]
  ------------------
 5142|      0|        if (qualifier.storage != EvqVaryingIn)
  ------------------
  |  Branch (5142:13): [True: 0, False: 0]
  ------------------
 5143|      0|            error(loc, "can only apply to input layout", "full_quads ", "");
 5144|      0|        intermediate.setReqFullQuadsMode();
 5145|      0|    }
 5146|       |
 5147|  50.8k|    if (qualifier.isQuadDeriv()) {
  ------------------
  |  Branch (5147:9): [True: 0, False: 50.8k]
  ------------------
 5148|      0|        if (qualifier.storage != EvqVaryingIn)
  ------------------
  |  Branch (5148:13): [True: 0, False: 0]
  ------------------
 5149|      0|            error(loc, "can only apply to input layout", "quad_derivatives", "");
 5150|      0|        intermediate.setQuadDerivMode();
 5151|      0|    }
 5152|  50.8k|}
_ZN7glslang13TParseContext24globalQualifierTypeCheckERKNS_10TSourceLocERKNS_10TQualifierERKNS_11TPublicTypeE:
 5158|   480k|{
 5159|   480k|    if (! symbolTable.atGlobalLevel())
  ------------------
  |  Branch (5159:9): [True: 240, False: 480k]
  ------------------
 5160|    240|        return;
 5161|       |
 5162|   480k|    if (!(publicType.userDef && publicType.userDef->isReference()) && !publicType.isTensorARM() && !parsingBuiltins) {
  ------------------
  |  Branch (5162:11): [True: 10, False: 480k]
  |  Branch (5162:33): [True: 0, False: 10]
  |  Branch (5162:71): [True: 480k, False: 0]
  |  Branch (5162:100): [True: 608, False: 480k]
  ------------------
 5163|    608|        if (qualifier.isMemoryQualifierImageAndSSBOOnly() && ! publicType.isImage() && publicType.qualifier.storage != EvqBuffer) {
  ------------------
  |  Branch (5163:13): [True: 0, False: 608]
  |  Branch (5163:62): [True: 0, False: 0]
  |  Branch (5163:88): [True: 0, False: 0]
  ------------------
 5164|      0|            error(loc, "memory qualifiers cannot be used on this type", "", "");
 5165|    608|        } else if (qualifier.isMemory() && (publicType.basicType != EbtSampler) && !publicType.qualifier.isUniformOrBuffer()) {
  ------------------
  |  Branch (5165:20): [True: 0, False: 608]
  |  Branch (5165:44): [True: 0, False: 0]
  |  Branch (5165:84): [True: 0, False: 0]
  ------------------
 5166|      0|            error(loc, "memory qualifiers cannot be used on this type", "", "");
 5167|      0|        }
 5168|    608|    }
 5169|       |
 5170|   480k|    if (qualifier.storage == EvqBuffer &&
  ------------------
  |  Branch (5170:9): [True: 0, False: 480k]
  ------------------
 5171|      0|        publicType.basicType != EbtBlock &&
  ------------------
  |  Branch (5171:9): [True: 0, False: 0]
  ------------------
 5172|      0|        !qualifier.hasBufferReference())
  ------------------
  |  Branch (5172:9): [True: 0, False: 0]
  ------------------
 5173|      0|        error(loc, "buffers can be declared only as blocks", "buffer", "");
 5174|       |
 5175|   480k|    if (qualifier.storage != EvqVaryingIn && publicType.basicType == EbtDouble &&
  ------------------
  |  Branch (5175:9): [True: 473k, False: 7.70k]
  |  Branch (5175:46): [True: 4.53k, False: 468k]
  ------------------
 5176|  4.53k|        extensionTurnedOn(E_GL_ARB_vertex_attrib_64bit) && language == EShLangVertex &&
  ------------------
  |  Branch (5176:9): [True: 0, False: 4.53k]
  |  Branch (5176:60): [True: 0, False: 0]
  ------------------
 5177|      0|        version < 400) {
  ------------------
  |  Branch (5177:9): [True: 0, False: 0]
  ------------------
 5178|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 410, E_GL_ARB_gpu_shader_fp64, "vertex-shader `double` type");
 5179|      0|    }
 5180|   480k|    if (qualifier.storage != EvqVaryingIn && qualifier.storage != EvqVaryingOut)
  ------------------
  |  Branch (5180:9): [True: 473k, False: 7.70k]
  |  Branch (5180:46): [True: 472k, False: 580]
  ------------------
 5181|   472k|        return;
 5182|       |
 5183|  8.28k|    if (publicType.shaderQualifiers.hasBlendEquation())
  ------------------
  |  Branch (5183:9): [True: 0, False: 8.28k]
  ------------------
 5184|      0|        error(loc, "can only be applied to a standalone 'out'", "blend equation", "");
 5185|       |
 5186|       |    // now, knowing it is a shader in/out, do all the in/out semantic checks
 5187|       |
 5188|  8.28k|    if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble) {
  ------------------
  |  Branch (5188:9): [True: 7.68k, False: 601]
  |  Branch (5188:44): [True: 0, False: 601]
  ------------------
 5189|  7.68k|        profileRequires(loc, EEsProfile, 300, nullptr, "non-float shader input/output");
 5190|  7.68k|        profileRequires(loc, ~EEsProfile, 130, nullptr, "non-float shader input/output");
 5191|  7.68k|    }
 5192|       |
 5193|  8.28k|    if (!qualifier.flat && !qualifier.isExplicitInterpolation() && !qualifier.isPervertexNV() && !qualifier.isPervertexEXT()) {
  ------------------
  |  Branch (5193:9): [True: 6.23k, False: 2.04k]
  |  Branch (5193:28): [True: 6.23k, False: 0]
  |  Branch (5193:68): [True: 6.23k, False: 0]
  |  Branch (5193:98): [True: 6.23k, False: 0]
  ------------------
 5194|  6.23k|        if (isTypeInt(publicType.basicType) ||
  ------------------
  |  Branch (5194:13): [True: 5.63k, False: 601]
  ------------------
 5195|    601|            publicType.basicType == EbtDouble ||
  ------------------
  |  Branch (5195:13): [True: 0, False: 601]
  ------------------
 5196|    601|            (publicType.userDef && (   publicType.userDef->containsBasicType(EbtInt)
  ------------------
  |  Branch (5196:14): [True: 0, False: 601]
  |  Branch (5196:40): [True: 0, False: 0]
  ------------------
 5197|      0|                                    || publicType.userDef->containsBasicType(EbtUint)
  ------------------
  |  Branch (5197:40): [True: 0, False: 0]
  ------------------
 5198|      0|                                    || publicType.userDef->contains16BitInt()
  ------------------
  |  Branch (5198:40): [True: 0, False: 0]
  ------------------
 5199|      0|                                    || publicType.userDef->contains8BitInt()
  ------------------
  |  Branch (5199:40): [True: 0, False: 0]
  ------------------
 5200|      0|                                    || publicType.userDef->contains64BitInt()
  ------------------
  |  Branch (5200:40): [True: 0, False: 0]
  ------------------
 5201|  5.63k|                                    || publicType.userDef->containsDouble()))) {
  ------------------
  |  Branch (5201:40): [True: 0, False: 0]
  ------------------
 5202|  5.63k|            if (qualifier.storage == EvqVaryingIn && language == EShLangFragment)
  ------------------
  |  Branch (5202:17): [True: 5.22k, False: 412]
  |  Branch (5202:54): [True: 0, False: 5.22k]
  ------------------
 5203|      0|                error(loc, "must be qualified as flat", TType::getBasicString(publicType.basicType), GetStorageQualifierString(qualifier.storage));
 5204|  5.63k|            else if (qualifier.storage == EvqVaryingOut && language == EShLangVertex && version == 300)
  ------------------
  |  Branch (5204:22): [True: 412, False: 5.22k]
  |  Branch (5204:60): [True: 60, False: 352]
  |  Branch (5204:89): [True: 0, False: 60]
  ------------------
 5205|      0|                error(loc, "must be qualified as flat", TType::getBasicString(publicType.basicType), GetStorageQualifierString(qualifier.storage));
 5206|  5.63k|        }
 5207|  6.23k|    }
 5208|       |
 5209|  8.28k|    if (qualifier.isPatch() && qualifier.isInterpolation())
  ------------------
  |  Branch (5209:9): [True: 52, False: 8.23k]
  |  Branch (5209:32): [True: 0, False: 52]
  ------------------
 5210|      0|        error(loc, "cannot use interpolation qualifiers with patch", "patch", "");
 5211|       |
 5212|       |    // Only "patch in" is supported via GL_NV_gpu_shader5
 5213|  8.28k|    if (! symbolTable.atBuiltInLevel() && qualifier.isPatch() && 
  ------------------
  |  Branch (5213:9): [True: 72, False: 8.21k]
  |  Branch (5213:43): [True: 0, False: 72]
  ------------------
 5214|      0|        (language == EShLangGeometry) && qualifier.storage != EvqVaryingIn &&
  ------------------
  |  Branch (5214:9): [True: 0, False: 0]
  |  Branch (5214:42): [True: 0, False: 0]
  ------------------
 5215|      0|        extensionTurnedOn(E_GL_NV_gpu_shader5))
  ------------------
  |  Branch (5215:9): [True: 0, False: 0]
  ------------------
 5216|      0|            error(loc, "only 'patch in' is supported in this stage:", "patch", "geometry");
 5217|       |
 5218|  8.28k|    if (qualifier.isTaskPayload() && publicType.basicType == EbtBlock)
  ------------------
  |  Branch (5218:9): [True: 0, False: 8.28k]
  |  Branch (5218:38): [True: 0, False: 0]
  ------------------
 5219|      0|        error(loc, "taskPayloadSharedEXT variables should not be declared as interface blocks", "taskPayloadSharedEXT", "");
 5220|       |
 5221|  8.28k|    if (qualifier.isTaskMemory() && publicType.basicType != EbtBlock)
  ------------------
  |  Branch (5221:9): [True: 0, False: 8.28k]
  |  Branch (5221:37): [True: 0, False: 0]
  ------------------
 5222|      0|        error(loc, "taskNV variables can be declared only as blocks", "taskNV", "");
 5223|       |
 5224|  8.28k|    if (qualifier.storage == EvqVaryingIn) {
  ------------------
  |  Branch (5224:9): [True: 7.70k, False: 580]
  ------------------
 5225|  7.70k|        switch (language) {
 5226|  2.08k|        case EShLangVertex:
  ------------------
  |  Branch (5226:9): [True: 2.08k, False: 5.61k]
  ------------------
 5227|  2.08k|            if (publicType.basicType == EbtStruct) {
  ------------------
  |  Branch (5227:17): [True: 0, False: 2.08k]
  ------------------
 5228|      0|                error(loc, "cannot be a structure", GetStorageQualifierString(qualifier.storage), "");
 5229|      0|                return;
 5230|      0|            }
 5231|  2.08k|            if (publicType.arraySizes) {
  ------------------
  |  Branch (5231:17): [True: 0, False: 2.08k]
  ------------------
 5232|      0|                requireProfile(loc, ~EEsProfile, "vertex input arrays");
 5233|      0|                profileRequires(loc, ENoProfile, 150, nullptr, "vertex input arrays");
 5234|      0|            }
 5235|  2.08k|            if (publicType.basicType == EbtDouble) {
  ------------------
  |  Branch (5235:17): [True: 0, False: 2.08k]
  ------------------
 5236|      0|            	const char* const float64_attrib[] = {E_GL_NV_gpu_shader5, E_GL_ARB_vertex_attrib_64bit};
 5237|      0|                const int Num_float64_attrib = sizeof(float64_attrib) / sizeof(float64_attrib[0]);        
 5238|      0|                profileRequires(loc, ~EEsProfile, 410, Num_float64_attrib, float64_attrib, "vertex-shader `double` type input");
 5239|      0|			}
 5240|  2.08k|            if (qualifier.isAuxiliary() || qualifier.isInterpolation() || qualifier.isMemory() || qualifier.invariant)
  ------------------
  |  Branch (5240:17): [True: 0, False: 2.08k]
  |  Branch (5240:44): [True: 0, False: 2.08k]
  |  Branch (5240:75): [True: 0, False: 2.08k]
  |  Branch (5240:99): [True: 0, False: 2.08k]
  ------------------
 5241|      0|                error(loc, "vertex input cannot be further qualified", "", "");
 5242|  2.08k|            break;
 5243|  2.37k|        case EShLangFragment:
  ------------------
  |  Branch (5243:9): [True: 2.37k, False: 5.32k]
  ------------------
 5244|  2.37k|            if (publicType.userDef) {
  ------------------
  |  Branch (5244:17): [True: 0, False: 2.37k]
  ------------------
 5245|      0|                profileRequires(loc, EEsProfile, 300, nullptr, "fragment-shader struct input");
 5246|      0|                profileRequires(loc, ~EEsProfile, 150, nullptr, "fragment-shader struct input");
 5247|      0|                if (publicType.userDef->containsStructure())
  ------------------
  |  Branch (5247:21): [True: 0, False: 0]
  ------------------
 5248|      0|                    requireProfile(loc, ~EEsProfile, "fragment-shader struct input containing structure");
 5249|      0|                if (publicType.userDef->containsArray())
  ------------------
  |  Branch (5249:21): [True: 0, False: 0]
  ------------------
 5250|      0|                    requireProfile(loc, ~EEsProfile, "fragment-shader struct input containing an array");
 5251|      0|            }
 5252|  2.37k|            break;
 5253|    300|       case EShLangCompute:
  ------------------
  |  Branch (5253:8): [True: 300, False: 7.40k]
  ------------------
 5254|    300|            if (! symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (5254:17): [True: 0, False: 300]
  ------------------
 5255|      0|                error(loc, "global storage input qualifier cannot be used in a compute shader", "in", "");
 5256|    300|            break;
 5257|    399|       case EShLangTessControl:
  ------------------
  |  Branch (5257:8): [True: 399, False: 7.30k]
  ------------------
 5258|    399|            if (qualifier.patch)
  ------------------
  |  Branch (5258:17): [True: 0, False: 399]
  ------------------
 5259|      0|                error(loc, "can only use on output in tessellation-control shader", "patch", "");
 5260|    399|            break;
 5261|  2.53k|        default:
  ------------------
  |  Branch (5261:9): [True: 2.53k, False: 5.16k]
  ------------------
 5262|  2.53k|            break;
 5263|  7.70k|        }
 5264|  7.70k|    } else {
 5265|       |        // qualifier.storage == EvqVaryingOut
 5266|    580|        switch (language) {
 5267|    166|        case EShLangVertex:
  ------------------
  |  Branch (5267:9): [True: 166, False: 414]
  ------------------
 5268|    166|            if (publicType.userDef) {
  ------------------
  |  Branch (5268:17): [True: 0, False: 166]
  ------------------
 5269|      0|                profileRequires(loc, EEsProfile, 300, nullptr, "vertex-shader struct output");
 5270|      0|                profileRequires(loc, ~EEsProfile, 150, nullptr, "vertex-shader struct output");
 5271|      0|                if (publicType.userDef->containsStructure())
  ------------------
  |  Branch (5271:21): [True: 0, False: 0]
  ------------------
 5272|      0|                    requireProfile(loc, ~EEsProfile, "vertex-shader struct output containing structure");
 5273|      0|                if (publicType.userDef->containsArray())
  ------------------
  |  Branch (5273:21): [True: 0, False: 0]
  ------------------
 5274|      0|                    requireProfile(loc, ~EEsProfile, "vertex-shader struct output containing an array");
 5275|      0|            }
 5276|       |
 5277|    166|            break;
 5278|    198|        case EShLangFragment:
  ------------------
  |  Branch (5278:9): [True: 198, False: 382]
  ------------------
 5279|    198|            profileRequires(loc, EEsProfile, 300, nullptr, "fragment shader output");
 5280|    198|            if (publicType.basicType == EbtStruct) {
  ------------------
  |  Branch (5280:17): [True: 0, False: 198]
  ------------------
 5281|      0|                error(loc, "cannot be a structure", GetStorageQualifierString(qualifier.storage), "");
 5282|      0|                return;
 5283|      0|            }
 5284|    198|            if (publicType.matrixRows > 0) {
  ------------------
  |  Branch (5284:17): [True: 0, False: 198]
  ------------------
 5285|      0|                error(loc, "cannot be a matrix", GetStorageQualifierString(qualifier.storage), "");
 5286|      0|                return;
 5287|      0|            }
 5288|    198|            if (qualifier.isAuxiliary())
  ------------------
  |  Branch (5288:17): [True: 0, False: 198]
  ------------------
 5289|      0|                error(loc, "can't use auxiliary qualifier on a fragment output", "centroid/sample/patch", "");
 5290|    198|            if (qualifier.isInterpolation())
  ------------------
  |  Branch (5290:17): [True: 0, False: 198]
  ------------------
 5291|      0|                error(loc, "can't use interpolation qualifier on a fragment output", "flat/smooth/noperspective", "");
 5292|    198|            if (publicType.basicType == EbtDouble || publicType.basicType == EbtInt64 || publicType.basicType == EbtUint64)
  ------------------
  |  Branch (5292:17): [True: 0, False: 198]
  |  Branch (5292:54): [True: 0, False: 198]
  |  Branch (5292:90): [True: 0, False: 198]
  ------------------
 5293|      0|                error(loc, "cannot contain a double, int64, or uint64", GetStorageQualifierString(qualifier.storage), "");
 5294|    198|        break;
 5295|       |
 5296|      0|        case EShLangCompute:
  ------------------
  |  Branch (5296:9): [True: 0, False: 580]
  ------------------
 5297|      0|            error(loc, "global storage output qualifier cannot be used in a compute shader", "out", "");
 5298|      0|            break;
 5299|     70|        case EShLangTessEvaluation:
  ------------------
  |  Branch (5299:9): [True: 70, False: 510]
  ------------------
 5300|     70|            if (qualifier.patch)
  ------------------
  |  Branch (5300:17): [True: 0, False: 70]
  ------------------
 5301|      0|                error(loc, "can only use on input in tessellation-evaluation shader", "patch", "");
 5302|     70|            break;
 5303|    146|        default:
  ------------------
  |  Branch (5303:9): [True: 146, False: 434]
  ------------------
 5304|    146|            break;
 5305|    580|        }
 5306|    580|    }
 5307|  8.28k|}
_ZN7glslang13TParseContext15mergeQualifiersERKNS_10TSourceLocERNS_10TQualifierERKS4_b:
 5319|   173k|{
 5320|       |    // Multiple auxiliary qualifiers (mostly done later by 'individual qualifiers')
 5321|   173k|    if (src.isAuxiliary() && dst.isAuxiliary())
  ------------------
  |  Branch (5321:9): [True: 52, False: 173k]
  |  Branch (5321:30): [True: 0, False: 52]
  ------------------
 5322|      0|        error(loc, "can only have one auxiliary qualifier (centroid, patch, and sample)", "", "");
 5323|       |
 5324|       |    // Multiple interpolation qualifiers (mostly done later by 'individual qualifiers')
 5325|   173k|    if (src.isInterpolation() && dst.isInterpolation())
  ------------------
  |  Branch (5325:9): [True: 2.04k, False: 171k]
  |  Branch (5325:34): [True: 0, False: 2.04k]
  ------------------
 5326|      0|        error(loc, "can only have one interpolation qualifier (flat, smooth, noperspective, __explicitInterpAMD)", "", "");
 5327|       |
 5328|       |    // Ordering
 5329|   173k|    if (! force && ((!isEsProfile() && version < 420) ||
  ------------------
  |  Branch (5329:9): [True: 122k, False: 50.3k]
  |  Branch (5329:22): [True: 122k, False: 0]
  |  Branch (5329:40): [True: 93.6k, False: 29.2k]
  ------------------
 5330|  29.2k|                    (isEsProfile() && version < 310))
  ------------------
  |  Branch (5330:22): [True: 0, False: 29.2k]
  |  Branch (5330:39): [True: 0, False: 0]
  ------------------
 5331|  93.6k|                && ! extensionTurnedOn(E_GL_ARB_shading_language_420pack)) {
  ------------------
  |  Branch (5331:20): [True: 93.6k, False: 0]
  ------------------
 5332|       |        // non-function parameters
 5333|  93.6k|        if (src.isNoContraction() && (dst.invariant || dst.isInterpolation() || dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone))
  ------------------
  |  Branch (5333:13): [True: 0, False: 93.6k]
  |  Branch (5333:39): [True: 0, False: 0]
  |  Branch (5333:56): [True: 0, False: 0]
  |  Branch (5333:81): [True: 0, False: 0]
  |  Branch (5333:102): [True: 0, False: 0]
  |  Branch (5333:133): [True: 0, False: 0]
  ------------------
 5334|      0|            error(loc, "precise qualifier must appear first", "", "");
 5335|  93.6k|        if (src.invariant && (dst.isInterpolation() || dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone))
  ------------------
  |  Branch (5335:13): [True: 0, False: 93.6k]
  |  Branch (5335:31): [True: 0, False: 0]
  |  Branch (5335:56): [True: 0, False: 0]
  |  Branch (5335:77): [True: 0, False: 0]
  |  Branch (5335:108): [True: 0, False: 0]
  ------------------
 5336|      0|            error(loc, "invariant qualifier must appear before interpolation, storage, and precision qualifiers ", "", "");
 5337|  93.6k|        else if (src.isInterpolation() && (dst.isAuxiliary() || dst.storage != EvqTemporary || dst.precision != EpqNone))
  ------------------
  |  Branch (5337:18): [True: 0, False: 93.6k]
  |  Branch (5337:44): [True: 0, False: 0]
  |  Branch (5337:65): [True: 0, False: 0]
  |  Branch (5337:96): [True: 0, False: 0]
  ------------------
 5338|      0|            error(loc, "interpolation qualifiers must appear before storage and precision qualifiers", "", "");
 5339|  93.6k|        else if (src.isAuxiliary() && (dst.storage != EvqTemporary || dst.precision != EpqNone))
  ------------------
  |  Branch (5339:18): [True: 0, False: 93.6k]
  |  Branch (5339:40): [True: 0, False: 0]
  |  Branch (5339:71): [True: 0, False: 0]
  ------------------
 5340|      0|            error(loc, "Auxiliary qualifiers (centroid, patch, and sample) must appear before storage and precision qualifiers", "", "");
 5341|  93.6k|        else if (src.storage != EvqTemporary && (dst.precision != EpqNone))
  ------------------
  |  Branch (5341:18): [True: 5.42k, False: 88.1k]
  |  Branch (5341:49): [True: 0, False: 5.42k]
  ------------------
 5342|      0|            error(loc, "precision qualifier must appear as last qualifier", "", "");
 5343|       |
 5344|       |        // function parameters
 5345|  93.6k|        if (src.isNoContraction() && (dst.storage == EvqConst || dst.storage == EvqIn || dst.storage == EvqOut))
  ------------------
  |  Branch (5345:13): [True: 0, False: 93.6k]
  |  Branch (5345:39): [True: 0, False: 0]
  |  Branch (5345:66): [True: 0, False: 0]
  |  Branch (5345:90): [True: 0, False: 0]
  ------------------
 5346|      0|            error(loc, "precise qualifier must appear first", "", "");
 5347|  93.6k|        if (src.storage == EvqConst && (dst.storage == EvqIn || dst.storage == EvqOut))
  ------------------
  |  Branch (5347:13): [True: 0, False: 93.6k]
  |  Branch (5347:41): [True: 0, False: 0]
  |  Branch (5347:65): [True: 0, False: 0]
  ------------------
 5348|      0|            error(loc, "in/out must appear before const", "", "");
 5349|  93.6k|    }
 5350|       |
 5351|       |    // Storage qualification
 5352|   173k|    if (dst.storage == EvqTemporary || dst.storage == EvqGlobal)
  ------------------
  |  Branch (5352:9): [True: 115k, False: 58.0k]
  |  Branch (5352:40): [True: 50.3k, False: 7.73k]
  ------------------
 5353|   165k|        dst.storage = src.storage;
 5354|  7.73k|    else if ((dst.storage == EvqIn  && src.storage == EvqOut) ||
  ------------------
  |  Branch (5354:15): [True: 6.65k, False: 1.08k]
  |  Branch (5354:40): [True: 0, False: 6.65k]
  ------------------
 5355|  7.73k|             (dst.storage == EvqOut && src.storage == EvqIn))
  ------------------
  |  Branch (5355:15): [True: 274, False: 7.46k]
  |  Branch (5355:40): [True: 0, False: 274]
  ------------------
 5356|      0|        dst.storage = EvqInOut;
 5357|  7.73k|    else if ((dst.storage == EvqIn    && src.storage == EvqConst) ||
  ------------------
  |  Branch (5357:15): [True: 6.65k, False: 1.08k]
  |  Branch (5357:42): [True: 0, False: 6.65k]
  ------------------
 5358|  7.73k|             (dst.storage == EvqConst && src.storage == EvqIn))
  ------------------
  |  Branch (5358:15): [True: 765, False: 6.97k]
  |  Branch (5358:42): [True: 0, False: 765]
  ------------------
 5359|      0|        dst.storage = EvqConstReadOnly;
 5360|  7.73k|    else if (src.storage != EvqTemporary &&
  ------------------
  |  Branch (5360:14): [True: 6.93k, False: 800]
  ------------------
 5361|  6.93k|             src.storage != EvqGlobal)
  ------------------
  |  Branch (5361:14): [True: 0, False: 6.93k]
  ------------------
 5362|      0|        error(loc, "too many storage qualifiers", GetStorageQualifierString(src.storage), "");
 5363|       |
 5364|       |    // Precision qualifiers
 5365|   173k|    if (! force && src.precision != EpqNone && dst.precision != EpqNone)
  ------------------
  |  Branch (5365:9): [True: 122k, False: 50.3k]
  |  Branch (5365:20): [True: 6.93k, False: 115k]
  |  Branch (5365:48): [True: 0, False: 6.93k]
  ------------------
 5366|      0|        error(loc, "only one precision qualifier allowed", GetPrecisionQualifierString(src.precision), "");
 5367|   173k|    if (dst.precision == EpqNone || (force && src.precision != EpqNone))
  ------------------
  |  Branch (5367:9): [True: 172k, False: 813]
  |  Branch (5367:38): [True: 363, False: 450]
  |  Branch (5367:47): [True: 0, False: 363]
  ------------------
 5368|   172k|        dst.precision = src.precision;
 5369|       |
 5370|   173k|    if (!force && ((src.coherent && (dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
  ------------------
  |  Branch (5370:9): [True: 122k, False: 50.3k]
  |  Branch (5370:21): [True: 51.3k, False: 71.4k]
  |  Branch (5370:38): [True: 0, False: 51.3k]
  |  Branch (5370:60): [True: 0, False: 51.3k]
  |  Branch (5370:87): [True: 0, False: 51.3k]
  |  Branch (5370:112): [True: 0, False: 51.3k]
  |  Branch (5370:136): [True: 0, False: 51.3k]
  ------------------
 5371|   122k|                   (src.devicecoherent && (dst.coherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
  ------------------
  |  Branch (5371:21): [True: 0, False: 122k]
  |  Branch (5371:44): [True: 0, False: 0]
  |  Branch (5371:60): [True: 0, False: 0]
  |  Branch (5371:87): [True: 0, False: 0]
  |  Branch (5371:112): [True: 0, False: 0]
  |  Branch (5371:136): [True: 0, False: 0]
  ------------------
 5372|   122k|                   (src.queuefamilycoherent && (dst.coherent || dst.devicecoherent || dst.workgroupcoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
  ------------------
  |  Branch (5372:21): [True: 0, False: 122k]
  |  Branch (5372:49): [True: 0, False: 0]
  |  Branch (5372:65): [True: 0, False: 0]
  |  Branch (5372:87): [True: 0, False: 0]
  |  Branch (5372:112): [True: 0, False: 0]
  |  Branch (5372:136): [True: 0, False: 0]
  ------------------
 5373|   122k|                   (src.workgroupcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
  ------------------
  |  Branch (5373:21): [True: 0, False: 122k]
  |  Branch (5373:47): [True: 0, False: 0]
  |  Branch (5373:63): [True: 0, False: 0]
  |  Branch (5373:85): [True: 0, False: 0]
  |  Branch (5373:112): [True: 0, False: 0]
  |  Branch (5373:136): [True: 0, False: 0]
  ------------------
 5374|   122k|                   (src.subgroupcoherent  && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.shadercallcoherent)) ||
  ------------------
  |  Branch (5374:21): [True: 0, False: 122k]
  |  Branch (5374:47): [True: 0, False: 0]
  |  Branch (5374:63): [True: 0, False: 0]
  |  Branch (5374:85): [True: 0, False: 0]
  |  Branch (5374:112): [True: 0, False: 0]
  |  Branch (5374:137): [True: 0, False: 0]
  ------------------
 5375|   122k|                   (src.shadercallcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)))) {
  ------------------
  |  Branch (5375:21): [True: 0, False: 122k]
  |  Branch (5375:48): [True: 0, False: 0]
  |  Branch (5375:64): [True: 0, False: 0]
  |  Branch (5375:86): [True: 0, False: 0]
  |  Branch (5375:113): [True: 0, False: 0]
  |  Branch (5375:138): [True: 0, False: 0]
  ------------------
 5376|      0|        error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent/shadercallcoherent qualifier allowed",
 5377|      0|            GetPrecisionQualifierString(src.precision), "");
 5378|      0|    }
 5379|       |
 5380|       |    // Layout qualifiers
 5381|   173k|    mergeObjectLayoutQualifiers(dst, src, false);
 5382|       |
 5383|       |    // individual qualifiers
 5384|   173k|    bool repeated = false;
 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
 5386|   173k|    MERGE_SINGLETON(invariant);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5387|   173k|    MERGE_SINGLETON(centroid);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5388|   173k|    MERGE_SINGLETON(smooth);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5389|   173k|    MERGE_SINGLETON(flat);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 3.84k, False: 169k]
  |  |  |  Branch (5385:61): [True: 0, False: 3.84k]
  |  |  ------------------
  ------------------
 5390|   173k|    MERGE_SINGLETON(specConstant);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5391|   173k|    MERGE_SINGLETON(noContraction);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5392|   173k|    MERGE_SINGLETON(nopersp);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5393|   173k|    MERGE_SINGLETON(explicitInterp);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5394|   173k|    MERGE_SINGLETON(perPrimitiveNV);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 10, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 10]
  |  |  ------------------
  ------------------
 5395|   173k|    MERGE_SINGLETON(perViewNV);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5396|   173k|    MERGE_SINGLETON(perTaskNV);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5397|   173k|    MERGE_SINGLETON(patch);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 52, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 52]
  |  |  ------------------
  ------------------
 5398|   173k|    MERGE_SINGLETON(sample);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5399|   173k|    MERGE_SINGLETON(coherent);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 52.4k, False: 120k]
  |  |  |  Branch (5385:61): [True: 0, False: 52.4k]
  |  |  ------------------
  ------------------
 5400|   173k|    MERGE_SINGLETON(devicecoherent);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5401|   173k|    MERGE_SINGLETON(queuefamilycoherent);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5402|   173k|    MERGE_SINGLETON(workgroupcoherent);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5403|   173k|    MERGE_SINGLETON(subgroupcoherent);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5404|   173k|    MERGE_SINGLETON(shadercallcoherent);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5405|   173k|    MERGE_SINGLETON(nonprivate);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5406|   173k|    MERGE_SINGLETON(volatil);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 103k, False: 70.0k]
  |  |  |  Branch (5385:61): [True: 0, False: 103k]
  |  |  ------------------
  ------------------
 5407|   173k|    MERGE_SINGLETON(nontemporal);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 662, False: 172k]
  |  |  |  Branch (5385:61): [True: 0, False: 662]
  |  |  ------------------
  ------------------
 5408|   173k|    MERGE_SINGLETON(restrict);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5409|   173k|    MERGE_SINGLETON(readonly);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 13.4k, False: 159k]
  |  |  |  Branch (5385:61): [True: 0, False: 13.4k]
  |  |  ------------------
  ------------------
 5410|   173k|    MERGE_SINGLETON(writeonly);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 11.9k, False: 161k]
  |  |  |  Branch (5385:61): [True: 0, False: 11.9k]
  |  |  ------------------
  ------------------
 5411|   173k|    MERGE_SINGLETON(nonUniform);
  ------------------
  |  | 5385|   173k|    #define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field;
  |  |  ------------------
  |  |  |  Branch (5385:48): [True: 0, False: 173k]
  |  |  |  Branch (5385:61): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5412|       |
 5413|       |    // SPIR-V storage class qualifier (GL_EXT_spirv_intrinsics)
 5414|   173k|    dst.spirvStorageClass = src.spirvStorageClass;
 5415|       |
 5416|       |    // SPIR-V decorate qualifiers (GL_EXT_spirv_intrinsics)
 5417|   173k|    if (src.hasSpirvDecorate()) {
  ------------------
  |  Branch (5417:9): [True: 0, False: 173k]
  ------------------
 5418|      0|        if (dst.hasSpirvDecorate()) {
  ------------------
  |  Branch (5418:13): [True: 0, False: 0]
  ------------------
 5419|      0|            const TSpirvDecorate& srcSpirvDecorate = src.getSpirvDecorate();
 5420|      0|            TSpirvDecorate& dstSpirvDecorate = dst.getSpirvDecorate();
 5421|      0|            for (auto& decorate : srcSpirvDecorate.decorates) {
  ------------------
  |  Branch (5421:33): [True: 0, False: 0]
  ------------------
 5422|      0|                if (dstSpirvDecorate.decorates.find(decorate.first) != dstSpirvDecorate.decorates.end())
  ------------------
  |  Branch (5422:21): [True: 0, False: 0]
  ------------------
 5423|      0|                    error(loc, "too many SPIR-V decorate qualifiers", "spirv_decorate", "(decoration=%u)", decorate.first);
 5424|      0|                else
 5425|      0|                    dstSpirvDecorate.decorates.insert(decorate);
 5426|      0|            }
 5427|       |
 5428|      0|            for (auto& decorateId : srcSpirvDecorate.decorateIds) {
  ------------------
  |  Branch (5428:35): [True: 0, False: 0]
  ------------------
 5429|      0|                if (dstSpirvDecorate.decorateIds.find(decorateId.first) != dstSpirvDecorate.decorateIds.end())
  ------------------
  |  Branch (5429:21): [True: 0, False: 0]
  ------------------
 5430|      0|                    error(loc, "too many SPIR-V decorate qualifiers", "spirv_decorate_id", "(decoration=%u)", decorateId.first);
 5431|      0|                else
 5432|      0|                    dstSpirvDecorate.decorateIds.insert(decorateId);
 5433|      0|            }
 5434|       |
 5435|      0|            for (auto& decorateString : srcSpirvDecorate.decorateStrings) {
  ------------------
  |  Branch (5435:39): [True: 0, False: 0]
  ------------------
 5436|      0|                if (dstSpirvDecorate.decorates.find(decorateString.first) != dstSpirvDecorate.decorates.end())
  ------------------
  |  Branch (5436:21): [True: 0, False: 0]
  ------------------
 5437|      0|                    error(loc, "too many SPIR-V decorate qualifiers", "spirv_decorate_string", "(decoration=%u)", decorateString.first);
 5438|      0|                else
 5439|      0|                    dstSpirvDecorate.decorateStrings.insert(decorateString);
 5440|      0|            }
 5441|      0|        } else {
 5442|      0|            dst.spirvDecorate = src.spirvDecorate;
 5443|      0|        }
 5444|      0|    }
 5445|       |
 5446|   173k|    if (repeated)
  ------------------
  |  Branch (5446:9): [True: 0, False: 173k]
  ------------------
 5447|      0|        error(loc, "replicated qualifiers", "", "");
 5448|   173k|}
_ZN7glslang13TParseContext23computeSamplerTypeIndexERNS_8TSamplerE:
 5486|   140k|{
 5487|   140k|    int arrayIndex    = sampler.arrayed         ? 1 : 0;
  ------------------
  |  Branch (5487:25): [True: 42.9k, False: 97.8k]
  ------------------
 5488|   140k|    int shadowIndex   = sampler.shadow          ? 1 : 0;
  ------------------
  |  Branch (5488:25): [True: 12.7k, False: 128k]
  ------------------
 5489|   140k|    int externalIndex = sampler.isExternal()    ? 1 : 0;
  ------------------
  |  Branch (5489:25): [True: 0, False: 140k]
  ------------------
 5490|   140k|    int imageIndex    = sampler.isImageClass()  ? 1 : 0;
  ------------------
  |  Branch (5490:25): [True: 50.2k, False: 90.5k]
  ------------------
 5491|   140k|    int msIndex       = sampler.isMultiSample() ? 1 : 0;
  ------------------
  |  Branch (5491:25): [True: 11.8k, False: 129k]
  ------------------
 5492|       |
 5493|   140k|    int flattened = EsdNumDims * (EbtNumTypes * (2 * (2 * (2 * (2 * arrayIndex + msIndex) + imageIndex) + shadowIndex) +
 5494|   140k|                                                 externalIndex) + sampler.type) + sampler.dim;
 5495|   140k|    assert(flattened < maxSamplerIndex);
 5496|       |
 5497|   140k|    return flattened;
 5498|   140k|}
_ZN7glslang13TParseContext19getDefaultPrecisionERNS_11TPublicTypeE:
 5501|  1.57M|{
 5502|  1.57M|    if (publicType.basicType == EbtSampler)
  ------------------
  |  Branch (5502:9): [True: 140k, False: 1.43M]
  ------------------
 5503|   140k|        return defaultSamplerPrecision[computeSamplerTypeIndex(publicType.sampler)];
 5504|  1.43M|    else
 5505|  1.43M|        return defaultPrecision[publicType.basicType];
 5506|  1.57M|}
_ZN7glslang13TParseContext23precisionQualifierCheckERKNS_10TSourceLocENS_10TBasicTypeERNS_10TQualifierEb:
 5509|  1.57M|{
 5510|       |    // Built-in symbols are allowed some ambiguous precisions, to be pinned down
 5511|       |    // later by context.
 5512|  1.57M|    if (! obeyPrecisionQualifiers() || parsingBuiltins)
  ------------------
  |  Branch (5512:9): [True: 0, False: 1.57M]
  |  Branch (5512:40): [True: 1.57M, False: 854]
  ------------------
 5513|  1.57M|        return;
 5514|       |
 5515|    854|    if (baseType == EbtAtomicUint && qualifier.precision != EpqNone && qualifier.precision != EpqHigh)
  ------------------
  |  Branch (5515:9): [True: 0, False: 854]
  |  Branch (5515:38): [True: 0, False: 0]
  |  Branch (5515:72): [True: 0, False: 0]
  ------------------
 5516|      0|        error(loc, "atomic counters can only be highp", "atomic_uint", "");
 5517|       |
 5518|    854|    if (hasTypeParameter)
  ------------------
  |  Branch (5518:9): [True: 0, False: 854]
  ------------------
 5519|      0|        return;
 5520|       |
 5521|    854|    if (baseType == EbtFloat || baseType == EbtUint || baseType == EbtInt || baseType == EbtSampler || baseType == EbtAtomicUint) {
  ------------------
  |  Branch (5521:9): [True: 516, False: 338]
  |  Branch (5521:33): [True: 0, False: 338]
  |  Branch (5521:56): [True: 65, False: 273]
  |  Branch (5521:78): [True: 264, False: 9]
  |  Branch (5521:104): [True: 0, False: 9]
  ------------------
 5522|    845|        if (qualifier.precision == EpqNone) {
  ------------------
  |  Branch (5522:13): [True: 0, False: 845]
  ------------------
 5523|      0|            if (relaxedErrors())
  ------------------
  |  Branch (5523:17): [True: 0, False: 0]
  ------------------
 5524|      0|                warn(loc, "type requires declaration of default precision qualifier", TType::getBasicString(baseType), "substituting 'mediump'");
 5525|      0|            else
 5526|      0|                error(loc, "type requires declaration of default precision qualifier", TType::getBasicString(baseType), "");
 5527|      0|            qualifier.precision = EpqMedium;
 5528|      0|            defaultPrecision[baseType] = EpqMedium;
 5529|      0|        }
 5530|    845|    } else if (qualifier.precision != EpqNone)
  ------------------
  |  Branch (5530:16): [True: 0, False: 9]
  ------------------
 5531|      0|        error(loc, "type cannot have precision qualifier", TType::getBasicString(baseType), "");
 5532|    854|}
_ZN7glslang13TParseContext18parameterTypeCheckERKNS_10TSourceLocENS_17TStorageQualifierERKNS_5TTypeE:
 5535|  1.09M|{
 5536|  1.09M|    if ((qualifier == EvqOut || qualifier == EvqInOut) && type.isOpaque() && !intermediate.getBindlessMode())
  ------------------
  |  Branch (5536:10): [True: 11.9k, False: 1.07M]
  |  Branch (5536:33): [True: 652, False: 1.07M]
  |  Branch (5536:59): [True: 0, False: 12.5k]
  |  Branch (5536:78): [True: 0, False: 0]
  ------------------
 5537|      0|        error(loc, "samplers and atomic_uints cannot be output parameters", type.getBasicTypeString().c_str(), "");
 5538|  1.09M|    if (!parsingBuiltins && type.contains16BitFloat())
  ------------------
  |  Branch (5538:9): [True: 6, False: 1.09M]
  |  Branch (5538:29): [True: 0, False: 6]
  ------------------
 5539|      0|        requireFloat16Arithmetic(loc, type.getBasicTypeString().c_str(), "float16 types can only be in uniform block or buffer storage");
 5540|  1.09M|    if (!parsingBuiltins && type.contains16BitInt())
  ------------------
  |  Branch (5540:9): [True: 6, False: 1.09M]
  |  Branch (5540:29): [True: 0, False: 6]
  ------------------
 5541|      0|        requireInt16Arithmetic(loc, type.getBasicTypeString().c_str(), "(u)int16 types can only be in uniform block or buffer storage");
 5542|  1.09M|    if (!parsingBuiltins && type.contains8BitInt())
  ------------------
  |  Branch (5542:9): [True: 6, False: 1.09M]
  |  Branch (5542:29): [True: 0, False: 6]
  ------------------
 5543|      0|        requireInt8Arithmetic(loc, type.getBasicTypeString().c_str(), "(u)int8 types can only be in uniform block or buffer storage");
 5544|  1.09M|}
_ZN7glslang13TParseContext26containsFieldWithBasicTypeERKNS_5TTypeENS_10TBasicTypeE:
 5547|  1.62k|{
 5548|  1.62k|    if (type.getBasicType() == basicType)
  ------------------
  |  Branch (5548:9): [True: 0, False: 1.62k]
  ------------------
 5549|      0|        return true;
 5550|       |
 5551|  1.62k|    if (type.getBasicType() == EbtStruct) {
  ------------------
  |  Branch (5551:9): [True: 0, False: 1.62k]
  ------------------
 5552|      0|        const TTypeList& structure = *type.getStruct();
 5553|      0|        for (unsigned int i = 0; i < structure.size(); ++i) {
  ------------------
  |  Branch (5553:34): [True: 0, False: 0]
  ------------------
 5554|      0|            if (containsFieldWithBasicType(*structure[i].type, basicType))
  ------------------
  |  Branch (5554:17): [True: 0, False: 0]
  ------------------
 5555|      0|                return true;
 5556|      0|        }
 5557|      0|    }
 5558|       |
 5559|  1.62k|    return false;
 5560|  1.62k|}
_ZN7glslang13TParseContext14arraySizeCheckERKNS_10TSourceLocEPNS_12TIntermTypedERNS_10TArraySizeEPKcb:
 5567|  3.24k|{
 5568|  3.24k|    bool isConst = false;
 5569|  3.24k|    sizePair.node = nullptr;
 5570|       |
 5571|  3.24k|    int size = 1;
 5572|       |
 5573|  3.24k|    TIntermConstantUnion* constant = expr->getAsConstantUnion();
 5574|  3.24k|    if (constant) {
  ------------------
  |  Branch (5574:9): [True: 3.24k, False: 0]
  ------------------
 5575|       |        // handle true (non-specialization) constant
 5576|  3.24k|        size = constant->getConstArray()[0].getIConst();
 5577|  3.24k|        isConst = true;
 5578|  3.24k|    } else {
 5579|       |        // see if it's a specialization constant instead
 5580|      0|        if (expr->getQualifier().isSpecConstant()) {
  ------------------
  |  Branch (5580:13): [True: 0, False: 0]
  ------------------
 5581|      0|            isConst = true;
 5582|      0|            sizePair.node = expr;
 5583|      0|            TIntermSymbol* symbol = expr->getAsSymbolNode();
 5584|      0|            if (symbol && symbol->getConstArray().size() > 0)
  ------------------
  |  Branch (5584:17): [True: 0, False: 0]
  |  Branch (5584:27): [True: 0, False: 0]
  ------------------
 5585|      0|                size = symbol->getConstArray()[0].getIConst();
 5586|      0|        } else if (expr->getAsUnaryNode() && expr->getAsUnaryNode()->getOp() == glslang::EOpArrayLength &&
  ------------------
  |  Branch (5586:20): [True: 0, False: 0]
  |  Branch (5586:46): [True: 0, False: 0]
  ------------------
 5587|      0|                   expr->getAsUnaryNode()->getOperand()->getType().isCoopMatNV()) {
  ------------------
  |  Branch (5587:20): [True: 0, False: 0]
  ------------------
 5588|      0|            isConst = true;
 5589|      0|            size = 1;
 5590|      0|            sizePair.node = expr->getAsUnaryNode();
 5591|      0|        }
 5592|      0|    }
 5593|       |
 5594|  3.24k|    sizePair.size = size;
 5595|       |
 5596|  3.24k|    if (isTypeParameter) {
  ------------------
  |  Branch (5596:9): [True: 0, False: 3.24k]
  ------------------
 5597|      0|        if (extensionTurnedOn(E_GL_NV_cooperative_matrix2)) {
  ------------------
  |  Branch (5597:13): [True: 0, False: 0]
  ------------------
 5598|      0|            if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint && expr->getBasicType() != EbtBool)) {
  ------------------
  |  Branch (5598:17): [True: 0, False: 0]
  |  Branch (5598:31): [True: 0, False: 0]
  |  Branch (5598:65): [True: 0, False: 0]
  |  Branch (5598:100): [True: 0, False: 0]
  ------------------
 5599|      0|                error(loc, sizeType, "", "must be a constant integer or boolean expression");
 5600|      0|                return;
 5601|      0|            }
 5602|      0|        } else {
 5603|      0|            if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint)) {
  ------------------
  |  Branch (5603:17): [True: 0, False: 0]
  |  Branch (5603:31): [True: 0, False: 0]
  |  Branch (5603:65): [True: 0, False: 0]
  ------------------
 5604|      0|                error(loc, sizeType, "", "must be a constant integer expression");
 5605|      0|                return;
 5606|      0|            }
 5607|      0|        }
 5608|      0|        if (size < 0) {
  ------------------
  |  Branch (5608:13): [True: 0, False: 0]
  ------------------
 5609|      0|            error(loc, sizeType, "", "must be a non-negative integer");
 5610|      0|            return;
 5611|      0|        }
 5612|  3.24k|    } else {
 5613|  3.24k|        if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint)) {
  ------------------
  |  Branch (5613:13): [True: 0, False: 3.24k]
  |  Branch (5613:27): [True: 0, False: 3.24k]
  |  Branch (5613:61): [True: 0, False: 0]
  ------------------
 5614|      0|            error(loc, sizeType, "", "must be a constant integer expression");
 5615|      0|            return;
 5616|      0|        }
 5617|  3.24k|        if (size <= 0) {
  ------------------
  |  Branch (5617:13): [True: 0, False: 3.24k]
  ------------------
 5618|      0|            error(loc, sizeType, "", "must be a positive integer");
 5619|      0|            return;
 5620|      0|        }
 5621|  3.24k|    }
 5622|  3.24k|}
_ZN7glslang13TParseContext19arrayQualifierErrorERKNS_10TSourceLocERKNS_10TQualifierE:
 5630|    503|{
 5631|    503|    if (qualifier.storage == EvqConst) {
  ------------------
  |  Branch (5631:9): [True: 9, False: 494]
  ------------------
 5632|      9|        profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, "const array");
 5633|      9|        profileRequires(loc, EEsProfile, 300, nullptr, "const array");
 5634|      9|    }
 5635|       |
 5636|    503|    if (qualifier.storage == EvqVaryingIn && language == EShLangVertex) {
  ------------------
  |  Branch (5636:9): [True: 163, False: 340]
  |  Branch (5636:46): [True: 0, False: 163]
  ------------------
 5637|      0|        requireProfile(loc, ~EEsProfile, "vertex input arrays");
 5638|      0|        profileRequires(loc, ENoProfile, 150, nullptr, "vertex input arrays");
 5639|      0|    }
 5640|       |
 5641|    503|    return false;
 5642|    503|}
_ZN7glslang13TParseContext10arrayErrorERKNS_10TSourceLocERKNS_5TTypeE:
 5651|    503|{
 5652|    503|    if (type.getQualifier().storage == EvqVaryingOut && language == EShLangVertex) {
  ------------------
  |  Branch (5652:9): [True: 331, False: 172]
  |  Branch (5652:57): [True: 126, False: 205]
  ------------------
 5653|    126|        if (type.isArrayOfArrays())
  ------------------
  |  Branch (5653:13): [True: 0, False: 126]
  ------------------
 5654|      0|            requireProfile(loc, ~EEsProfile, "vertex-shader array-of-array output");
 5655|    126|        else if (type.isStruct())
  ------------------
  |  Branch (5655:18): [True: 0, False: 126]
  ------------------
 5656|      0|            requireProfile(loc, ~EEsProfile, "vertex-shader array-of-struct output");
 5657|    126|    }
 5658|    503|    if (type.getQualifier().storage == EvqVaryingIn && language == EShLangFragment) {
  ------------------
  |  Branch (5658:9): [True: 163, False: 340]
  |  Branch (5658:56): [True: 122, False: 41]
  ------------------
 5659|    122|        if (type.isArrayOfArrays())
  ------------------
  |  Branch (5659:13): [True: 0, False: 122]
  ------------------
 5660|      0|            requireProfile(loc, ~EEsProfile, "fragment-shader array-of-array input");
 5661|    122|        else if (type.isStruct())
  ------------------
  |  Branch (5661:18): [True: 0, False: 122]
  ------------------
 5662|      0|            requireProfile(loc, ~EEsProfile, "fragment-shader array-of-struct input");
 5663|    122|    }
 5664|    503|    if (type.getQualifier().storage == EvqVaryingOut && language == EShLangFragment) {
  ------------------
  |  Branch (5664:9): [True: 331, False: 172]
  |  Branch (5664:57): [True: 99, False: 232]
  ------------------
 5665|     99|        if (type.isArrayOfArrays())
  ------------------
  |  Branch (5665:13): [True: 0, False: 99]
  ------------------
 5666|      0|            requireProfile(loc, ~EEsProfile, "fragment-shader array-of-array output");
 5667|     99|    }
 5668|       |
 5669|    503|    return false;
 5670|    503|}
_ZN7glslang13TParseContext22arraySizeRequiredCheckERKNS_10TSourceLocERKNS_11TArraySizesE:
 5676|  9.44k|{
 5677|  9.44k|    if (!parsingBuiltins && arraySizes.hasUnsized())
  ------------------
  |  Branch (5677:9): [True: 0, False: 9.44k]
  |  Branch (5677:29): [True: 0, False: 0]
  ------------------
 5678|      0|        error(loc, "array size required", "", "");
 5679|  9.44k|}
_ZN7glslang13TParseContext16structArrayCheckERKNS_10TSourceLocERKNS_5TTypeE:
 5682|     10|{
 5683|     10|    const TTypeList& structure = *type.getStruct();
 5684|     60|    for (int m = 0; m < (int)structure.size(); ++m) {
  ------------------
  |  Branch (5684:21): [True: 50, False: 10]
  ------------------
 5685|     50|        const TType& member = *structure[m].type;
 5686|     50|        if (member.isArray())
  ------------------
  |  Branch (5686:13): [True: 0, False: 50]
  ------------------
 5687|      0|            arraySizeRequiredCheck(structure[m].loc, *member.getArraySizes());
 5688|     50|    }
 5689|     10|}
_ZN7glslang13TParseContext15arraySizesCheckERKNS_10TSourceLocERKNS_10TQualifierEPNS_11TArraySizesEPKNS_12TIntermTypedEb:
 5693|    762|{
 5694|    762|    assert(arraySizes);
 5695|       |
 5696|       |    // always allow special built-in ins/outs sized to topologies
 5697|    762|    if (parsingBuiltins)
  ------------------
  |  Branch (5697:9): [True: 753, False: 9]
  ------------------
 5698|    753|        return;
 5699|       |
 5700|       |    // initializer must be a sized array, in which case
 5701|       |    // allow the initializer to set any unknown array sizes
 5702|      9|    if (initializer != nullptr) {
  ------------------
  |  Branch (5702:9): [True: 9, False: 0]
  ------------------
 5703|      9|        if (initializer->getType().isUnsizedArray())
  ------------------
  |  Branch (5703:13): [True: 0, False: 9]
  ------------------
 5704|      0|            error(loc, "array initializer must be sized", "[]", "");
 5705|      9|        return;
 5706|      9|    }
 5707|       |
 5708|       |    // No environment allows any non-outer-dimension to be implicitly sized
 5709|      0|    if (arraySizes->isInnerUnsized()) {
  ------------------
  |  Branch (5709:9): [True: 0, False: 0]
  ------------------
 5710|      0|        error(loc, "only outermost dimension of an array of arrays can be implicitly sized", "[]", "");
 5711|      0|        arraySizes->clearInnerUnsized();
 5712|      0|    }
 5713|       |
 5714|      0|    if (arraySizes->isInnerSpecialization() &&
  ------------------
  |  Branch (5714:9): [True: 0, False: 0]
  ------------------
 5715|      0|        (qualifier.storage != EvqTemporary && qualifier.storage != EvqGlobal && qualifier.storage != EvqShared && qualifier.storage != EvqConst))
  ------------------
  |  Branch (5715:10): [True: 0, False: 0]
  |  Branch (5715:47): [True: 0, False: 0]
  |  Branch (5715:81): [True: 0, False: 0]
  |  Branch (5715:115): [True: 0, False: 0]
  ------------------
 5716|      0|        error(loc, "only outermost dimension of an array of arrays can be a specialization constant", "[]", "");
 5717|       |
 5718|       |    // desktop always allows outer-dimension-unsized variable arrays,
 5719|      0|    if (!isEsProfile())
  ------------------
  |  Branch (5719:9): [True: 0, False: 0]
  ------------------
 5720|      0|        return;
 5721|       |
 5722|       |    // for ES, if size isn't coming from an initializer, it has to be explicitly declared now,
 5723|       |    // with very few exceptions
 5724|       |
 5725|       |    // implicitly-sized io exceptions:
 5726|      0|    switch (language) {
 5727|      0|    case EShLangGeometry:
  ------------------
  |  Branch (5727:5): [True: 0, False: 0]
  ------------------
 5728|      0|        if (qualifier.storage == EvqVaryingIn)
  ------------------
  |  Branch (5728:13): [True: 0, False: 0]
  ------------------
 5729|      0|            if ((isEsProfile() && version >= 320) ||
  ------------------
  |  Branch (5729:18): [True: 0, False: 0]
  |  Branch (5729:35): [True: 0, False: 0]
  ------------------
 5730|      0|                extensionsTurnedOn(Num_AEP_geometry_shader, AEP_geometry_shader))
  ------------------
  |  Branch (5730:17): [True: 0, False: 0]
  ------------------
 5731|      0|                return;
 5732|      0|        break;
 5733|      0|    case EShLangTessControl:
  ------------------
  |  Branch (5733:5): [True: 0, False: 0]
  ------------------
 5734|      0|        if ( qualifier.storage == EvqVaryingIn ||
  ------------------
  |  Branch (5734:14): [True: 0, False: 0]
  ------------------
 5735|      0|            (qualifier.storage == EvqVaryingOut && ! qualifier.isPatch()))
  ------------------
  |  Branch (5735:14): [True: 0, False: 0]
  |  Branch (5735:52): [True: 0, False: 0]
  ------------------
 5736|      0|            if ((isEsProfile() && version >= 320) ||
  ------------------
  |  Branch (5736:18): [True: 0, False: 0]
  |  Branch (5736:35): [True: 0, False: 0]
  ------------------
 5737|      0|                extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
  ------------------
  |  Branch (5737:17): [True: 0, False: 0]
  ------------------
 5738|      0|                return;
 5739|      0|        break;
 5740|      0|    case EShLangTessEvaluation:
  ------------------
  |  Branch (5740:5): [True: 0, False: 0]
  ------------------
 5741|      0|        if ((qualifier.storage == EvqVaryingIn && ! qualifier.isPatch()) ||
  ------------------
  |  Branch (5741:14): [True: 0, False: 0]
  |  Branch (5741:51): [True: 0, False: 0]
  ------------------
 5742|      0|             qualifier.storage == EvqVaryingOut)
  ------------------
  |  Branch (5742:14): [True: 0, False: 0]
  ------------------
 5743|      0|            if ((isEsProfile() && version >= 320) ||
  ------------------
  |  Branch (5743:18): [True: 0, False: 0]
  |  Branch (5743:35): [True: 0, False: 0]
  ------------------
 5744|      0|                extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
  ------------------
  |  Branch (5744:17): [True: 0, False: 0]
  ------------------
 5745|      0|                return;
 5746|      0|        break;
 5747|      0|    case EShLangMesh:
  ------------------
  |  Branch (5747:5): [True: 0, False: 0]
  ------------------
 5748|      0|        if (qualifier.storage == EvqVaryingOut)
  ------------------
  |  Branch (5748:13): [True: 0, False: 0]
  ------------------
 5749|      0|            if ((isEsProfile() && version >= 320) ||
  ------------------
  |  Branch (5749:18): [True: 0, False: 0]
  |  Branch (5749:35): [True: 0, False: 0]
  ------------------
 5750|      0|                extensionsTurnedOn(Num_AEP_mesh_shader, AEP_mesh_shader))
  ------------------
  |  Branch (5750:17): [True: 0, False: 0]
  ------------------
 5751|      0|                return;
 5752|      0|        break;
 5753|      0|    default:
  ------------------
  |  Branch (5753:5): [True: 0, False: 0]
  ------------------
 5754|      0|        break;
 5755|      0|    }
 5756|       |
 5757|       |    // last member of ssbo block exception:
 5758|      0|    if (qualifier.storage == EvqBuffer && lastMember)
  ------------------
  |  Branch (5758:9): [True: 0, False: 0]
  |  Branch (5758:43): [True: 0, False: 0]
  ------------------
 5759|      0|        return;
 5760|       |
 5761|      0|    if (qualifier.storage == EvqUniform && lastMember && extensionTurnedOn(E_GL_EXT_uniform_buffer_unsized_array))
  ------------------
  |  Branch (5761:9): [True: 0, False: 0]
  |  Branch (5761:44): [True: 0, False: 0]
  |  Branch (5761:58): [True: 0, False: 0]
  ------------------
 5762|      0|        return;
 5763|       |
 5764|      0|    arraySizeRequiredCheck(loc, *arraySizes);
 5765|      0|}
_ZN7glslang13TParseContext24arrayOfArrayVersionCheckERKNS_10TSourceLocEPKNS_11TArraySizesE:
 5768|  23.9k|{
 5769|  23.9k|    if (sizes == nullptr || sizes->getNumDims() == 1)
  ------------------
  |  Branch (5769:9): [True: 13.5k, False: 10.4k]
  |  Branch (5769:29): [True: 10.4k, False: 40]
  ------------------
 5770|  23.9k|        return;
 5771|       |
 5772|     40|    const char* feature = "arrays of arrays";
 5773|       |
 5774|     40|    requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature);
 5775|     40|    profileRequires(loc, EEsProfile, 310, nullptr, feature);
 5776|     40|    profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, nullptr, feature);
 5777|     40|}
_ZN7glslang13TParseContext12declareArrayERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS_5TTypeERPNS_7TSymbolE:
 5784|    503|{
 5785|    503|    if (symbol == nullptr) {
  ------------------
  |  Branch (5785:9): [True: 503, False: 0]
  ------------------
 5786|    503|        bool currentScope;
 5787|    503|        symbol = symbolTable.find(identifier, nullptr, &currentScope);
 5788|       |
 5789|    503|        if (symbol && builtInName(identifier) && ! symbolTable.atBuiltInLevel()) {
  ------------------
  |  Branch (5789:13): [True: 0, False: 503]
  |  Branch (5789:23): [True: 0, False: 0]
  |  Branch (5789:50): [True: 0, False: 0]
  ------------------
 5790|       |            // bad shader (errors already reported) trying to redeclare a built-in name as an array
 5791|      0|            symbol = nullptr;
 5792|      0|            return;
 5793|      0|        }
 5794|    503|        if (symbol == nullptr || ! currentScope) {
  ------------------
  |  Branch (5794:13): [True: 503, False: 0]
  |  Branch (5794:34): [True: 0, False: 0]
  ------------------
 5795|       |            //
 5796|       |            // Successfully process a new definition.
 5797|       |            // (Redeclarations have to take place at the same scope; otherwise they are hiding declarations)
 5798|       |            //
 5799|    503|            symbol = new TVariable(&identifier, type);
 5800|    503|            symbolTable.insert(*symbol);
 5801|    503|            if (symbolTable.atGlobalLevel())
  ------------------
  |  Branch (5801:17): [True: 500, False: 3]
  ------------------
 5802|    500|                trackLinkage(*symbol);
 5803|       |
 5804|    503|            if (! symbolTable.atBuiltInLevel()) {
  ------------------
  |  Branch (5804:17): [True: 9, False: 494]
  ------------------
 5805|      9|                if (isIoResizeArray(type)) {
  ------------------
  |  Branch (5805:21): [True: 0, False: 9]
  ------------------
 5806|      0|                    ioArraySymbolResizeList.push_back(symbol);
 5807|      0|                    checkIoArraysConsistency(loc, true);
 5808|      0|                } else
 5809|      9|                    fixIoArraySize(loc, symbol->getWritableType());
 5810|      9|            }
 5811|       |
 5812|    503|            return;
 5813|    503|        }
 5814|      0|        if (symbol->getAsAnonMember()) {
  ------------------
  |  Branch (5814:13): [True: 0, False: 0]
  ------------------
 5815|      0|            error(loc, "cannot redeclare a user-block member array", identifier.c_str(), "");
 5816|      0|            symbol = nullptr;
 5817|      0|            return;
 5818|      0|        }
 5819|      0|    }
 5820|       |
 5821|       |    //
 5822|       |    // Process a redeclaration.
 5823|       |    //
 5824|       |
 5825|      0|    if (symbol == nullptr) {
  ------------------
  |  Branch (5825:9): [True: 0, False: 0]
  ------------------
 5826|      0|        error(loc, "array variable name expected", identifier.c_str(), "");
 5827|      0|        return;
 5828|      0|    }
 5829|       |
 5830|       |    // redeclareBuiltinVariable() should have already done the copyUp()
 5831|      0|    TType& existingType = symbol->getWritableType();
 5832|       |
 5833|      0|    if (! existingType.isArray()) {
  ------------------
  |  Branch (5833:9): [True: 0, False: 0]
  ------------------
 5834|      0|        error(loc, "redeclaring non-array as array", identifier.c_str(), "");
 5835|      0|        return;
 5836|      0|    }
 5837|       |
 5838|      0|    if (! existingType.sameElementType(type)) {
  ------------------
  |  Branch (5838:9): [True: 0, False: 0]
  ------------------
 5839|      0|        error(loc, "redeclaration of array with a different element type", identifier.c_str(), "");
 5840|      0|        return;
 5841|      0|    }
 5842|       |
 5843|      0|    if (! existingType.sameInnerArrayness(type)) {
  ------------------
  |  Branch (5843:9): [True: 0, False: 0]
  ------------------
 5844|      0|        error(loc, "redeclaration of array with a different array dimensions or sizes", identifier.c_str(), "");
 5845|      0|        return;
 5846|      0|    }
 5847|       |
 5848|      0|    if (existingType.isSizedArray()) {
  ------------------
  |  Branch (5848:9): [True: 0, False: 0]
  ------------------
 5849|       |        // be more leniant for input arrays to geometry shaders and tessellation control outputs, where the redeclaration is the same size
 5850|      0|        if (! (isIoResizeArray(type) && existingType.getOuterArraySize() == type.getOuterArraySize()))
  ------------------
  |  Branch (5850:16): [True: 0, False: 0]
  |  Branch (5850:41): [True: 0, False: 0]
  ------------------
 5851|      0|            error(loc, "redeclaration of array with size", identifier.c_str(), "");
 5852|      0|        return;
 5853|      0|    }
 5854|       |
 5855|      0|    arrayLimitCheck(loc, identifier, type.getOuterArraySize());
 5856|       |
 5857|      0|    existingType.updateArraySizes(type);
 5858|       |
 5859|      0|    if (isIoResizeArray(type))
  ------------------
  |  Branch (5859:9): [True: 0, False: 0]
  ------------------
 5860|      0|        checkIoArraysConsistency(loc);
 5861|      0|}
_ZN7glslang13TParseContext25checkAndResizeMeshViewDimERKNS_10TSourceLocERNS_5TTypeEb:
 5935|  13.8k|{
 5936|       |    // see if member is a per-view attribute
 5937|  13.8k|    if (!type.getQualifier().isPerView())
  ------------------
  |  Branch (5937:9): [True: 13.7k, False: 25]
  ------------------
 5938|  13.7k|        return;
 5939|       |
 5940|     25|    if ((isBlockMember && type.isArray()) || (!isBlockMember && type.isArrayOfArrays())) {
  ------------------
  |  Branch (5940:10): [True: 25, False: 0]
  |  Branch (5940:27): [True: 25, False: 0]
  |  Branch (5940:47): [True: 0, False: 0]
  |  Branch (5940:65): [True: 0, False: 0]
  ------------------
 5941|       |        // since we don't have the maxMeshViewCountNV set during parsing builtins, we hardcode the value.
 5942|     25|        int maxViewCount = parsingBuiltins ? 4 : resources.maxMeshViewCountNV;
  ------------------
  |  Branch (5942:28): [True: 25, False: 0]
  ------------------
 5943|       |        // For block members, outermost array dimension is the view dimension.
 5944|       |        // For non-block members, outermost array dimension is the vertex/primitive dimension
 5945|       |        // and 2nd outermost is the view dimension.
 5946|     25|        int viewDim = isBlockMember ? 0 : 1;
  ------------------
  |  Branch (5946:23): [True: 25, False: 0]
  ------------------
 5947|     25|        int viewDimSize = type.getArraySizes()->getDimSize(viewDim);
 5948|       |
 5949|     25|        if (viewDimSize != UnsizedArraySize && viewDimSize != maxViewCount)
  ------------------
  |  Branch (5949:13): [True: 0, False: 25]
  |  Branch (5949:48): [True: 0, False: 0]
  ------------------
 5950|      0|            error(loc, "mesh view output array size must be gl_MaxMeshViewCountNV or implicitly sized", "[]", "");
 5951|     25|        else if (viewDimSize == UnsizedArraySize)
  ------------------
  |  Branch (5951:18): [True: 25, False: 0]
  ------------------
 5952|     25|            type.getArraySizes()->setDimSize(viewDim, maxViewCount);
 5953|     25|    }
 5954|      0|    else {
 5955|      0|        error(loc, "requires a view array dimension", "perviewNV", "");
 5956|      0|    }
 5957|     25|}
_ZN7glslang13TParseContext17nonInitConstCheckERKNS_10TSourceLocERNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERNS_5TTypeE:
 5977|  9.34k|{
 5978|       |    //
 5979|       |    // Make the qualifier make sense, given that there is not an initializer.
 5980|       |    //
 5981|  9.34k|    if (type.getQualifier().storage == EvqConst ||
  ------------------
  |  Branch (5981:9): [True: 0, False: 9.34k]
  ------------------
 5982|  9.34k|        type.getQualifier().storage == EvqConstReadOnly) {
  ------------------
  |  Branch (5982:9): [True: 0, False: 9.34k]
  ------------------
 5983|      0|        type.getQualifier().makeTemporary();
 5984|      0|        error(loc, "variables with qualifier 'const' must be initialized", identifier.c_str(), "");
 5985|      0|    }
 5986|  9.34k|}
_ZN7glslang13TParseContext24redeclareBuiltinVariableERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS_10TQualifierERKNS_17TShaderQualifiersE:
 6000|  13.7k|{
 6001|  13.7k|    if (! builtInName(identifier) || symbolTable.atBuiltInLevel() || ! symbolTable.atGlobalLevel())
  ------------------
  |  Branch (6001:9): [True: 600, False: 13.1k]
  |  Branch (6001:38): [True: 13.1k, False: 0]
  |  Branch (6001:70): [True: 0, False: 0]
  ------------------
 6002|  13.7k|        return nullptr;
 6003|       |
 6004|      0|    bool nonEsRedecls = (!isEsProfile() && (version >= 130 || identifier == "gl_TexCoord"));
  ------------------
  |  Branch (6004:26): [True: 0, False: 0]
  |  Branch (6004:45): [True: 0, False: 0]
  |  Branch (6004:63): [True: 0, False: 0]
  ------------------
 6005|      0|    bool    esRedecls = (isEsProfile() &&
  ------------------
  |  Branch (6005:26): [True: 0, False: 0]
  ------------------
 6006|      0|                         (version >= 320 || extensionsTurnedOn(Num_AEP_shader_io_blocks, AEP_shader_io_blocks) ||
  ------------------
  |  Branch (6006:27): [True: 0, False: 0]
  |  Branch (6006:45): [True: 0, False: 0]
  ------------------
 6007|      0|                          (identifier == "gl_FragDepth" && extensionTurnedOn(E_GL_EXT_conservative_depth))));
  ------------------
  |  Branch (6007:28): [True: 0, False: 0]
  |  Branch (6007:60): [True: 0, False: 0]
  ------------------
 6008|      0|    if (! esRedecls && ! nonEsRedecls)
  ------------------
  |  Branch (6008:9): [True: 0, False: 0]
  |  Branch (6008:24): [True: 0, False: 0]
  ------------------
 6009|      0|        return nullptr;
 6010|       |
 6011|       |    // Special case when using GL_ARB_separate_shader_objects
 6012|      0|    bool ssoPre150 = false;  // means the only reason this variable is redeclared is due to this combination
 6013|      0|    if (!isEsProfile() && version <= 140 && extensionTurnedOn(E_GL_ARB_separate_shader_objects)) {
  ------------------
  |  Branch (6013:9): [True: 0, False: 0]
  |  Branch (6013:27): [True: 0, False: 0]
  |  Branch (6013:45): [True: 0, False: 0]
  ------------------
 6014|      0|        if (identifier == "gl_Position"     ||
  ------------------
  |  Branch (6014:13): [True: 0, False: 0]
  ------------------
 6015|      0|            identifier == "gl_PointSize"    ||
  ------------------
  |  Branch (6015:13): [True: 0, False: 0]
  ------------------
 6016|      0|            identifier == "gl_ClipVertex"   ||
  ------------------
  |  Branch (6016:13): [True: 0, False: 0]
  ------------------
 6017|      0|            identifier == "gl_FogFragCoord")
  ------------------
  |  Branch (6017:13): [True: 0, False: 0]
  ------------------
 6018|      0|            ssoPre150 = true;
 6019|      0|    }
 6020|       |
 6021|       |    // Potentially redeclaring a built-in variable...
 6022|       |
 6023|      0|    if (ssoPre150 ||
  ------------------
  |  Branch (6023:9): [True: 0, False: 0]
  ------------------
 6024|      0|        (identifier == "gl_FragDepth"           && ((nonEsRedecls && version >= 420) || esRedecls)) ||
  ------------------
  |  Branch (6024:10): [True: 0, False: 0]
  |  Branch (6024:54): [True: 0, False: 0]
  |  Branch (6024:70): [True: 0, False: 0]
  |  Branch (6024:89): [True: 0, False: 0]
  ------------------
 6025|      0|        (identifier == "gl_FragCoord"           && ((nonEsRedecls && version >= 140) || esRedecls)) ||
  ------------------
  |  Branch (6025:10): [True: 0, False: 0]
  |  Branch (6025:54): [True: 0, False: 0]
  |  Branch (6025:70): [True: 0, False: 0]
  |  Branch (6025:89): [True: 0, False: 0]
  ------------------
 6026|      0|         identifier == "gl_ClipDistance"                                                            ||
  ------------------
  |  Branch (6026:10): [True: 0, False: 0]
  ------------------
 6027|      0|         identifier == "gl_CullDistance"                                                            ||
  ------------------
  |  Branch (6027:10): [True: 0, False: 0]
  ------------------
 6028|      0|         identifier == "gl_ShadingRateEXT"                                                          ||
  ------------------
  |  Branch (6028:10): [True: 0, False: 0]
  ------------------
 6029|      0|         identifier == "gl_PrimitiveShadingRateEXT"                                                 ||
  ------------------
  |  Branch (6029:10): [True: 0, False: 0]
  ------------------
 6030|      0|         identifier == "gl_FrontColor"                                                              ||
  ------------------
  |  Branch (6030:10): [True: 0, False: 0]
  ------------------
 6031|      0|         identifier == "gl_BackColor"                                                               ||
  ------------------
  |  Branch (6031:10): [True: 0, False: 0]
  ------------------
 6032|      0|         identifier == "gl_FrontSecondaryColor"                                                     ||
  ------------------
  |  Branch (6032:10): [True: 0, False: 0]
  ------------------
 6033|      0|         identifier == "gl_BackSecondaryColor"                                                      ||
  ------------------
  |  Branch (6033:10): [True: 0, False: 0]
  ------------------
 6034|      0|         identifier == "gl_SecondaryColor"                                                          ||
  ------------------
  |  Branch (6034:10): [True: 0, False: 0]
  ------------------
 6035|      0|        (identifier == "gl_Color"               && language == EShLangFragment)                     ||
  ------------------
  |  Branch (6035:10): [True: 0, False: 0]
  |  Branch (6035:52): [True: 0, False: 0]
  ------------------
 6036|      0|        (identifier == "gl_FragStencilRefARB"   && (nonEsRedecls && version >= 140)
  ------------------
  |  Branch (6036:10): [True: 0, False: 0]
  |  Branch (6036:53): [True: 0, False: 0]
  |  Branch (6036:69): [True: 0, False: 0]
  ------------------
 6037|      0|                                                && language == EShLangFragment)                     ||
  ------------------
  |  Branch (6037:52): [True: 0, False: 0]
  ------------------
 6038|      0|         identifier == "gl_SampleMask"                                                              ||
  ------------------
  |  Branch (6038:10): [True: 0, False: 0]
  ------------------
 6039|      0|         identifier == "gl_Layer"                                                                   ||
  ------------------
  |  Branch (6039:10): [True: 0, False: 0]
  ------------------
 6040|      0|         identifier == "gl_PrimitiveIndicesNV"                                                      ||
  ------------------
  |  Branch (6040:10): [True: 0, False: 0]
  ------------------
 6041|      0|         identifier == "gl_PrimitivePointIndicesEXT"                                                ||
  ------------------
  |  Branch (6041:10): [True: 0, False: 0]
  ------------------
 6042|      0|         identifier == "gl_PrimitiveLineIndicesEXT"                                                 ||
  ------------------
  |  Branch (6042:10): [True: 0, False: 0]
  ------------------
 6043|      0|         identifier == "gl_PrimitiveTriangleIndicesEXT"                                             ||
  ------------------
  |  Branch (6043:10): [True: 0, False: 0]
  ------------------
 6044|      0|         identifier == "gl_TexCoord") {
  ------------------
  |  Branch (6044:10): [True: 0, False: 0]
  ------------------
 6045|       |
 6046|       |        // Find the existing symbol, if any.
 6047|      0|        bool builtIn;
 6048|      0|        TSymbol* symbol = symbolTable.find(identifier, &builtIn);
 6049|       |
 6050|       |        // If the symbol was not found, this must be a version/profile/stage
 6051|       |        // that doesn't have it.
 6052|      0|        if (! symbol)
  ------------------
  |  Branch (6052:13): [True: 0, False: 0]
  ------------------
 6053|      0|            return nullptr;
 6054|       |
 6055|       |        // If it wasn't at a built-in level, then it's already been redeclared;
 6056|       |        // that is, this is a redeclaration of a redeclaration; reuse that initial
 6057|       |        // redeclaration.  Otherwise, make the new one.
 6058|      0|        if (builtIn) {
  ------------------
  |  Branch (6058:13): [True: 0, False: 0]
  ------------------
 6059|      0|            makeEditable(symbol);
 6060|      0|            symbolTable.amendSymbolIdLevel(*symbol);
 6061|      0|        }
 6062|       |
 6063|       |        // Now, modify the type of the copy, as per the type of the current redeclaration.
 6064|       |
 6065|      0|        TQualifier& symbolQualifier = symbol->getWritableType().getQualifier();
 6066|      0|        if (ssoPre150) {
  ------------------
  |  Branch (6066:13): [True: 0, False: 0]
  ------------------
 6067|      0|            if (intermediate.inIoAccessed(identifier))
  ------------------
  |  Branch (6067:17): [True: 0, False: 0]
  ------------------
 6068|      0|                error(loc, "cannot redeclare after use", identifier.c_str(), "");
 6069|      0|            if (qualifier.hasLayout())
  ------------------
  |  Branch (6069:17): [True: 0, False: 0]
  ------------------
 6070|      0|                error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str());
 6071|      0|            if (qualifier.isMemory() || qualifier.isAuxiliary() || (language == EShLangVertex   && qualifier.storage != EvqVaryingOut) ||
  ------------------
  |  Branch (6071:17): [True: 0, False: 0]
  |  Branch (6071:41): [True: 0, False: 0]
  |  Branch (6071:69): [True: 0, False: 0]
  |  Branch (6071:100): [True: 0, False: 0]
  ------------------
 6072|      0|                                                                   (language == EShLangFragment && qualifier.storage != EvqVaryingIn))
  ------------------
  |  Branch (6072:69): [True: 0, False: 0]
  |  Branch (6072:100): [True: 0, False: 0]
  ------------------
 6073|      0|                error(loc, "cannot change storage, memory, or auxiliary qualification of", "redeclaration", symbol->getName().c_str());
 6074|      0|            if (! qualifier.smooth)
  ------------------
  |  Branch (6074:17): [True: 0, False: 0]
  ------------------
 6075|      0|                error(loc, "cannot change interpolation qualification of", "redeclaration", symbol->getName().c_str());
 6076|      0|        } else if (identifier == "gl_FrontColor"          ||
  ------------------
  |  Branch (6076:20): [True: 0, False: 0]
  ------------------
 6077|      0|                   identifier == "gl_BackColor"           ||
  ------------------
  |  Branch (6077:20): [True: 0, False: 0]
  ------------------
 6078|      0|                   identifier == "gl_FrontSecondaryColor" ||
  ------------------
  |  Branch (6078:20): [True: 0, False: 0]
  ------------------
 6079|      0|                   identifier == "gl_BackSecondaryColor"  ||
  ------------------
  |  Branch (6079:20): [True: 0, False: 0]
  ------------------
 6080|      0|                   identifier == "gl_SecondaryColor"      ||
  ------------------
  |  Branch (6080:20): [True: 0, False: 0]
  ------------------
 6081|      0|                   identifier == "gl_Color") {
  ------------------
  |  Branch (6081:20): [True: 0, False: 0]
  ------------------
 6082|      0|            symbolQualifier.flat = qualifier.flat;
 6083|      0|            symbolQualifier.smooth = qualifier.smooth;
 6084|      0|            symbolQualifier.nopersp = qualifier.nopersp;
 6085|      0|            if (qualifier.hasLayout())
  ------------------
  |  Branch (6085:17): [True: 0, False: 0]
  ------------------
 6086|      0|                error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str());
 6087|      0|            if (qualifier.isMemory() || qualifier.isAuxiliary() || symbol->getType().getQualifier().storage != qualifier.storage)
  ------------------
  |  Branch (6087:17): [True: 0, False: 0]
  |  Branch (6087:41): [True: 0, False: 0]
  |  Branch (6087:68): [True: 0, False: 0]
  ------------------
 6088|      0|                error(loc, "cannot change storage, memory, or auxiliary qualification of", "redeclaration", symbol->getName().c_str());
 6089|      0|        } else if (identifier == "gl_TexCoord"     ||
  ------------------
  |  Branch (6089:20): [True: 0, False: 0]
  ------------------
 6090|      0|                   identifier == "gl_ClipDistance" ||
  ------------------
  |  Branch (6090:20): [True: 0, False: 0]
  ------------------
 6091|      0|                   identifier == "gl_CullDistance") {
  ------------------
  |  Branch (6091:20): [True: 0, False: 0]
  ------------------
 6092|      0|            if (qualifier.hasLayout() || qualifier.isMemory() || qualifier.isAuxiliary() ||
  ------------------
  |  Branch (6092:17): [True: 0, False: 0]
  |  Branch (6092:42): [True: 0, False: 0]
  |  Branch (6092:66): [True: 0, False: 0]
  ------------------
 6093|      0|                qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat ||
  ------------------
  |  Branch (6093:17): [True: 0, False: 0]
  |  Branch (6093:65): [True: 0, False: 0]
  ------------------
 6094|      0|                symbolQualifier.storage != qualifier.storage)
  ------------------
  |  Branch (6094:17): [True: 0, False: 0]
  ------------------
 6095|      0|                error(loc, "cannot change qualification of", "redeclaration", symbol->getName().c_str());
 6096|      0|        } else if (identifier == "gl_FragCoord") {
  ------------------
  |  Branch (6096:20): [True: 0, False: 0]
  ------------------
 6097|      0|            if (!intermediate.getTexCoordRedeclared() && intermediate.inIoAccessed("gl_FragCoord"))
  ------------------
  |  Branch (6097:17): [True: 0, False: 0]
  |  Branch (6097:17): [True: 0, False: 0]
  |  Branch (6097:58): [True: 0, False: 0]
  ------------------
 6098|      0|                error(loc, "cannot redeclare after use", "gl_FragCoord", "");
 6099|      0|            if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat ||
  ------------------
  |  Branch (6099:17): [True: 0, False: 0]
  |  Branch (6099:65): [True: 0, False: 0]
  ------------------
 6100|      0|                qualifier.isMemory() || qualifier.isAuxiliary())
  ------------------
  |  Branch (6100:17): [True: 0, False: 0]
  |  Branch (6100:41): [True: 0, False: 0]
  ------------------
 6101|      0|                error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str());
 6102|      0|            if (qualifier.storage != EvqVaryingIn)
  ------------------
  |  Branch (6102:17): [True: 0, False: 0]
  ------------------
 6103|      0|                error(loc, "cannot change input storage qualification of", "redeclaration", symbol->getName().c_str());
 6104|      0|            if (! builtIn && (publicType.pixelCenterInteger != intermediate.getPixelCenterInteger() ||
  ------------------
  |  Branch (6104:17): [True: 0, False: 0]
  |  Branch (6104:31): [True: 0, False: 0]
  ------------------
 6105|      0|                              publicType.originUpperLeft != intermediate.getOriginUpperLeft()))
  ------------------
  |  Branch (6105:31): [True: 0, False: 0]
  ------------------
 6106|      0|                error(loc, "cannot redeclare with different qualification:", "redeclaration", symbol->getName().c_str());
 6107|       |
 6108|       |
 6109|      0|            intermediate.setTexCoordRedeclared();
 6110|      0|            if (publicType.pixelCenterInteger)
  ------------------
  |  Branch (6110:17): [True: 0, False: 0]
  ------------------
 6111|      0|                intermediate.setPixelCenterInteger();
 6112|      0|            if (publicType.originUpperLeft)
  ------------------
  |  Branch (6112:17): [True: 0, False: 0]
  ------------------
 6113|      0|                intermediate.setOriginUpperLeft();
 6114|      0|        } else if (identifier == "gl_FragDepth") {
  ------------------
  |  Branch (6114:20): [True: 0, False: 0]
  ------------------
 6115|      0|            if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat ||
  ------------------
  |  Branch (6115:17): [True: 0, False: 0]
  |  Branch (6115:65): [True: 0, False: 0]
  ------------------
 6116|      0|                qualifier.isMemory() || qualifier.isAuxiliary())
  ------------------
  |  Branch (6116:17): [True: 0, False: 0]
  |  Branch (6116:41): [True: 0, False: 0]
  ------------------
 6117|      0|                error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str());
 6118|      0|            if (qualifier.storage != EvqVaryingOut)
  ------------------
  |  Branch (6118:17): [True: 0, False: 0]
  ------------------
 6119|      0|                error(loc, "cannot change output storage qualification of", "redeclaration", symbol->getName().c_str());
 6120|      0|            if (publicType.layoutDepth != EldNone) {
  ------------------
  |  Branch (6120:17): [True: 0, False: 0]
  ------------------
 6121|      0|                if (intermediate.inIoAccessed("gl_FragDepth"))
  ------------------
  |  Branch (6121:21): [True: 0, False: 0]
  ------------------
 6122|      0|                    error(loc, "cannot redeclare after use", "gl_FragDepth", "");
 6123|      0|                if (! intermediate.setDepth(publicType.layoutDepth))
  ------------------
  |  Branch (6123:21): [True: 0, False: 0]
  ------------------
 6124|      0|                    error(loc, "all redeclarations must use the same depth layout on", "redeclaration", symbol->getName().c_str());
 6125|      0|            }
 6126|      0|        } else if (identifier == "gl_FragStencilRefARB") {
  ------------------
  |  Branch (6126:20): [True: 0, False: 0]
  ------------------
 6127|      0|            if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat ||
  ------------------
  |  Branch (6127:17): [True: 0, False: 0]
  |  Branch (6127:65): [True: 0, False: 0]
  ------------------
 6128|      0|                qualifier.isMemory() || qualifier.isAuxiliary())
  ------------------
  |  Branch (6128:17): [True: 0, False: 0]
  |  Branch (6128:41): [True: 0, False: 0]
  ------------------
 6129|      0|                error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str());
 6130|      0|            if (qualifier.storage != EvqVaryingOut)
  ------------------
  |  Branch (6130:17): [True: 0, False: 0]
  ------------------
 6131|      0|                error(loc, "cannot change output storage qualification of", "redeclaration", symbol->getName().c_str());
 6132|      0|            if (publicType.layoutStencil != ElsNone) {
  ------------------
  |  Branch (6132:17): [True: 0, False: 0]
  ------------------
 6133|      0|                if (intermediate.inIoAccessed("gl_FragStencilRefARB"))
  ------------------
  |  Branch (6133:21): [True: 0, False: 0]
  ------------------
 6134|      0|                    error(loc, "cannot redeclare after use", "gl_FragStencilRefARB", "");
 6135|      0|                if (!intermediate.setStencil(publicType.layoutStencil))
  ------------------
  |  Branch (6135:21): [True: 0, False: 0]
  ------------------
 6136|      0|                    error(loc, "all redeclarations must use the same stencil layout on", "redeclaration",
 6137|      0|                          symbol->getName().c_str());
 6138|      0|            }
 6139|      0|        }
 6140|      0|        else if (
 6141|      0|            identifier == "gl_PrimitiveIndicesNV") {
  ------------------
  |  Branch (6141:13): [True: 0, False: 0]
  ------------------
 6142|      0|            if (qualifier.hasLayout())
  ------------------
  |  Branch (6142:17): [True: 0, False: 0]
  ------------------
 6143|      0|                error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str());
 6144|      0|            if (qualifier.storage != EvqVaryingOut)
  ------------------
  |  Branch (6144:17): [True: 0, False: 0]
  ------------------
 6145|      0|                error(loc, "cannot change output storage qualification of", "redeclaration", symbol->getName().c_str());
 6146|      0|        }
 6147|      0|        else if (identifier == "gl_SampleMask") {
  ------------------
  |  Branch (6147:18): [True: 0, False: 0]
  ------------------
 6148|      0|            if (!publicType.layoutOverrideCoverage) {
  ------------------
  |  Branch (6148:17): [True: 0, False: 0]
  ------------------
 6149|      0|                error(loc, "redeclaration only allowed for override_coverage layout", "redeclaration", symbol->getName().c_str());
 6150|      0|            }
 6151|      0|            intermediate.setLayoutOverrideCoverage();
 6152|      0|        }
 6153|      0|        else if (identifier == "gl_Layer") {
  ------------------
  |  Branch (6153:18): [True: 0, False: 0]
  ------------------
 6154|      0|            if (!qualifier.layoutViewportRelative && qualifier.layoutSecondaryViewportRelativeOffset == -2048)
  ------------------
  |  Branch (6154:17): [True: 0, False: 0]
  |  Branch (6154:54): [True: 0, False: 0]
  ------------------
 6155|      0|                error(loc, "redeclaration only allowed for viewport_relative or secondary_view_offset layout", "redeclaration", symbol->getName().c_str());
 6156|      0|            symbolQualifier.layoutViewportRelative = qualifier.layoutViewportRelative;
 6157|      0|            symbolQualifier.layoutSecondaryViewportRelativeOffset = qualifier.layoutSecondaryViewportRelativeOffset;
 6158|      0|        }
 6159|       |
 6160|       |        // TODO: semantics quality: separate smooth from nothing declared, then use IsInterpolation for several tests above
 6161|       |
 6162|      0|        return symbol;
 6163|      0|    }
 6164|       |
 6165|      0|    return nullptr;
 6166|      0|}
_ZN7glslang13TParseContext20paramCheckFixStorageERKNS_10TSourceLocERKNS_17TStorageQualifierERNS_5TTypeE:
 6393|  1.09M|{
 6394|  1.09M|    switch (qualifier) {
 6395|      0|    case EvqConst:
  ------------------
  |  Branch (6395:5): [True: 0, False: 1.09M]
  ------------------
 6396|      0|    case EvqConstReadOnly:
  ------------------
  |  Branch (6396:5): [True: 0, False: 1.09M]
  ------------------
 6397|      0|        type.getQualifier().storage = EvqConstReadOnly;
 6398|      0|        break;
 6399|     55|    case EvqIn:
  ------------------
  |  Branch (6399:5): [True: 55, False: 1.09M]
  ------------------
 6400|  11.9k|    case EvqOut:
  ------------------
  |  Branch (6400:5): [True: 11.9k, False: 1.07M]
  ------------------
 6401|  12.6k|    case EvqInOut:
  ------------------
  |  Branch (6401:5): [True: 652, False: 1.09M]
  ------------------
 6402|  12.6k|    case EvqTileImageEXT:
  ------------------
  |  Branch (6402:5): [True: 0, False: 1.09M]
  ------------------
 6403|  12.6k|        type.getQualifier().storage = qualifier;
 6404|  12.6k|        break;
 6405|  42.1k|    case EvqGlobal:
  ------------------
  |  Branch (6405:5): [True: 42.1k, False: 1.04M]
  ------------------
 6406|  1.07M|    case EvqTemporary:
  ------------------
  |  Branch (6406:5): [True: 1.03M, False: 54.8k]
  ------------------
 6407|  1.07M|        type.getQualifier().storage = EvqIn;
 6408|  1.07M|        break;
 6409|      0|    default:
  ------------------
  |  Branch (6409:5): [True: 0, False: 1.09M]
  ------------------
 6410|      0|        type.getQualifier().storage = EvqIn;
 6411|      0|        error(loc, "storage qualifier not allowed on function parameter", GetStorageQualifierString(qualifier), "");
 6412|      0|        break;
 6413|  1.09M|    }
 6414|  1.09M|}
_ZN7glslang13TParseContext13paramCheckFixERKNS_10TSourceLocERKNS_10TQualifierERNS_5TTypeE:
 6417|   106k|{
 6418|   106k|    if (qualifier.isMemory()) {
  ------------------
  |  Branch (6418:9): [True: 52.3k, False: 54.1k]
  ------------------
 6419|  52.3k|        type.getQualifier().volatil   = qualifier.volatil;
 6420|  52.3k|        type.getQualifier().nontemporal   = qualifier.nontemporal;
 6421|  52.3k|        type.getQualifier().coherent  = qualifier.coherent;
 6422|  52.3k|        type.getQualifier().devicecoherent  = qualifier.devicecoherent ;
 6423|  52.3k|        type.getQualifier().queuefamilycoherent  = qualifier.queuefamilycoherent;
 6424|  52.3k|        type.getQualifier().workgroupcoherent  = qualifier.workgroupcoherent;
 6425|  52.3k|        type.getQualifier().subgroupcoherent  = qualifier.subgroupcoherent;
 6426|  52.3k|        type.getQualifier().shadercallcoherent = qualifier.shadercallcoherent;
 6427|  52.3k|        type.getQualifier().nonprivate = qualifier.nonprivate;
 6428|  52.3k|        type.getQualifier().readonly  = qualifier.readonly;
 6429|  52.3k|        type.getQualifier().writeonly = qualifier.writeonly;
 6430|  52.3k|        type.getQualifier().restrict  = qualifier.restrict;
 6431|  52.3k|    }
 6432|       |
 6433|   106k|    if (qualifier.isAuxiliary() ||
  ------------------
  |  Branch (6433:9): [True: 0, False: 106k]
  ------------------
 6434|   106k|        qualifier.isInterpolation())
  ------------------
  |  Branch (6434:9): [True: 0, False: 106k]
  ------------------
 6435|      0|        error(loc, "cannot use auxiliary or interpolation qualifiers on a function parameter", "", "");
 6436|   106k|    if (qualifier.hasLayout())
  ------------------
  |  Branch (6436:9): [True: 0, False: 106k]
  ------------------
 6437|      0|        error(loc, "cannot use layout qualifiers on a function parameter", "", "");
 6438|   106k|    if (qualifier.invariant)
  ------------------
  |  Branch (6438:9): [True: 0, False: 106k]
  ------------------
 6439|      0|        error(loc, "cannot use invariant qualifier on a function parameter", "", "");
 6440|   106k|    if (qualifier.isNoContraction()) {
  ------------------
  |  Branch (6440:9): [True: 0, False: 106k]
  ------------------
 6441|      0|        if (qualifier.isParamOutput())
  ------------------
  |  Branch (6441:13): [True: 0, False: 0]
  ------------------
 6442|      0|            type.getQualifier().setNoContraction();
 6443|      0|        else
 6444|      0|            warn(loc, "qualifier has no effect on non-output parameters", "precise", "");
 6445|      0|    }
 6446|   106k|    if (qualifier.isNonUniform())
  ------------------
  |  Branch (6446:9): [True: 0, False: 106k]
  ------------------
 6447|      0|        type.getQualifier().nonUniform = qualifier.nonUniform;
 6448|   106k|    if (qualifier.isSpirvByReference())
  ------------------
  |  Branch (6448:9): [True: 0, False: 106k]
  ------------------
 6449|      0|        type.getQualifier().setSpirvByReference();
 6450|   106k|    if (qualifier.isSpirvLiteral()) {
  ------------------
  |  Branch (6450:9): [True: 0, False: 106k]
  ------------------
 6451|      0|        if (type.getBasicType() == EbtFloat || type.getBasicType() == EbtInt || type.getBasicType() == EbtUint ||
  ------------------
  |  Branch (6451:13): [True: 0, False: 0]
  |  Branch (6451:48): [True: 0, False: 0]
  |  Branch (6451:81): [True: 0, False: 0]
  ------------------
 6452|      0|            type.getBasicType() == EbtBool)
  ------------------
  |  Branch (6452:13): [True: 0, False: 0]
  ------------------
 6453|      0|            type.getQualifier().setSpirvLiteral();
 6454|      0|        else
 6455|      0|            error(loc, "cannot use spirv_literal qualifier", type.getBasicTypeString().c_str(), "");
 6456|      0|    }
 6457|       |
 6458|   106k|    paramCheckFixStorage(loc, qualifier.storage, type);
 6459|   106k|}
_ZN7glslang13TParseContext16nestedBlockCheckERKNS_10TSourceLocEb:
 6462|     88|{
 6463|     88|    if ((!allowedInnerStruct && structNestingLevel > 0) ||
  ------------------
  |  Branch (6463:10): [True: 88, False: 0]
  |  Branch (6463:33): [True: 0, False: 88]
  ------------------
 6464|     88|        (allowedInnerStruct && structNestingLevel <= 0) ||
  ------------------
  |  Branch (6464:10): [True: 0, False: 88]
  |  Branch (6464:32): [True: 0, False: 0]
  ------------------
 6465|     88|        blockNestingLevel > 0)
  ------------------
  |  Branch (6465:9): [True: 0, False: 88]
  ------------------
 6466|      0|        error(loc, "cannot nest a block definition inside a structure or block", "", "");
 6467|     88|    ++blockNestingLevel;
 6468|     88|}
_ZN7glslang13TParseContext17nestedStructCheckERKNS_10TSourceLocE:
 6471|     10|{
 6472|     10|    if (structNestingLevel > 0 || blockNestingLevel > 0)
  ------------------
  |  Branch (6472:9): [True: 0, False: 10]
  |  Branch (6472:35): [True: 0, False: 10]
  ------------------
 6473|      0|        error(loc, "cannot nest a structure definition inside a structure or block", "", "");
 6474|     10|    ++structNestingLevel;
 6475|     10|}
_ZN7glslang13TParseContext16arrayObjectCheckERKNS_10TSourceLocERKNS_5TTypeEPKc:
 6478|   473k|{
 6479|       |    // Some versions don't allow comparing arrays or structures containing arrays
 6480|   473k|    if (type.containsArray()) {
  ------------------
  |  Branch (6480:9): [True: 9, False: 473k]
  ------------------
 6481|      9|        profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, op);
 6482|      9|        profileRequires(loc, EEsProfile, 300, nullptr, op);
 6483|      9|    }
 6484|   473k|}
_ZN7glslang13TParseContext11opaqueCheckERKNS_10TSourceLocERKNS_5TTypeEPKc:
 6487|  1.62k|{
 6488|  1.62k|    if (containsFieldWithBasicType(type, EbtSampler) && !extensionTurnedOn(E_GL_ARB_bindless_texture))
  ------------------
  |  Branch (6488:9): [True: 0, False: 1.62k]
  |  Branch (6488:57): [True: 0, False: 0]
  ------------------
 6489|      0|        error(loc, "can't use with samplers or structs containing samplers", op, "");
 6490|  1.62k|}
_ZN7glslang13TParseContext27storage16BitAssignmentCheckERKNS_10TSourceLocERKNS_5TTypeEPKc:
 6499|  1.86k|{
 6500|  1.86k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtFloat16))
  ------------------
  |  Branch (6500:9): [True: 0, False: 1.86k]
  |  Branch (6500:45): [True: 0, False: 0]
  ------------------
 6501|      0|        requireFloat16Arithmetic(loc, op, "can't use with structs containing float16");
 6502|       |
 6503|  1.86k|    if (type.isArray() && type.getBasicType() == EbtFloat16)
  ------------------
  |  Branch (6503:9): [True: 0, False: 1.86k]
  |  Branch (6503:27): [True: 0, False: 0]
  ------------------
 6504|      0|        requireFloat16Arithmetic(loc, op, "can't use with arrays containing float16");
 6505|       |
 6506|  1.86k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtInt16))
  ------------------
  |  Branch (6506:9): [True: 0, False: 1.86k]
  |  Branch (6506:45): [True: 0, False: 0]
  ------------------
 6507|      0|        requireInt16Arithmetic(loc, op, "can't use with structs containing int16");
 6508|       |
 6509|  1.86k|    if (type.isArray() && type.getBasicType() == EbtInt16)
  ------------------
  |  Branch (6509:9): [True: 0, False: 1.86k]
  |  Branch (6509:27): [True: 0, False: 0]
  ------------------
 6510|      0|        requireInt16Arithmetic(loc, op, "can't use with arrays containing int16");
 6511|       |
 6512|  1.86k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtUint16))
  ------------------
  |  Branch (6512:9): [True: 0, False: 1.86k]
  |  Branch (6512:45): [True: 0, False: 0]
  ------------------
 6513|      0|        requireInt16Arithmetic(loc, op, "can't use with structs containing uint16");
 6514|       |
 6515|  1.86k|    if (type.isArray() && type.getBasicType() == EbtUint16)
  ------------------
  |  Branch (6515:9): [True: 0, False: 1.86k]
  |  Branch (6515:27): [True: 0, False: 0]
  ------------------
 6516|      0|        requireInt16Arithmetic(loc, op, "can't use with arrays containing uint16");
 6517|       |
 6518|  1.86k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtInt8))
  ------------------
  |  Branch (6518:9): [True: 0, False: 1.86k]
  |  Branch (6518:45): [True: 0, False: 0]
  ------------------
 6519|      0|        requireInt8Arithmetic(loc, op, "can't use with structs containing int8");
 6520|       |
 6521|  1.86k|    if (type.isArray() && type.getBasicType() == EbtInt8)
  ------------------
  |  Branch (6521:9): [True: 0, False: 1.86k]
  |  Branch (6521:27): [True: 0, False: 0]
  ------------------
 6522|      0|        requireInt8Arithmetic(loc, op, "can't use with arrays containing int8");
 6523|       |
 6524|  1.86k|    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtUint8))
  ------------------
  |  Branch (6524:9): [True: 0, False: 1.86k]
  |  Branch (6524:45): [True: 0, False: 0]
  ------------------
 6525|      0|        requireInt8Arithmetic(loc, op, "can't use with structs containing uint8");
 6526|       |
 6527|  1.86k|    if (type.isArray() && type.getBasicType() == EbtUint8)
  ------------------
  |  Branch (6527:9): [True: 0, False: 1.86k]
  |  Branch (6527:27): [True: 0, False: 0]
  ------------------
 6528|      0|        requireInt8Arithmetic(loc, op, "can't use with arrays containing uint8");
 6529|  1.86k|}
_ZN7glslang13TParseContext19specializationCheckERKNS_10TSourceLocERKNS_5TTypeEPKc:
 6532|  1.86k|{
 6533|  1.86k|    if (type.containsSpecializationSize())
  ------------------
  |  Branch (6533:9): [True: 0, False: 1.86k]
  ------------------
 6534|      0|        error(loc, "can't use with types containing arrays sized with a specialization constant", op, "");
 6535|  1.86k|}
_ZN7glslang13TParseContext15structTypeCheckERKNS_10TSourceLocERNS_11TPublicTypeE:
 6538|     10|{
 6539|     10|    const TTypeList& typeList = *publicType.userDef->getStruct();
 6540|       |
 6541|       |    // fix and check for member storage qualifiers and types that don't belong within a structure
 6542|     60|    for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (6542:35): [True: 50, False: 10]
  ------------------
 6543|     50|        TQualifier& memberQualifier = typeList[member].type->getQualifier();
 6544|     50|        const TSourceLoc& memberLoc = typeList[member].loc;
 6545|     50|        if (memberQualifier.isAuxiliary() ||
  ------------------
  |  Branch (6545:13): [True: 0, False: 50]
  ------------------
 6546|     50|            memberQualifier.isInterpolation() ||
  ------------------
  |  Branch (6546:13): [True: 0, False: 50]
  ------------------
 6547|     50|            (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal &&
  ------------------
  |  Branch (6547:14): [True: 50, False: 0]
  |  Branch (6547:57): [True: 0, False: 50]
  ------------------
 6548|      0|             !memberQualifier.layoutDescriptorHeap && !memberQualifier.layoutDescriptorInnerBlock))
  ------------------
  |  Branch (6548:14): [True: 0, False: 0]
  |  Branch (6548:55): [True: 0, False: 0]
  ------------------
 6549|      0|            error(memberLoc, "cannot use storage or interpolation qualifiers on structure members", typeList[member].type->getFieldName().c_str(), "");
 6550|     50|        if (memberQualifier.isMemory())
  ------------------
  |  Branch (6550:13): [True: 0, False: 50]
  ------------------
 6551|      0|            error(memberLoc, "cannot use memory qualifiers on structure members", typeList[member].type->getFieldName().c_str(), "");
 6552|     50|        if (memberQualifier.hasLayout()) {
  ------------------
  |  Branch (6552:13): [True: 0, False: 50]
  ------------------
 6553|      0|            error(memberLoc, "cannot use layout qualifiers on structure members", typeList[member].type->getFieldName().c_str(), "");
 6554|      0|            memberQualifier.clearLayout();
 6555|      0|        }
 6556|     50|        if (memberQualifier.invariant)
  ------------------
  |  Branch (6556:13): [True: 0, False: 50]
  ------------------
 6557|      0|            error(memberLoc, "cannot use invariant qualifier on structure members", typeList[member].type->getFieldName().c_str(), "");
 6558|     50|    }
 6559|     10|}
_ZN7glslang13TParseContext6finishEv:
 6709|    540|{
 6710|    540|    TParseContextBase::finish();
 6711|       |
 6712|    540|    if (parsingBuiltins)
  ------------------
  |  Branch (6712:9): [True: 526, False: 14]
  ------------------
 6713|    526|        return;
 6714|       |
 6715|       |    // Forward builtin alias to AST for later use
 6716|     14|    intermediate.setBuiltinAliasLookup(symbolTable.collectBuiltinAlias());
 6717|       |
 6718|       |    // Check on array indexes for ES 2.0 (version 100) limitations.
 6719|     14|    for (size_t i = 0; i < needsIndexLimitationChecking.size(); ++i)
  ------------------
  |  Branch (6719:24): [True: 0, False: 14]
  ------------------
 6720|      0|        constantIndexExpressionCheck(needsIndexLimitationChecking[i]);
 6721|       |
 6722|       |    // Check for stages that are enabled by extension.
 6723|       |    // Can't do this at the beginning, it is chicken and egg to add a stage by
 6724|       |    // extension.
 6725|       |    // Stage-specific features were correctly tested for already, this is just
 6726|       |    // about the stage itself.
 6727|     14|    switch (language) {
 6728|      1|    case EShLangGeometry:
  ------------------
  |  Branch (6728:5): [True: 1, False: 13]
  ------------------
 6729|      1|        if (isEsProfile() && version == 310)
  ------------------
  |  Branch (6729:13): [True: 0, False: 1]
  |  Branch (6729:30): [True: 0, False: 0]
  ------------------
 6730|      0|            requireExtensions(getCurrentLoc(), Num_AEP_geometry_shader, AEP_geometry_shader, "geometry shaders");
 6731|      1|        break;
 6732|      7|    case EShLangTessControl:
  ------------------
  |  Branch (6732:5): [True: 7, False: 7]
  ------------------
 6733|      8|    case EShLangTessEvaluation:
  ------------------
  |  Branch (6733:5): [True: 1, False: 13]
  ------------------
 6734|      8|        if (isEsProfile() && version == 310)
  ------------------
  |  Branch (6734:13): [True: 0, False: 8]
  |  Branch (6734:30): [True: 0, False: 0]
  ------------------
 6735|      0|            requireExtensions(getCurrentLoc(), Num_AEP_tessellation_shader, AEP_tessellation_shader, "tessellation shaders");
 6736|      8|        else if (!isEsProfile() && version < 400)
  ------------------
  |  Branch (6736:18): [True: 8, False: 0]
  |  Branch (6736:36): [True: 0, False: 8]
  ------------------
 6737|      0|            requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_tessellation_shader, "tessellation shaders");
 6738|      8|        break;
 6739|      0|    case EShLangCompute:
  ------------------
  |  Branch (6739:5): [True: 0, False: 14]
  ------------------
 6740|      0|        if (!isEsProfile() && version < 430)
  ------------------
  |  Branch (6740:13): [True: 0, False: 0]
  |  Branch (6740:31): [True: 0, False: 0]
  ------------------
 6741|      0|            requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_compute_shader, "compute shaders");
 6742|      0|        break;
 6743|      0|    case EShLangTask:
  ------------------
  |  Branch (6743:5): [True: 0, False: 14]
  ------------------
 6744|      0|        requireExtensions(getCurrentLoc(), Num_AEP_mesh_shader, AEP_mesh_shader, "task shaders");
 6745|      0|        break;
 6746|      0|    case EShLangMesh:
  ------------------
  |  Branch (6746:5): [True: 0, False: 14]
  ------------------
 6747|      0|        requireExtensions(getCurrentLoc(), Num_AEP_mesh_shader, AEP_mesh_shader, "mesh shaders");
 6748|      0|        break;
 6749|      5|    default:
  ------------------
  |  Branch (6749:5): [True: 5, False: 9]
  ------------------
 6750|      5|        break;
 6751|     14|    }
 6752|       |
 6753|     14|    if (intermediate.IsRequestedExtension(E_GL_KHR_compute_shader_derivatives) &&
  ------------------
  |  Branch (6753:9): [True: 0, False: 14]
  ------------------
 6754|      0|        !khrDerivativeLayoutQualifierSpecified) {
  ------------------
  |  Branch (6754:9): [True: 0, False: 0]
  ------------------
 6755|      0|        error(getCurrentLoc(), "requires one of derivative_group_quadsKHR or derivative_group_linearKHR layout qualifiers",
 6756|      0|              E_GL_KHR_compute_shader_derivatives, "");
 6757|      0|    }
 6758|       |
 6759|     14|    if (intermediate.getLayoutDerivativeModeNone() == LayoutDerivativeGroupQuads) {
  ------------------
  |  Branch (6759:9): [True: 0, False: 14]
  ------------------
 6760|      0|        if ((intermediate.getLocalSizeSpecId(0) == TQualifier::layoutNotSet && (intermediate.getLocalSize(0) & 1)) ||
  ------------------
  |  Branch (6760:14): [True: 0, False: 0]
  |  Branch (6760:80): [True: 0, False: 0]
  ------------------
 6761|      0|            (intermediate.getLocalSizeSpecId(1) == TQualifier::layoutNotSet && (intermediate.getLocalSize(1) & 1)))
  ------------------
  |  Branch (6761:14): [True: 0, False: 0]
  |  Branch (6761:80): [True: 0, False: 0]
  ------------------
 6762|      0|            error(getCurrentLoc(), "requires local_size_x and local_size_y to be multiple of two", "derivative_group_quads", "");
 6763|     14|    } else if (intermediate.getLayoutDerivativeModeNone() == LayoutDerivativeGroupLinear) {
  ------------------
  |  Branch (6763:16): [True: 0, False: 14]
  ------------------
 6764|      0|        if (intermediate.getLocalSizeSpecId(0) == TQualifier::layoutNotSet &&
  ------------------
  |  Branch (6764:13): [True: 0, False: 0]
  ------------------
 6765|      0|            intermediate.getLocalSizeSpecId(1) == TQualifier::layoutNotSet &&
  ------------------
  |  Branch (6765:13): [True: 0, False: 0]
  ------------------
 6766|      0|            intermediate.getLocalSizeSpecId(2) == TQualifier::layoutNotSet &&
  ------------------
  |  Branch (6766:13): [True: 0, False: 0]
  ------------------
 6767|      0|            (intermediate.getLocalSize(0) *
  ------------------
  |  Branch (6767:13): [True: 0, False: 0]
  ------------------
 6768|      0|             intermediate.getLocalSize(1) *
 6769|      0|             intermediate.getLocalSize(2)) % 4 != 0)
 6770|      0|            error(getCurrentLoc(), "requires total group size to be multiple of four", "derivative_group_linear", "");
 6771|      0|    }
 6772|       |
 6773|       |    // Set default outputs for GL_NV_geometry_shader_passthrough
 6774|     14|    if (language == EShLangGeometry && extensionTurnedOn(E_SPV_NV_geometry_shader_passthrough)) {
  ------------------
  |  Branch (6774:9): [True: 1, False: 13]
  |  Branch (6774:40): [True: 0, False: 1]
  ------------------
 6775|      0|        if (intermediate.getOutputPrimitive() == ElgNone) {
  ------------------
  |  Branch (6775:13): [True: 0, False: 0]
  ------------------
 6776|      0|            switch (intermediate.getInputPrimitive()) {
 6777|      0|            case ElgPoints:      intermediate.setOutputPrimitive(ElgPoints);    break;
  ------------------
  |  Branch (6777:13): [True: 0, False: 0]
  ------------------
 6778|      0|            case ElgLines:       intermediate.setOutputPrimitive(ElgLineStrip); break;
  ------------------
  |  Branch (6778:13): [True: 0, False: 0]
  ------------------
 6779|      0|            case ElgTriangles:   intermediate.setOutputPrimitive(ElgTriangleStrip); break;
  ------------------
  |  Branch (6779:13): [True: 0, False: 0]
  ------------------
 6780|      0|            default: break;
  ------------------
  |  Branch (6780:13): [True: 0, False: 0]
  ------------------
 6781|      0|            }
 6782|      0|        }
 6783|      0|        if (intermediate.getVertices() == TQualifier::layoutNotSet) {
  ------------------
  |  Branch (6783:13): [True: 0, False: 0]
  ------------------
 6784|      0|            switch (intermediate.getInputPrimitive()) {
 6785|      0|            case ElgPoints:      intermediate.setVertices(1); break;
  ------------------
  |  Branch (6785:13): [True: 0, False: 0]
  ------------------
 6786|      0|            case ElgLines:       intermediate.setVertices(2); break;
  ------------------
  |  Branch (6786:13): [True: 0, False: 0]
  ------------------
 6787|      0|            case ElgTriangles:   intermediate.setVertices(3); break;
  ------------------
  |  Branch (6787:13): [True: 0, False: 0]
  ------------------
 6788|      0|            default: break;
  ------------------
  |  Branch (6788:13): [True: 0, False: 0]
  ------------------
 6789|      0|            }
 6790|      0|        }
 6791|      0|    }
 6792|     14|}
_ZN7glslang13TParseContext18setLayoutQualifierERKNS_10TSourceLocERNS_11TPublicTypeERNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEE:
 6801|     66|{
 6802|     66|    std::transform(id.begin(), id.end(), id.begin(), ::tolower);
 6803|       |
 6804|     66|    if (id == TQualifier::getLayoutMatrixString(ElmColumnMajor)) {
  ------------------
  |  Branch (6804:9): [True: 0, False: 66]
  ------------------
 6805|      0|        publicType.qualifier.layoutMatrix = ElmColumnMajor;
 6806|      0|        return;
 6807|      0|    }
 6808|     66|    if (id == TQualifier::getLayoutMatrixString(ElmRowMajor)) {
  ------------------
  |  Branch (6808:9): [True: 0, False: 66]
  ------------------
 6809|      0|        publicType.qualifier.layoutMatrix = ElmRowMajor;
 6810|      0|        return;
 6811|      0|    }
 6812|     66|    if (id == TQualifier::getLayoutPackingString(ElpPacked)) {
  ------------------
  |  Branch (6812:9): [True: 0, False: 66]
  ------------------
 6813|      0|        if (spvVersion.spv != 0) {
  ------------------
  |  Branch (6813:13): [True: 0, False: 0]
  ------------------
 6814|      0|            if (spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (6814:17): [True: 0, False: 0]
  ------------------
 6815|      0|                return; // silently ignore qualifier
 6816|      0|            else
 6817|      0|                spvRemoved(loc, "packed");
 6818|      0|        }
 6819|      0|        publicType.qualifier.layoutPacking = ElpPacked;
 6820|      0|        return;
 6821|      0|    }
 6822|     66|    if (id == TQualifier::getLayoutPackingString(ElpShared)) {
  ------------------
  |  Branch (6822:9): [True: 0, False: 66]
  ------------------
 6823|      0|        if (spvVersion.spv != 0) {
  ------------------
  |  Branch (6823:13): [True: 0, False: 0]
  ------------------
 6824|      0|            if (spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (6824:17): [True: 0, False: 0]
  ------------------
 6825|      0|                return; // silently ignore qualifier
 6826|      0|            else
 6827|      0|                spvRemoved(loc, "shared");
 6828|      0|        }
 6829|      0|        publicType.qualifier.layoutPacking = ElpShared;
 6830|      0|        return;
 6831|      0|    }
 6832|     66|    if (id == TQualifier::getLayoutPackingString(ElpStd140)) {
  ------------------
  |  Branch (6832:9): [True: 0, False: 66]
  ------------------
 6833|      0|        publicType.qualifier.layoutPacking = ElpStd140;
 6834|      0|        return;
 6835|      0|    }
 6836|     66|    if (id == TQualifier::getLayoutPackingString(ElpStd430)) {
  ------------------
  |  Branch (6836:9): [True: 0, False: 66]
  ------------------
 6837|      0|        requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, "std430");
 6838|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_shader_storage_buffer_object, "std430");
 6839|      0|        profileRequires(loc, EEsProfile, 310, nullptr, "std430");
 6840|      0|        publicType.qualifier.layoutPacking = ElpStd430;
 6841|      0|        return;
 6842|      0|    }
 6843|     66|    if (id == TQualifier::getLayoutPackingString(ElpScalar)) {
  ------------------
  |  Branch (6843:9): [True: 0, False: 66]
  ------------------
 6844|      0|        requireVulkan(loc, "scalar");
 6845|      0|        requireExtensions(loc, 1, &E_GL_EXT_scalar_block_layout, "scalar block layout");
 6846|      0|        publicType.qualifier.layoutPacking = ElpScalar;
 6847|      0|        return;
 6848|      0|    }
 6849|       |    // TODO: compile-time performance: may need to stop doing linear searches
 6850|    132|    for (TLayoutFormat format = (TLayoutFormat)(ElfNone + 1); format < ElfCount; format = (TLayoutFormat)(format + 1)) {
  ------------------
  |  Branch (6850:63): [True: 132, False: 0]
  ------------------
 6851|    132|        if (id == TQualifier::getLayoutFormatString(format)) {
  ------------------
  |  Branch (6851:13): [True: 66, False: 66]
  ------------------
 6852|     66|            if ((format > ElfEsFloatGuard && format < ElfFloatGuard) ||
  ------------------
  |  Branch (6852:18): [True: 0, False: 66]
  |  Branch (6852:46): [True: 0, False: 0]
  ------------------
 6853|     66|                (format > ElfEsIntGuard && format < ElfIntGuard) ||
  ------------------
  |  Branch (6853:18): [True: 0, False: 66]
  |  Branch (6853:44): [True: 0, False: 0]
  ------------------
 6854|     66|                (format > ElfEsUintGuard && format < ElfCount))
  ------------------
  |  Branch (6854:18): [True: 0, False: 66]
  |  Branch (6854:45): [True: 0, False: 0]
  ------------------
 6855|      0|                requireProfile(loc, ENoProfile | ECoreProfile | ECompatibilityProfile, "image load-store format");
 6856|     66|            profileRequires(loc, ENoProfile | ECoreProfile | ECompatibilityProfile, 420, E_GL_ARB_shader_image_load_store, "image load store");
 6857|     66|            profileRequires(loc, EEsProfile, 310, E_GL_ARB_shader_image_load_store, "image load store");
 6858|     66|            publicType.qualifier.layoutFormat = format;
 6859|     66|            return;
 6860|     66|        }
 6861|    132|    }
 6862|      0|    if (id == "descriptor_heap") {
  ------------------
  |  Branch (6862:9): [True: 0, False: 0]
  ------------------
 6863|      0|        requireExtensions(loc, 1, &E_GL_EXT_descriptor_heap, "descriptor_stride");
 6864|      0|        requireVulkan(loc, "descriptor_heap");
 6865|      0|        publicType.qualifier.layoutDescriptorHeap = true;
 6866|      0|        return;
 6867|      0|    }
 6868|      0|    if (id == "push_constant") {
  ------------------
  |  Branch (6868:9): [True: 0, False: 0]
  ------------------
 6869|      0|        requireVulkan(loc, "push_constant");
 6870|      0|        publicType.qualifier.layoutPushConstant = true;
 6871|      0|        return;
 6872|      0|    }
 6873|      0|    if (id == "buffer_reference") {
  ------------------
  |  Branch (6873:9): [True: 0, False: 0]
  ------------------
 6874|      0|        requireVulkan(loc, "buffer_reference");
 6875|      0|        requireExtensions(loc, 1, &E_GL_EXT_buffer_reference, "buffer_reference");
 6876|      0|        publicType.qualifier.layoutBufferReference = true;
 6877|      0|        intermediate.setUseStorageBuffer();
 6878|      0|        intermediate.setUsePhysicalStorageBuffer();
 6879|      0|        return;
 6880|      0|    }
 6881|      0|    if (id == "bindless_sampler") {
  ------------------
  |  Branch (6881:9): [True: 0, False: 0]
  ------------------
 6882|      0|        requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bindless_sampler");
 6883|      0|        publicType.qualifier.layoutBindlessSampler = true;
 6884|      0|        intermediate.setBindlessTextureMode(currentCaller, AstRefTypeLayout);
 6885|      0|        return;
 6886|      0|    }
 6887|      0|    if (id == "bindless_image") {
  ------------------
  |  Branch (6887:9): [True: 0, False: 0]
  ------------------
 6888|      0|        requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bindless_image");
 6889|      0|        publicType.qualifier.layoutBindlessImage = true;
 6890|      0|        intermediate.setBindlessImageMode(currentCaller, AstRefTypeLayout);
 6891|      0|        return;
 6892|      0|    }
 6893|      0|    if (id == "bound_sampler") {
  ------------------
  |  Branch (6893:9): [True: 0, False: 0]
  ------------------
 6894|      0|        requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bound_sampler");
 6895|      0|        publicType.qualifier.layoutBindlessSampler = false;
 6896|      0|        return;
 6897|      0|    }
 6898|      0|    if (id == "bound_image") {
  ------------------
  |  Branch (6898:9): [True: 0, False: 0]
  ------------------
 6899|      0|        requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bound_image");
 6900|      0|        publicType.qualifier.layoutBindlessImage = false;
 6901|      0|        return;
 6902|      0|    }
 6903|      0|    if (language == EShLangGeometry || language == EShLangTessEvaluation || language == EShLangMesh) {
  ------------------
  |  Branch (6903:9): [True: 0, False: 0]
  |  Branch (6903:40): [True: 0, False: 0]
  |  Branch (6903:77): [True: 0, False: 0]
  ------------------
 6904|      0|        if (id == TQualifier::getGeometryString(ElgTriangles)) {
  ------------------
  |  Branch (6904:13): [True: 0, False: 0]
  ------------------
 6905|      0|            publicType.shaderQualifiers.geometry = ElgTriangles;
 6906|      0|            return;
 6907|      0|        }
 6908|      0|        if (language == EShLangGeometry || language == EShLangMesh) {
  ------------------
  |  Branch (6908:13): [True: 0, False: 0]
  |  Branch (6908:44): [True: 0, False: 0]
  ------------------
 6909|      0|            if (id == TQualifier::getGeometryString(ElgPoints)) {
  ------------------
  |  Branch (6909:17): [True: 0, False: 0]
  ------------------
 6910|      0|                publicType.shaderQualifiers.geometry = ElgPoints;
 6911|      0|                return;
 6912|      0|            }
 6913|      0|            if (id == TQualifier::getGeometryString(ElgLines)) {
  ------------------
  |  Branch (6913:17): [True: 0, False: 0]
  ------------------
 6914|      0|                publicType.shaderQualifiers.geometry = ElgLines;
 6915|      0|                return;
 6916|      0|            }
 6917|      0|            if (language == EShLangGeometry) {
  ------------------
  |  Branch (6917:17): [True: 0, False: 0]
  ------------------
 6918|      0|                if (id == TQualifier::getGeometryString(ElgLineStrip)) {
  ------------------
  |  Branch (6918:21): [True: 0, False: 0]
  ------------------
 6919|      0|                    publicType.shaderQualifiers.geometry = ElgLineStrip;
 6920|      0|                    return;
 6921|      0|                }
 6922|      0|                if (id == TQualifier::getGeometryString(ElgLinesAdjacency)) {
  ------------------
  |  Branch (6922:21): [True: 0, False: 0]
  ------------------
 6923|      0|                    publicType.shaderQualifiers.geometry = ElgLinesAdjacency;
 6924|      0|                    return;
 6925|      0|                }
 6926|      0|                if (id == TQualifier::getGeometryString(ElgTrianglesAdjacency)) {
  ------------------
  |  Branch (6926:21): [True: 0, False: 0]
  ------------------
 6927|      0|                    publicType.shaderQualifiers.geometry = ElgTrianglesAdjacency;
 6928|      0|                    return;
 6929|      0|                }
 6930|      0|                if (id == TQualifier::getGeometryString(ElgTriangleStrip)) {
  ------------------
  |  Branch (6930:21): [True: 0, False: 0]
  ------------------
 6931|      0|                    publicType.shaderQualifiers.geometry = ElgTriangleStrip;
 6932|      0|                    return;
 6933|      0|                }
 6934|      0|                if (id == "passthrough") {
  ------------------
  |  Branch (6934:21): [True: 0, False: 0]
  ------------------
 6935|      0|                    requireExtensions(loc, 1, &E_SPV_NV_geometry_shader_passthrough, "geometry shader passthrough");
 6936|      0|                    publicType.qualifier.layoutPassthrough = true;
 6937|      0|                    intermediate.setGeoPassthroughEXT();
 6938|      0|                    return;
 6939|      0|                }
 6940|      0|            }
 6941|      0|        } else {
 6942|      0|            assert(language == EShLangTessEvaluation);
 6943|       |
 6944|       |            // input primitive
 6945|      0|            if (id == TQualifier::getGeometryString(ElgTriangles)) {
  ------------------
  |  Branch (6945:17): [True: 0, False: 0]
  ------------------
 6946|      0|                publicType.shaderQualifiers.geometry = ElgTriangles;
 6947|      0|                return;
 6948|      0|            }
 6949|      0|            if (id == TQualifier::getGeometryString(ElgQuads)) {
  ------------------
  |  Branch (6949:17): [True: 0, False: 0]
  ------------------
 6950|      0|                publicType.shaderQualifiers.geometry = ElgQuads;
 6951|      0|                return;
 6952|      0|            }
 6953|      0|            if (id == TQualifier::getGeometryString(ElgIsolines)) {
  ------------------
  |  Branch (6953:17): [True: 0, False: 0]
  ------------------
 6954|      0|                publicType.shaderQualifiers.geometry = ElgIsolines;
 6955|      0|                return;
 6956|      0|            }
 6957|       |
 6958|       |            // vertex spacing
 6959|      0|            if (id == TQualifier::getVertexSpacingString(EvsEqual)) {
  ------------------
  |  Branch (6959:17): [True: 0, False: 0]
  ------------------
 6960|      0|                publicType.shaderQualifiers.spacing = EvsEqual;
 6961|      0|                return;
 6962|      0|            }
 6963|      0|            if (id == TQualifier::getVertexSpacingString(EvsFractionalEven)) {
  ------------------
  |  Branch (6963:17): [True: 0, False: 0]
  ------------------
 6964|      0|                publicType.shaderQualifiers.spacing = EvsFractionalEven;
 6965|      0|                return;
 6966|      0|            }
 6967|      0|            if (id == TQualifier::getVertexSpacingString(EvsFractionalOdd)) {
  ------------------
  |  Branch (6967:17): [True: 0, False: 0]
  ------------------
 6968|      0|                publicType.shaderQualifiers.spacing = EvsFractionalOdd;
 6969|      0|                return;
 6970|      0|            }
 6971|       |
 6972|       |            // triangle order
 6973|      0|            if (id == TQualifier::getVertexOrderString(EvoCw)) {
  ------------------
  |  Branch (6973:17): [True: 0, False: 0]
  ------------------
 6974|      0|                publicType.shaderQualifiers.order = EvoCw;
 6975|      0|                return;
 6976|      0|            }
 6977|      0|            if (id == TQualifier::getVertexOrderString(EvoCcw)) {
  ------------------
  |  Branch (6977:17): [True: 0, False: 0]
  ------------------
 6978|      0|                publicType.shaderQualifiers.order = EvoCcw;
 6979|      0|                return;
 6980|      0|            }
 6981|       |
 6982|       |            // point mode
 6983|      0|            if (id == "point_mode") {
  ------------------
  |  Branch (6983:17): [True: 0, False: 0]
  ------------------
 6984|      0|                publicType.shaderQualifiers.pointMode = true;
 6985|      0|                return;
 6986|      0|            }
 6987|      0|        }
 6988|      0|    }
 6989|      0|    if (language == EShLangFragment) {
  ------------------
  |  Branch (6989:9): [True: 0, False: 0]
  ------------------
 6990|      0|        if (id == "origin_upper_left") {
  ------------------
  |  Branch (6990:13): [True: 0, False: 0]
  ------------------
 6991|      0|            requireProfile(loc, ECoreProfile | ECompatibilityProfile | ENoProfile, "origin_upper_left");
 6992|      0|            if (profile == ENoProfile) {
  ------------------
  |  Branch (6992:17): [True: 0, False: 0]
  ------------------
 6993|      0|                profileRequires(loc,ECoreProfile | ECompatibilityProfile, 140, E_GL_ARB_fragment_coord_conventions, "origin_upper_left");
 6994|      0|            }
 6995|       |
 6996|      0|            publicType.shaderQualifiers.originUpperLeft = true;
 6997|      0|            return;
 6998|      0|        }
 6999|      0|        if (id == "pixel_center_integer") {
  ------------------
  |  Branch (6999:13): [True: 0, False: 0]
  ------------------
 7000|      0|            requireProfile(loc, ECoreProfile | ECompatibilityProfile | ENoProfile, "pixel_center_integer");
 7001|      0|            if (profile == ENoProfile) {
  ------------------
  |  Branch (7001:17): [True: 0, False: 0]
  ------------------
 7002|      0|                profileRequires(loc,ECoreProfile | ECompatibilityProfile, 140, E_GL_ARB_fragment_coord_conventions, "pixel_center_integer");
 7003|      0|            }
 7004|      0|            publicType.shaderQualifiers.pixelCenterInteger = true;
 7005|      0|            return;
 7006|      0|        }
 7007|      0|        if (id == "early_fragment_tests") {
  ------------------
  |  Branch (7007:13): [True: 0, False: 0]
  ------------------
 7008|      0|            profileRequires(loc, ENoProfile | ECoreProfile | ECompatibilityProfile, 420, E_GL_ARB_shader_image_load_store, "early_fragment_tests");
 7009|      0|            profileRequires(loc, EEsProfile, 310, nullptr, "early_fragment_tests");
 7010|      0|            publicType.shaderQualifiers.earlyFragmentTests = true;
 7011|      0|            return;
 7012|      0|        }
 7013|      0|        if (id == "early_and_late_fragment_tests_amd") {
  ------------------
  |  Branch (7013:13): [True: 0, False: 0]
  ------------------
 7014|      0|            profileRequires(loc, ENoProfile | ECoreProfile | ECompatibilityProfile, 420, E_GL_AMD_shader_early_and_late_fragment_tests, "early_and_late_fragment_tests_amd");
 7015|      0|            profileRequires(loc, EEsProfile, 310, nullptr, "early_and_late_fragment_tests_amd");
 7016|      0|            publicType.shaderQualifiers.earlyAndLateFragmentTestsAMD = true;
 7017|      0|            return;
 7018|      0|        }
 7019|      0|        if (id == "post_depth_coverage") {
  ------------------
  |  Branch (7019:13): [True: 0, False: 0]
  ------------------
 7020|      0|            requireExtensions(loc, Num_post_depth_coverageEXTs, post_depth_coverageEXTs, "post depth coverage");
 7021|      0|            if (extensionTurnedOn(E_GL_ARB_post_depth_coverage)) {
  ------------------
  |  Branch (7021:17): [True: 0, False: 0]
  ------------------
 7022|      0|                publicType.shaderQualifiers.earlyFragmentTests = true;
 7023|      0|            }
 7024|      0|            publicType.shaderQualifiers.postDepthCoverage = true;
 7025|      0|            return;
 7026|      0|        }
 7027|       |        /* id is transformed into lower case in the beginning of this function. */
 7028|      0|        if (id == "non_coherent_color_attachment_readext") {
  ------------------
  |  Branch (7028:13): [True: 0, False: 0]
  ------------------
 7029|      0|            requireExtensions(loc, 1, &E_GL_EXT_shader_tile_image, "non_coherent_color_attachment_readEXT");
 7030|      0|            publicType.shaderQualifiers.nonCoherentColorAttachmentReadEXT = true;
 7031|      0|            return;
 7032|      0|        }
 7033|      0|        if (id == "non_coherent_depth_attachment_readext") {
  ------------------
  |  Branch (7033:13): [True: 0, False: 0]
  ------------------
 7034|      0|            requireExtensions(loc, 1, &E_GL_EXT_shader_tile_image, "non_coherent_depth_attachment_readEXT");
 7035|      0|            publicType.shaderQualifiers.nonCoherentDepthAttachmentReadEXT = true;
 7036|      0|            return;
 7037|      0|        }
 7038|      0|        if (id == "non_coherent_stencil_attachment_readext") {
  ------------------
  |  Branch (7038:13): [True: 0, False: 0]
  ------------------
 7039|      0|            requireExtensions(loc, 1, &E_GL_EXT_shader_tile_image, "non_coherent_stencil_attachment_readEXT");
 7040|      0|            publicType.shaderQualifiers.nonCoherentStencilAttachmentReadEXT = true;
 7041|      0|            return;
 7042|      0|        }
 7043|      0|        for (TLayoutDepth depth = (TLayoutDepth)(EldNone + 1); depth < EldCount; depth = (TLayoutDepth)(depth+1)) {
  ------------------
  |  Branch (7043:64): [True: 0, False: 0]
  ------------------
 7044|      0|            if (id == TQualifier::getLayoutDepthString(depth)) {
  ------------------
  |  Branch (7044:17): [True: 0, False: 0]
  ------------------
 7045|      0|                const char* feature = "depth layout qualifier";
 7046|      0|                requireProfile(loc, ECoreProfile | ECompatibilityProfile | EEsProfile, feature);
 7047|      0|                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, E_GL_ARB_conservative_depth, feature);
 7048|      0|                profileRequires(loc, EEsProfile, 0, E_GL_EXT_conservative_depth, feature);
 7049|      0|                publicType.shaderQualifiers.layoutDepth = depth;
 7050|      0|                return;
 7051|      0|            }
 7052|      0|        }
 7053|      0|        for (TLayoutStencil stencil = (TLayoutStencil)(ElsNone + 1); stencil < ElsCount; stencil = (TLayoutStencil)(stencil+1)) {
  ------------------
  |  Branch (7053:70): [True: 0, False: 0]
  ------------------
 7054|      0|            if (id == TQualifier::getLayoutStencilString(stencil)) {
  ------------------
  |  Branch (7054:17): [True: 0, False: 0]
  ------------------
 7055|      0|                requireProfile(loc, ECoreProfile | ECompatibilityProfile, "stencil layout qualifier");
 7056|      0|                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, nullptr, "stencil layout qualifier");
 7057|      0|                publicType.shaderQualifiers.layoutStencil = stencil;
 7058|      0|                return;
 7059|      0|            }
 7060|      0|        }
 7061|      0|        for (TInterlockOrdering order = (TInterlockOrdering)(EioNone + 1); order < EioCount; order = (TInterlockOrdering)(order+1)) {
  ------------------
  |  Branch (7061:76): [True: 0, False: 0]
  ------------------
 7062|      0|            if (id == TQualifier::getInterlockOrderingString(order)) {
  ------------------
  |  Branch (7062:17): [True: 0, False: 0]
  ------------------
 7063|      0|                requireProfile(loc, ECoreProfile | ECompatibilityProfile, "fragment shader interlock layout qualifier");
 7064|      0|                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 450, nullptr, "fragment shader interlock layout qualifier");
 7065|      0|                requireExtensions(loc, 1, &E_GL_ARB_fragment_shader_interlock, TQualifier::getInterlockOrderingString(order));
 7066|      0|                if (order == EioShadingRateInterlockOrdered || order == EioShadingRateInterlockUnordered)
  ------------------
  |  Branch (7066:21): [True: 0, False: 0]
  |  Branch (7066:64): [True: 0, False: 0]
  ------------------
 7067|      0|                    requireExtensions(loc, 1, &E_GL_NV_shading_rate_image, TQualifier::getInterlockOrderingString(order));
 7068|      0|                publicType.shaderQualifiers.interlockOrdering = order;
 7069|      0|                return;
 7070|      0|            }
 7071|      0|        }
 7072|      0|        if (id.compare(0, 13, "blend_support") == 0) {
  ------------------
  |  Branch (7072:13): [True: 0, False: 0]
  ------------------
 7073|      0|            bool found = false;
 7074|      0|            for (TBlendEquationShift be = (TBlendEquationShift)0; be < EBlendCount; be = (TBlendEquationShift)(be + 1)) {
  ------------------
  |  Branch (7074:67): [True: 0, False: 0]
  ------------------
 7075|      0|                if (id == TQualifier::getBlendEquationString(be)) {
  ------------------
  |  Branch (7075:21): [True: 0, False: 0]
  ------------------
 7076|      0|                    profileRequires(loc, EEsProfile, 320, E_GL_KHR_blend_equation_advanced, "blend equation");
 7077|      0|                    profileRequires(loc, ~EEsProfile, 0, E_GL_KHR_blend_equation_advanced, "blend equation");
 7078|      0|                    intermediate.addBlendEquation(be);
 7079|      0|                    publicType.shaderQualifiers.blendEquation = true;
 7080|      0|                    found = true;
 7081|      0|                    break;
 7082|      0|                }
 7083|      0|            }
 7084|      0|            if (! found)
  ------------------
  |  Branch (7084:17): [True: 0, False: 0]
  ------------------
 7085|      0|                error(loc, "unknown blend equation", "blend_support", "");
 7086|      0|            return;
 7087|      0|        }
 7088|      0|        if (id == "override_coverage") {
  ------------------
  |  Branch (7088:13): [True: 0, False: 0]
  ------------------
 7089|      0|            requireExtensions(loc, 1, &E_GL_NV_sample_mask_override_coverage, "sample mask override coverage");
 7090|      0|            publicType.shaderQualifiers.layoutOverrideCoverage = true;
 7091|      0|            return;
 7092|      0|        }
 7093|      0|        if (id == "full_quads")
  ------------------
  |  Branch (7093:13): [True: 0, False: 0]
  ------------------
 7094|      0|        {
 7095|      0|            const char* feature = "full_quads qualifier";
 7096|      0|            requireProfile(loc, ECompatibilityProfile | ECoreProfile | EEsProfile, feature);
 7097|      0|            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 140, E_GL_EXT_shader_quad_control, feature);
 7098|      0|            profileRequires(loc, EEsProfile, 310, E_GL_EXT_shader_quad_control, feature);
 7099|      0|            publicType.qualifier.layoutFullQuads = true;
 7100|      0|            return;
 7101|      0|        }
 7102|      0|        if (id == "non_coherent_attachment_readqcom") {
  ------------------
  |  Branch (7102:13): [True: 0, False: 0]
  ------------------
 7103|      0|            requireExtensions(loc, 1, &E_GL_QCOM_tile_shading, "tile shading QCOM");
 7104|      0|            publicType.shaderQualifiers.layoutNonCoherentTileAttachmentReadQCOM = true;
 7105|      0|            return;
 7106|      0|        }
 7107|      0|        if (id == "tile_attachmentqcom") {
  ------------------
  |  Branch (7107:13): [True: 0, False: 0]
  ------------------
 7108|      0|            requireExtensions(loc, 1, &E_GL_QCOM_tile_shading, "tile shading QCOM");
 7109|      0|            publicType.qualifier.layoutTileAttachmentQCOM = true;
 7110|      0|            return;
 7111|      0|        }
 7112|      0|    }
 7113|      0|    if (language == EShLangVertex ||
  ------------------
  |  Branch (7113:9): [True: 0, False: 0]
  ------------------
 7114|      0|        language == EShLangTessControl ||
  ------------------
  |  Branch (7114:9): [True: 0, False: 0]
  ------------------
 7115|      0|        language == EShLangTessEvaluation ||
  ------------------
  |  Branch (7115:9): [True: 0, False: 0]
  ------------------
 7116|      0|        language == EShLangGeometry ) {
  ------------------
  |  Branch (7116:9): [True: 0, False: 0]
  ------------------
 7117|      0|        if (id == "viewport_relative") {
  ------------------
  |  Branch (7117:13): [True: 0, False: 0]
  ------------------
 7118|      0|            requireExtensions(loc, 1, &E_GL_NV_viewport_array2, "view port array2");
 7119|      0|            publicType.qualifier.layoutViewportRelative = true;
 7120|      0|            return;
 7121|      0|        }
 7122|      0|    } else {
 7123|      0|        if (language == EShLangRayGen || language == EShLangIntersect ||
  ------------------
  |  Branch (7123:13): [True: 0, False: 0]
  |  Branch (7123:42): [True: 0, False: 0]
  ------------------
 7124|      0|        language == EShLangAnyHit || language == EShLangClosestHit ||
  ------------------
  |  Branch (7124:9): [True: 0, False: 0]
  |  Branch (7124:38): [True: 0, False: 0]
  ------------------
 7125|      0|        language == EShLangMiss || language == EShLangCallable) {
  ------------------
  |  Branch (7125:9): [True: 0, False: 0]
  |  Branch (7125:36): [True: 0, False: 0]
  ------------------
 7126|      0|            if (id == "shaderrecordnv" || id == "shaderrecordext") {
  ------------------
  |  Branch (7126:17): [True: 0, False: 0]
  |  Branch (7126:43): [True: 0, False: 0]
  ------------------
 7127|      0|                if (id == "shaderrecordnv") {
  ------------------
  |  Branch (7127:21): [True: 0, False: 0]
  ------------------
 7128|      0|                    requireExtensions(loc, 1, &E_GL_NV_ray_tracing, "shader record NV");
 7129|      0|                } else {
 7130|      0|                    requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "shader record EXT");
 7131|      0|                }
 7132|      0|                publicType.qualifier.layoutShaderRecord = true;
 7133|      0|                return;
 7134|      0|            } else if (id == "hitobjectshaderrecordnv") {
  ------------------
  |  Branch (7134:24): [True: 0, False: 0]
  ------------------
 7135|      0|                requireExtensions(loc, 1, &E_GL_NV_shader_invocation_reorder, "hitobject shader record NV");
 7136|      0|                publicType.qualifier.layoutHitObjectShaderRecordNV = true;
 7137|      0|                return;
 7138|      0|            } else if (id == "hitobjectshaderrecordext") {
  ------------------
  |  Branch (7138:24): [True: 0, False: 0]
  ------------------
 7139|      0|                requireExtensions(loc, 1, &E_GL_EXT_shader_invocation_reorder, "hitobject shader record EXT");
 7140|      0|                publicType.qualifier.layoutHitObjectShaderRecordEXT = true;
 7141|      0|                return;
 7142|      0|            }
 7143|       |
 7144|      0|        }
 7145|      0|    }
 7146|      0|    if (language == EShLangCompute || language == EShLangTask || language == EShLangMesh) {
  ------------------
  |  Branch (7146:9): [True: 0, False: 0]
  |  Branch (7146:39): [True: 0, False: 0]
  |  Branch (7146:66): [True: 0, False: 0]
  ------------------
 7147|      0|        if (id.compare(0, 17, "derivative_group_") == 0) {
  ------------------
  |  Branch (7147:13): [True: 0, False: 0]
  ------------------
 7148|      0|            if (id == "derivative_group_quadsnv" || id == "derivative_group_linearnv") {
  ------------------
  |  Branch (7148:17): [True: 0, False: 0]
  |  Branch (7148:53): [True: 0, False: 0]
  ------------------
 7149|      0|                requireExtensions(loc, 1, &E_GL_NV_compute_shader_derivatives, "compute shader derivatives");
 7150|      0|                if (language != EShLangCompute) {
  ------------------
  |  Branch (7150:21): [True: 0, False: 0]
  ------------------
 7151|      0|                    error(loc, "can only apply to compute shaders", id.c_str(), "");
 7152|      0|                    return;
 7153|      0|                }
 7154|      0|            } else if (id == "derivative_group_quadskhr" || id == "derivative_group_linearkhr") {
  ------------------
  |  Branch (7154:24): [True: 0, False: 0]
  |  Branch (7154:61): [True: 0, False: 0]
  ------------------
 7155|      0|                requireExtensions(loc, 1, &E_GL_KHR_compute_shader_derivatives, "compute shader derivatives");
 7156|      0|                khrDerivativeLayoutQualifierSpecified = true;
 7157|      0|            }
 7158|      0|            if (id == "derivative_group_quadsnv" || id == "derivative_group_quadskhr") {
  ------------------
  |  Branch (7158:17): [True: 0, False: 0]
  |  Branch (7158:53): [True: 0, False: 0]
  ------------------
 7159|      0|                publicType.shaderQualifiers.layoutDerivativeGroupQuads = true;
 7160|      0|                publicType.shaderQualifiers.derivativeGroupExtension =
 7161|      0|                    id == "derivative_group_quadsnv" ? EdgNV : EdgKHR;
  ------------------
  |  Branch (7161:21): [True: 0, False: 0]
  ------------------
 7162|      0|                return;
 7163|      0|            } else if (id == "derivative_group_linearnv" || id == "derivative_group_linearkhr") {
  ------------------
  |  Branch (7163:24): [True: 0, False: 0]
  |  Branch (7163:61): [True: 0, False: 0]
  ------------------
 7164|      0|                publicType.shaderQualifiers.layoutDerivativeGroupLinear = true;
 7165|      0|                publicType.shaderQualifiers.derivativeGroupExtension =
 7166|      0|                    id == "derivative_group_linearnv" ? EdgNV : EdgKHR;
  ------------------
  |  Branch (7166:21): [True: 0, False: 0]
  ------------------
 7167|      0|                return;
 7168|      0|            }
 7169|      0|        }
 7170|      0|    }
 7171|      0|    if (language == EShLangCompute) {
  ------------------
  |  Branch (7171:9): [True: 0, False: 0]
  ------------------
 7172|      0|        if (id == "tile_attachmentqcom") {
  ------------------
  |  Branch (7172:13): [True: 0, False: 0]
  ------------------
 7173|      0|            requireExtensions(loc, 1, &E_GL_QCOM_tile_shading, "tile shading QCOM");
 7174|      0|            publicType.qualifier.layoutTileAttachmentQCOM = true;
 7175|      0|            return;
 7176|      0|        }
 7177|      0|    }
 7178|       |
 7179|      0|    if (id == "primitive_culling") {
  ------------------
  |  Branch (7179:9): [True: 0, False: 0]
  ------------------
 7180|      0|        requireExtensions(loc, 1, &E_GL_EXT_ray_flags_primitive_culling, "primitive culling");
 7181|      0|        publicType.shaderQualifiers.layoutPrimitiveCulling = true;
 7182|      0|        return;
 7183|      0|    }
 7184|       |
 7185|      0|    if (id == "quad_derivatives")
  ------------------
  |  Branch (7185:9): [True: 0, False: 0]
  ------------------
 7186|      0|    {
 7187|      0|        const char* feature = "quad_derivatives qualifier";
 7188|      0|        requireProfile(loc, ECompatibilityProfile | ECoreProfile | EEsProfile, feature);
 7189|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 140, E_GL_EXT_shader_quad_control, feature);
 7190|      0|        profileRequires(loc, EEsProfile, 310, E_GL_EXT_shader_quad_control, feature);
 7191|      0|        publicType.qualifier.layoutQuadDeriv = true;
 7192|      0|        return;
 7193|      0|    }
 7194|       |
 7195|      0|    error(loc, "unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)", id.c_str(), "");
 7196|      0|}
_ZN7glslang13TParseContext18setLayoutQualifierERKNS_10TSourceLocERNS_11TPublicTypeERNSt3__112basic_stringIcNS6_11char_traitsIcEENS_14pool_allocatorIcEEEEPKNS_12TIntermTypedE:
 7201|    612|{
 7202|    612|    const char* feature = "layout-id value";
 7203|    612|    const char* nonLiteralFeature = "non-literal layout-id value";
 7204|       |
 7205|    612|    integerCheck(node, feature);
 7206|    612|    const TIntermConstantUnion* constUnion = node->getAsConstantUnion();
 7207|    612|    int value;
 7208|    612|    bool nonLiteral = false;
 7209|    612|    if (constUnion) {
  ------------------
  |  Branch (7209:9): [True: 612, False: 0]
  ------------------
 7210|    612|        value = constUnion->getConstArray()[0].getIConst();
 7211|    612|        if (! constUnion->isLiteral()) {
  ------------------
  |  Branch (7211:13): [True: 0, False: 612]
  ------------------
 7212|      0|            requireProfile(loc, ECoreProfile | ECompatibilityProfile, nonLiteralFeature);
 7213|      0|            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, nonLiteralFeature);
 7214|      0|        }
 7215|    612|    } else {
 7216|       |        // grammar should have give out the error message
 7217|      0|        value = 0;
 7218|      0|        nonLiteral = true;
 7219|      0|    }
 7220|       |
 7221|    612|    if (value < 0) {
  ------------------
  |  Branch (7221:9): [True: 0, False: 612]
  ------------------
 7222|      0|        error(loc, "cannot be negative", feature, "");
 7223|      0|        return;
 7224|      0|    }
 7225|       |
 7226|    612|    std::transform(id.begin(), id.end(), id.begin(), ::tolower);
 7227|       |
 7228|    612|    if (id == "offset") {
  ------------------
  |  Branch (7228:9): [True: 0, False: 612]
  ------------------
 7229|       |        // "offset" can be for either
 7230|       |        //  - uniform offsets
 7231|       |        //  - atomic_uint offsets
 7232|      0|        const char* feature = "offset";
 7233|      0|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (7233:13): [True: 0, False: 0]
  ------------------
 7234|      0|            requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, feature);
 7235|      0|            const char* exts[2] = { E_GL_ARB_enhanced_layouts, E_GL_ARB_shader_atomic_counters };
 7236|      0|            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, 2, exts, feature);
 7237|      0|            profileRequires(loc, EEsProfile, 310, nullptr, feature);
 7238|      0|        }
 7239|      0|        publicType.qualifier.layoutOffset = value;
 7240|      0|        publicType.qualifier.explicitOffset = true;
 7241|      0|        if (nonLiteral)
  ------------------
  |  Branch (7241:13): [True: 0, False: 0]
  ------------------
 7242|      0|            error(loc, "needs a literal integer", "offset", "");
 7243|      0|        return;
 7244|    612|    } else if (id == "align") {
  ------------------
  |  Branch (7244:16): [True: 0, False: 612]
  ------------------
 7245|      0|        const char* feature = "uniform buffer-member align";
 7246|      0|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (7246:13): [True: 0, False: 0]
  ------------------
 7247|      0|            requireProfile(loc, ECoreProfile | ECompatibilityProfile, feature);
 7248|      0|            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, feature);
 7249|      0|        }
 7250|       |        // "The specified alignment must be a power of 2, or a compile-time error results."
 7251|      0|        if (! IsPow2(value))
  ------------------
  |  Branch (7251:13): [True: 0, False: 0]
  ------------------
 7252|      0|            error(loc, "must be a power of 2", "align", "");
 7253|      0|        else
 7254|      0|            publicType.qualifier.layoutAlign = value;
 7255|      0|        if (nonLiteral)
  ------------------
  |  Branch (7255:13): [True: 0, False: 0]
  ------------------
 7256|      0|            error(loc, "needs a literal integer", "align", "");
 7257|      0|        return;
 7258|    612|    } else if (id == "location") {
  ------------------
  |  Branch (7258:16): [True: 72, False: 540]
  ------------------
 7259|     72|        profileRequires(loc, EEsProfile, 300, nullptr, "location");
 7260|     72|        const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
 7261|       |        // GL_ARB_explicit_uniform_location requires 330 or GL_ARB_explicit_attrib_location we do not need to add it here
 7262|     72|        profileRequires(loc, ~EEsProfile, 330, 2, exts, "location");
 7263|     72|        if ((unsigned int)value >= TQualifier::layoutLocationEnd)
  ------------------
  |  Branch (7263:13): [True: 0, False: 72]
  ------------------
 7264|      0|            error(loc, "location is too large", id.c_str(), "");
 7265|     72|        else
 7266|     72|            publicType.qualifier.layoutLocation = value;
 7267|     72|        if (nonLiteral)
  ------------------
  |  Branch (7267:13): [True: 0, False: 72]
  ------------------
 7268|      0|            error(loc, "needs a literal integer", "location", "");
 7269|     72|        return;
 7270|    540|    } else if (id == "set") {
  ------------------
  |  Branch (7270:16): [True: 264, False: 276]
  ------------------
 7271|    264|        if ((unsigned int)value >= TQualifier::layoutSetEnd)
  ------------------
  |  Branch (7271:13): [True: 0, False: 264]
  ------------------
 7272|      0|            error(loc, "set is too large", id.c_str(), "");
 7273|    264|        else
 7274|    264|            publicType.qualifier.layoutSet = value;
 7275|    264|        if (value != 0)
  ------------------
  |  Branch (7275:13): [True: 156, False: 108]
  ------------------
 7276|    156|            requireVulkan(loc, "descriptor set");
 7277|    264|        if (nonLiteral)
  ------------------
  |  Branch (7277:13): [True: 0, False: 264]
  ------------------
 7278|      0|            error(loc, "needs a literal integer", "set", "");
 7279|    264|        return;
 7280|    276|    } else if (id == "binding") {
  ------------------
  |  Branch (7280:16): [True: 264, False: 12]
  ------------------
 7281|    264|        profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, "binding");
 7282|    264|        profileRequires(loc, EEsProfile, 310, nullptr, "binding");
 7283|    264|        if ((unsigned int)value >= TQualifier::layoutBindingEnd)
  ------------------
  |  Branch (7283:13): [True: 0, False: 264]
  ------------------
 7284|      0|            error(loc, "binding is too large", id.c_str(), "");
 7285|    264|        else
 7286|    264|            publicType.qualifier.layoutBinding = value;
 7287|    264|        if (nonLiteral)
  ------------------
  |  Branch (7287:13): [True: 0, False: 264]
  ------------------
 7288|      0|            error(loc, "needs a literal integer", "binding", "");
 7289|    264|        return;
 7290|    264|    }
 7291|     12|    if (id == "constant_id") {
  ------------------
  |  Branch (7291:9): [True: 0, False: 12]
  ------------------
 7292|      0|        requireSpv(loc, "constant_id");
 7293|      0|        if ((unsigned)value >= TQualifier::layoutSpecConstantIdEnd) {
  ------------------
  |  Branch (7293:13): [True: 0, False: 0]
  ------------------
 7294|      0|            error(loc, "specialization-constant id is too large", id.c_str(), "");
 7295|      0|        } else {
 7296|      0|            publicType.qualifier.layoutSpecConstantId = value;
 7297|      0|            publicType.qualifier.specConstant = true;
 7298|      0|            if (! intermediate.addUsedConstantId(value))
  ------------------
  |  Branch (7298:17): [True: 0, False: 0]
  ------------------
 7299|      0|                error(loc, "specialization-constant id already used", id.c_str(), "");
 7300|      0|        }
 7301|      0|        if (nonLiteral)
  ------------------
  |  Branch (7301:13): [True: 0, False: 0]
  ------------------
 7302|      0|            error(loc, "needs a literal integer", "constant_id", "");
 7303|      0|        return;
 7304|      0|    }
 7305|     12|    if (id == "component") {
  ------------------
  |  Branch (7305:9): [True: 0, False: 12]
  ------------------
 7306|      0|        requireProfile(loc, ECoreProfile | ECompatibilityProfile, "component");
 7307|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, "component");
 7308|      0|        if ((unsigned)value >= TQualifier::layoutComponentEnd)
  ------------------
  |  Branch (7308:13): [True: 0, False: 0]
  ------------------
 7309|      0|            error(loc, "component is too large", id.c_str(), "");
 7310|      0|        else
 7311|      0|            publicType.qualifier.layoutComponent = value;
 7312|      0|        if (nonLiteral)
  ------------------
  |  Branch (7312:13): [True: 0, False: 0]
  ------------------
 7313|      0|            error(loc, "needs a literal integer", "component", "");
 7314|      0|        return;
 7315|      0|    }
 7316|     12|    if (id.compare(0, 4, "xfb_") == 0) {
  ------------------
  |  Branch (7316:9): [True: 0, False: 12]
  ------------------
 7317|       |        // "Any shader making any static use (after preprocessing) of any of these
 7318|       |        // *xfb_* qualifiers will cause the shader to be in a transform feedback
 7319|       |        // capturing mode and hence responsible for describing the transform feedback
 7320|       |        // setup."
 7321|      0|        intermediate.setXfbMode();
 7322|      0|        const char* feature = "transform feedback qualifier";
 7323|      0|        requireStage(loc, (EShLanguageMask)(EShLangVertexMask | EShLangGeometryMask | EShLangTessControlMask | EShLangTessEvaluationMask), feature);
 7324|      0|        requireProfile(loc, ECoreProfile | ECompatibilityProfile, feature);
 7325|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, feature);
 7326|      0|        if (id == "xfb_buffer") {
  ------------------
  |  Branch (7326:13): [True: 0, False: 0]
  ------------------
 7327|       |            // "It is a compile-time error to specify an *xfb_buffer* that is greater than
 7328|       |            // the implementation-dependent constant gl_MaxTransformFeedbackBuffers."
 7329|      0|            if (value >= resources.maxTransformFeedbackBuffers)
  ------------------
  |  Branch (7329:17): [True: 0, False: 0]
  ------------------
 7330|      0|                error(loc, "buffer is too large:", id.c_str(), "gl_MaxTransformFeedbackBuffers is %d", resources.maxTransformFeedbackBuffers);
 7331|      0|            if (value >= (int)TQualifier::layoutXfbBufferEnd)
  ------------------
  |  Branch (7331:17): [True: 0, False: 0]
  ------------------
 7332|      0|                error(loc, "buffer is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbBufferEnd-1);
 7333|      0|            else
 7334|      0|                publicType.qualifier.layoutXfbBuffer = value;
 7335|      0|            if (nonLiteral)
  ------------------
  |  Branch (7335:17): [True: 0, False: 0]
  ------------------
 7336|      0|                error(loc, "needs a literal integer", "xfb_buffer", "");
 7337|      0|            return;
 7338|      0|        } else if (id == "xfb_offset") {
  ------------------
  |  Branch (7338:20): [True: 0, False: 0]
  ------------------
 7339|      0|            if (value >= (int)TQualifier::layoutXfbOffsetEnd)
  ------------------
  |  Branch (7339:17): [True: 0, False: 0]
  ------------------
 7340|      0|                error(loc, "offset is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbOffsetEnd-1);
 7341|      0|            else
 7342|      0|                publicType.qualifier.layoutXfbOffset = value;
 7343|      0|            if (nonLiteral)
  ------------------
  |  Branch (7343:17): [True: 0, False: 0]
  ------------------
 7344|      0|                error(loc, "needs a literal integer", "xfb_offset", "");
 7345|      0|            return;
 7346|      0|        } else if (id == "xfb_stride") {
  ------------------
  |  Branch (7346:20): [True: 0, False: 0]
  ------------------
 7347|       |            // "The resulting stride (implicit or explicit), when divided by 4, must be less than or equal to the
 7348|       |            // implementation-dependent constant gl_MaxTransformFeedbackInterleavedComponents."
 7349|      0|            if (value > 4 * resources.maxTransformFeedbackInterleavedComponents) {
  ------------------
  |  Branch (7349:17): [True: 0, False: 0]
  ------------------
 7350|      0|                error(loc, "1/4 stride is too large:", id.c_str(), "gl_MaxTransformFeedbackInterleavedComponents is %d",
 7351|      0|                    resources.maxTransformFeedbackInterleavedComponents);
 7352|      0|            }
 7353|      0|            if (value >= (int)TQualifier::layoutXfbStrideEnd)
  ------------------
  |  Branch (7353:17): [True: 0, False: 0]
  ------------------
 7354|      0|                error(loc, "stride is too large:", id.c_str(), "internal max is %d", TQualifier::layoutXfbStrideEnd-1);
 7355|      0|            else
 7356|      0|                publicType.qualifier.layoutXfbStride = value;
 7357|      0|            if (nonLiteral)
  ------------------
  |  Branch (7357:17): [True: 0, False: 0]
  ------------------
 7358|      0|                error(loc, "needs a literal integer", "xfb_stride", "");
 7359|      0|            return;
 7360|      0|        }
 7361|      0|    }
 7362|     12|    if (id == "input_attachment_index") {
  ------------------
  |  Branch (7362:9): [True: 12, False: 0]
  ------------------
 7363|     12|        requireVulkan(loc, "input_attachment_index");
 7364|     12|        if (value >= (int)TQualifier::layoutAttachmentEnd)
  ------------------
  |  Branch (7364:13): [True: 0, False: 12]
  ------------------
 7365|      0|            error(loc, "attachment index is too large", id.c_str(), "");
 7366|     12|        else
 7367|     12|            publicType.qualifier.layoutAttachment = value;
 7368|     12|        if (nonLiteral)
  ------------------
  |  Branch (7368:13): [True: 0, False: 12]
  ------------------
 7369|      0|            error(loc, "needs a literal integer", "input_attachment_index", "");
 7370|     12|        return;
 7371|     12|    }
 7372|      0|    if (id == "num_views") {
  ------------------
  |  Branch (7372:9): [True: 0, False: 0]
  ------------------
 7373|      0|        requireExtensions(loc, Num_OVR_multiview_EXTs, OVR_multiview_EXTs, "num_views");
 7374|      0|        publicType.shaderQualifiers.numViews = value;
 7375|      0|        if (nonLiteral)
  ------------------
  |  Branch (7375:13): [True: 0, False: 0]
  ------------------
 7376|      0|            error(loc, "needs a literal integer", "num_views", "");
 7377|      0|        return;
 7378|      0|    }
 7379|      0|    if (language == EShLangVertex ||
  ------------------
  |  Branch (7379:9): [True: 0, False: 0]
  ------------------
 7380|      0|        language == EShLangTessControl ||
  ------------------
  |  Branch (7380:9): [True: 0, False: 0]
  ------------------
 7381|      0|        language == EShLangTessEvaluation ||
  ------------------
  |  Branch (7381:9): [True: 0, False: 0]
  ------------------
 7382|      0|        language == EShLangGeometry) {
  ------------------
  |  Branch (7382:9): [True: 0, False: 0]
  ------------------
 7383|      0|        if (id == "secondary_view_offset") {
  ------------------
  |  Branch (7383:13): [True: 0, False: 0]
  ------------------
 7384|      0|            requireExtensions(loc, 1, &E_GL_NV_stereo_view_rendering, "stereo view rendering");
 7385|      0|            publicType.qualifier.layoutSecondaryViewportRelativeOffset = value;
 7386|      0|            if (nonLiteral)
  ------------------
  |  Branch (7386:17): [True: 0, False: 0]
  ------------------
 7387|      0|                error(loc, "needs a literal integer", "secondary_view_offset", "");
 7388|      0|            return;
 7389|      0|        }
 7390|      0|    }
 7391|       |
 7392|      0|    if (id == "buffer_reference_align") {
  ------------------
  |  Branch (7392:9): [True: 0, False: 0]
  ------------------
 7393|      0|        requireExtensions(loc, 1, &E_GL_EXT_buffer_reference, "buffer_reference_align");
 7394|      0|        if (! IsPow2(value))
  ------------------
  |  Branch (7394:13): [True: 0, False: 0]
  ------------------
 7395|      0|            error(loc, "must be a power of 2", "buffer_reference_align", "");
 7396|      0|        else
 7397|      0|            publicType.qualifier.layoutBufferReferenceAlign = IntLog2(value);
 7398|      0|        if (nonLiteral)
  ------------------
  |  Branch (7398:13): [True: 0, False: 0]
  ------------------
 7399|      0|            error(loc, "needs a literal integer", "buffer_reference_align", "");
 7400|      0|        return;
 7401|      0|    }
 7402|       |
 7403|      0|    if (id == "bank") {
  ------------------
  |  Branch (7403:9): [True: 0, False: 0]
  ------------------
 7404|      0|        requireExtensions(loc, 1, &E_GL_NV_push_constant_bank, "bank");
 7405|      0|        if (nonLiteral)
  ------------------
  |  Branch (7405:13): [True: 0, False: 0]
  ------------------
 7406|      0|            error(loc, "needs a literal integer", id.c_str(), "");
 7407|      0|        else if (value < 0 || (unsigned int)value >= TQualifier::layoutBankEnd)
  ------------------
  |  Branch (7407:18): [True: 0, False: 0]
  |  Branch (7407:31): [True: 0, False: 0]
  ------------------
 7408|      0|            error(loc, "bank out of range", id.c_str(), "");
 7409|      0|        else
 7410|      0|            publicType.qualifier.layoutBank = value;
 7411|      0|        return;
 7412|      0|    }
 7413|      0|    if (id == "member_offset") {
  ------------------
  |  Branch (7413:9): [True: 0, False: 0]
  ------------------
 7414|      0|        requireExtensions(loc, 1, &E_GL_NV_push_constant_bank, "member_offset");
 7415|      0|        if (nonLiteral)
  ------------------
  |  Branch (7415:13): [True: 0, False: 0]
  ------------------
 7416|      0|            error(loc, "needs a literal integer", id.c_str(), "");
 7417|      0|        else if (value < 0)
  ------------------
  |  Branch (7417:18): [True: 0, False: 0]
  ------------------
 7418|      0|            error(loc, "must be equal or greater than 0", id.c_str(), "");
 7419|      0|        else
 7420|      0|            publicType.qualifier.layoutMemberOffset = value;
 7421|      0|        return;
 7422|      0|    }
 7423|       |
 7424|      0|    if (id == "descriptor_stride") {
  ------------------
  |  Branch (7424:9): [True: 0, False: 0]
  ------------------
 7425|      0|        requireExtensions(loc, 1, &E_GL_EXT_descriptor_heap, "descriptor_stride");
 7426|      0|        requireVulkan(loc, "descriptor_stride");
 7427|      0|        if (!IsPow2(value))
  ------------------
  |  Branch (7427:13): [True: 0, False: 0]
  ------------------
 7428|      0|            error(loc, "must be a power of 2", "descriptor_stride", "");
 7429|      0|        else
 7430|      0|            publicType.qualifier.layoutDescriptorStride = uint32_t(value);
 7431|      0|        return;
 7432|      0|    }
 7433|       |
 7434|      0|    if (id == "heap_offset") {
  ------------------
  |  Branch (7434:9): [True: 0, False: 0]
  ------------------
 7435|      0|        requireExtensions(loc, 1, &E_GL_EXT_descriptor_heap, "heap_offset");
 7436|      0|        requireExtensions(loc, 1, &E_GL_EXT_structured_descriptor_heap, "heap_offset");
 7437|      0|        requireVulkan(loc, "heap_offset");
 7438|      0|        publicType.qualifier.layoutHeapOffset = uint32_t(value);
 7439|      0|        return;
 7440|      0|    }
 7441|       |
 7442|      0|    switch (language) {
 7443|      0|    case EShLangTessControl:
  ------------------
  |  Branch (7443:5): [True: 0, False: 0]
  ------------------
 7444|      0|        if (id == "vertices") {
  ------------------
  |  Branch (7444:13): [True: 0, False: 0]
  ------------------
 7445|      0|            if (value == 0)
  ------------------
  |  Branch (7445:17): [True: 0, False: 0]
  ------------------
 7446|      0|                error(loc, "must be greater than 0", "vertices", "");
 7447|      0|            else
 7448|      0|                publicType.shaderQualifiers.vertices = value;
 7449|      0|            if (nonLiteral)
  ------------------
  |  Branch (7449:17): [True: 0, False: 0]
  ------------------
 7450|      0|                error(loc, "needs a literal integer", "vertices", "");
 7451|      0|            return;
 7452|      0|        }
 7453|      0|        break;
 7454|       |
 7455|      0|    case EShLangGeometry:
  ------------------
  |  Branch (7455:5): [True: 0, False: 0]
  ------------------
 7456|      0|        if (id == "invocations") {
  ------------------
  |  Branch (7456:13): [True: 0, False: 0]
  ------------------
 7457|      0|            profileRequires(loc, ECompatibilityProfile | ECoreProfile, 400,
 7458|      0|                Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, "invocations");
 7459|       |
 7460|      0|            if (value == 0)
  ------------------
  |  Branch (7460:17): [True: 0, False: 0]
  ------------------
 7461|      0|                error(loc, "must be at least 1", "invocations", "");
 7462|      0|            else
 7463|      0|                publicType.shaderQualifiers.invocations = value;
 7464|      0|            if (nonLiteral)
  ------------------
  |  Branch (7464:17): [True: 0, False: 0]
  ------------------
 7465|      0|                error(loc, "needs a literal integer", "invocations", "");
 7466|      0|            return;
 7467|      0|        }
 7468|      0|        if (id == "max_vertices") {
  ------------------
  |  Branch (7468:13): [True: 0, False: 0]
  ------------------
 7469|      0|            publicType.shaderQualifiers.vertices = value;
 7470|      0|            if (value > resources.maxGeometryOutputVertices)
  ------------------
  |  Branch (7470:17): [True: 0, False: 0]
  ------------------
 7471|      0|                error(loc, "too large, must be less than gl_MaxGeometryOutputVertices", "max_vertices", "");
 7472|      0|            if (nonLiteral)
  ------------------
  |  Branch (7472:17): [True: 0, False: 0]
  ------------------
 7473|      0|                error(loc, "needs a literal integer", "max_vertices", "");
 7474|      0|            return;
 7475|      0|        }
 7476|      0|        if (id == "stream") {
  ------------------
  |  Branch (7476:13): [True: 0, False: 0]
  ------------------
 7477|      0|            requireProfile(loc, ~EEsProfile, "selecting output stream");
 7478|      0|            publicType.qualifier.layoutStream = value;
 7479|      0|            if (value > 0)
  ------------------
  |  Branch (7479:17): [True: 0, False: 0]
  ------------------
 7480|      0|                intermediate.setMultiStream();
 7481|      0|            if (nonLiteral)
  ------------------
  |  Branch (7481:17): [True: 0, False: 0]
  ------------------
 7482|      0|                error(loc, "needs a literal integer", "stream", "");
 7483|      0|            return;
 7484|      0|        }
 7485|      0|        break;
 7486|       |
 7487|      0|    case EShLangFragment:
  ------------------
  |  Branch (7487:5): [True: 0, False: 0]
  ------------------
 7488|      0|        if (id == "index") {
  ------------------
  |  Branch (7488:13): [True: 0, False: 0]
  ------------------
 7489|      0|            requireProfile(loc, ECompatibilityProfile | ECoreProfile | EEsProfile, "index layout qualifier on fragment output");
 7490|      0|            const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
 7491|      0|            profileRequires(loc, ECompatibilityProfile | ECoreProfile, 330, 2, exts, "index layout qualifier on fragment output");
 7492|      0|            profileRequires(loc, EEsProfile ,310, E_GL_EXT_blend_func_extended, "index layout qualifier on fragment output");
 7493|       |            // "It is also a compile-time error if a fragment shader sets a layout index to less than 0 or greater than 1."
 7494|      0|            if (value < 0 || value > 1) {
  ------------------
  |  Branch (7494:17): [True: 0, False: 0]
  |  Branch (7494:30): [True: 0, False: 0]
  ------------------
 7495|      0|                value = 0;
 7496|      0|                error(loc, "value must be 0 or 1", "index", "");
 7497|      0|            }
 7498|       |
 7499|      0|            publicType.qualifier.layoutIndex = value;
 7500|      0|            if (nonLiteral)
  ------------------
  |  Branch (7500:17): [True: 0, False: 0]
  ------------------
 7501|      0|                error(loc, "needs a literal integer", "index", "");
 7502|      0|            return;
 7503|      0|        }
 7504|      0|        break;
 7505|       |
 7506|      0|    case EShLangMesh:
  ------------------
  |  Branch (7506:5): [True: 0, False: 0]
  ------------------
 7507|      0|        if (id == "max_vertices") {
  ------------------
  |  Branch (7507:13): [True: 0, False: 0]
  ------------------
 7508|      0|            requireExtensions(loc, Num_AEP_mesh_shader, AEP_mesh_shader, "max_vertices");
 7509|      0|            publicType.shaderQualifiers.vertices = value;
 7510|      0|            int max = extensionTurnedOn(E_GL_EXT_mesh_shader) ? resources.maxMeshOutputVerticesEXT
  ------------------
  |  Branch (7510:23): [True: 0, False: 0]
  ------------------
 7511|      0|                                                              : resources.maxMeshOutputVerticesNV;
 7512|      0|            if (value > max) {
  ------------------
  |  Branch (7512:17): [True: 0, False: 0]
  ------------------
 7513|      0|                TString maxsErrtring = "too large, must be less than ";
 7514|      0|                maxsErrtring.append(extensionTurnedOn(E_GL_EXT_mesh_shader) ? "gl_MaxMeshOutputVerticesEXT"
  ------------------
  |  Branch (7514:37): [True: 0, False: 0]
  ------------------
 7515|      0|                                                                            : "gl_MaxMeshOutputVerticesNV");
 7516|      0|                error(loc, maxsErrtring.c_str(), "max_vertices", "");
 7517|      0|            }
 7518|      0|            if (nonLiteral)
  ------------------
  |  Branch (7518:17): [True: 0, False: 0]
  ------------------
 7519|      0|                error(loc, "needs a literal integer", "max_vertices", "");
 7520|      0|            return;
 7521|      0|        }
 7522|      0|        if (id == "max_primitives") {
  ------------------
  |  Branch (7522:13): [True: 0, False: 0]
  ------------------
 7523|      0|            requireExtensions(loc, Num_AEP_mesh_shader, AEP_mesh_shader, "max_primitives");
 7524|      0|            publicType.shaderQualifiers.primitives = value;
 7525|      0|            int max = extensionTurnedOn(E_GL_EXT_mesh_shader) ? resources.maxMeshOutputPrimitivesEXT
  ------------------
  |  Branch (7525:23): [True: 0, False: 0]
  ------------------
 7526|      0|                                                              : resources.maxMeshOutputPrimitivesNV;
 7527|      0|            if (value > max) {
  ------------------
  |  Branch (7527:17): [True: 0, False: 0]
  ------------------
 7528|      0|                TString maxsErrtring = "too large, must be less than ";
 7529|      0|                maxsErrtring.append(extensionTurnedOn(E_GL_EXT_mesh_shader) ? "gl_MaxMeshOutputPrimitivesEXT"
  ------------------
  |  Branch (7529:37): [True: 0, False: 0]
  ------------------
 7530|      0|                                                                            : "gl_MaxMeshOutputPrimitivesNV");
 7531|      0|                error(loc, maxsErrtring.c_str(), "max_primitives", "");
 7532|      0|            }
 7533|      0|            if (nonLiteral)
  ------------------
  |  Branch (7533:17): [True: 0, False: 0]
  ------------------
 7534|      0|                error(loc, "needs a literal integer", "max_primitives", "");
 7535|      0|            return;
 7536|      0|        }
 7537|      0|        [[fallthrough]];
 7538|       |
 7539|      0|    case EShLangTask:
  ------------------
  |  Branch (7539:5): [True: 0, False: 0]
  ------------------
 7540|       |        // Fall through
 7541|      0|    case EShLangCompute:
  ------------------
  |  Branch (7541:5): [True: 0, False: 0]
  ------------------
 7542|      0|        if (id.compare(0, 11, "local_size_") == 0) {
  ------------------
  |  Branch (7542:13): [True: 0, False: 0]
  ------------------
 7543|      0|            if (language == EShLangMesh || language == EShLangTask) {
  ------------------
  |  Branch (7543:17): [True: 0, False: 0]
  |  Branch (7543:44): [True: 0, False: 0]
  ------------------
 7544|      0|                requireExtensions(loc, Num_AEP_mesh_shader, AEP_mesh_shader, "gl_WorkGroupSize");
 7545|      0|            } else {
 7546|      0|                profileRequires(loc, EEsProfile, 310, nullptr, "gl_WorkGroupSize");
 7547|      0|                profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize");
 7548|      0|            }
 7549|      0|            if (nonLiteral)
  ------------------
  |  Branch (7549:17): [True: 0, False: 0]
  ------------------
 7550|      0|                error(loc, "needs a literal integer", "local_size", "");
 7551|      0|            if (id.size() == 12 && value == 0) {
  ------------------
  |  Branch (7551:17): [True: 0, False: 0]
  |  Branch (7551:36): [True: 0, False: 0]
  ------------------
 7552|      0|                error(loc, "must be at least 1", id.c_str(), "");
 7553|      0|                return;
 7554|      0|            }
 7555|      0|            if (id == "local_size_x") {
  ------------------
  |  Branch (7555:17): [True: 0, False: 0]
  ------------------
 7556|      0|                publicType.shaderQualifiers.localSize[0] = value;
 7557|      0|                publicType.shaderQualifiers.localSizeNotDefault[0] = true;
 7558|      0|                return;
 7559|      0|            }
 7560|      0|            if (id == "local_size_y") {
  ------------------
  |  Branch (7560:17): [True: 0, False: 0]
  ------------------
 7561|      0|                publicType.shaderQualifiers.localSize[1] = value;
 7562|      0|                publicType.shaderQualifiers.localSizeNotDefault[1] = true;
 7563|      0|                return;
 7564|      0|            }
 7565|      0|            if (id == "local_size_z") {
  ------------------
  |  Branch (7565:17): [True: 0, False: 0]
  ------------------
 7566|      0|                publicType.shaderQualifiers.localSize[2] = value;
 7567|      0|                publicType.shaderQualifiers.localSizeNotDefault[2] = true;
 7568|      0|                return;
 7569|      0|            }
 7570|      0|            if (spvVersion.spv != 0) {
  ------------------
  |  Branch (7570:17): [True: 0, False: 0]
  ------------------
 7571|      0|                if (id == "local_size_x_id") {
  ------------------
  |  Branch (7571:21): [True: 0, False: 0]
  ------------------
 7572|      0|                    publicType.shaderQualifiers.localSizeSpecId[0] = value;
 7573|      0|                    return;
 7574|      0|                }
 7575|      0|                if (id == "local_size_y_id") {
  ------------------
  |  Branch (7575:21): [True: 0, False: 0]
  ------------------
 7576|      0|                    publicType.shaderQualifiers.localSizeSpecId[1] = value;
 7577|      0|                    return;
 7578|      0|                }
 7579|      0|                if (id == "local_size_z_id") {
  ------------------
  |  Branch (7579:21): [True: 0, False: 0]
  ------------------
 7580|      0|                    publicType.shaderQualifiers.localSizeSpecId[2] = value;
 7581|      0|                    return;
 7582|      0|                }
 7583|      0|            }
 7584|      0|        }
 7585|      0|        if (id.compare(0, 18, "shading_rate_xqcom") == 0 ||
  ------------------
  |  Branch (7585:13): [True: 0, False: 0]
  ------------------
 7586|      0|            id.compare(0, 18, "shading_rate_yqcom") == 0 ||
  ------------------
  |  Branch (7586:13): [True: 0, False: 0]
  ------------------
 7587|      0|            id.compare(0, 18, "shading_rate_zqcom") == 0) {
  ------------------
  |  Branch (7587:13): [True: 0, False: 0]
  ------------------
 7588|      0|            requireExtensions(loc, 1, &E_GL_QCOM_tile_shading, "tile shading QCOM");
 7589|      0|            if (nonLiteral)
  ------------------
  |  Branch (7589:17): [True: 0, False: 0]
  ------------------
 7590|      0|                error(loc, "needs a literal integer", "shading_rate_*QCOM", "");
 7591|      0|            if (id.size() == 18 && value == 0) {
  ------------------
  |  Branch (7591:17): [True: 0, False: 0]
  |  Branch (7591:36): [True: 0, False: 0]
  ------------------
 7592|      0|                error(loc, "must be at least 1", id.c_str(), "");
 7593|      0|                return;
 7594|      0|            }
 7595|      0|            if (id == "shading_rate_xqcom") {
  ------------------
  |  Branch (7595:17): [True: 0, False: 0]
  ------------------
 7596|      0|                publicType.shaderQualifiers.layoutTileShadingRateQCOM[0] = value;
 7597|      0|                publicType.shaderQualifiers.layoutTileShadingRateQCOMNotDefault[0] = true;
 7598|      0|                if (! IsPow2(value))
  ------------------
  |  Branch (7598:21): [True: 0, False: 0]
  ------------------
 7599|      0|                    error(loc, "must be a power of 2", id.c_str(), "");
 7600|      0|                return;
 7601|      0|            }
 7602|      0|            if (id == "shading_rate_yqcom") {
  ------------------
  |  Branch (7602:17): [True: 0, False: 0]
  ------------------
 7603|      0|                publicType.shaderQualifiers.layoutTileShadingRateQCOM[1] = value;
 7604|      0|                publicType.shaderQualifiers.layoutTileShadingRateQCOMNotDefault[1] = true;
 7605|      0|                if (! IsPow2(value))
  ------------------
  |  Branch (7605:21): [True: 0, False: 0]
  ------------------
 7606|      0|                    error(loc, "must be a power of 2", id.c_str(), "");
 7607|      0|                return;
 7608|      0|            }
 7609|      0|            if (id == "shading_rate_zqcom") {
  ------------------
  |  Branch (7609:17): [True: 0, False: 0]
  ------------------
 7610|      0|                publicType.shaderQualifiers.layoutTileShadingRateQCOM[2] = value;
 7611|      0|                publicType.shaderQualifiers.layoutTileShadingRateQCOMNotDefault[2] = true;
 7612|      0|                if (value <= 0)
  ------------------
  |  Branch (7612:21): [True: 0, False: 0]
  ------------------
 7613|      0|                    error(loc, "must be a positive value", id.c_str(), "");
 7614|      0|                return;
 7615|      0|            }
 7616|      0|        }
 7617|      0|        break;
 7618|       |
 7619|      0|    default:
  ------------------
  |  Branch (7619:5): [True: 0, False: 0]
  ------------------
 7620|      0|        break;
 7621|      0|    }
 7622|       |
 7623|      0|    error(loc, "there is no such layout identifier for this stage taking an assigned value", id.c_str(), "");
 7624|      0|}
_ZN7glslang13TParseContext27mergeObjectLayoutQualifiersERNS_10TQualifierERKS1_b:
 7641|   173k|{
 7642|   173k|    if (src.hasMatrix())
  ------------------
  |  Branch (7642:9): [True: 0, False: 173k]
  ------------------
 7643|      0|        dst.layoutMatrix = src.layoutMatrix;
 7644|   173k|    if (src.hasPacking())
  ------------------
  |  Branch (7644:9): [True: 0, False: 173k]
  ------------------
 7645|      0|        dst.layoutPacking = src.layoutPacking;
 7646|       |
 7647|   173k|    if (src.hasStream())
  ------------------
  |  Branch (7647:9): [True: 8, False: 173k]
  ------------------
 7648|      8|        dst.layoutStream = src.layoutStream;
 7649|   173k|    if (src.hasFormat())
  ------------------
  |  Branch (7649:9): [True: 132, False: 173k]
  ------------------
 7650|    132|        dst.layoutFormat = src.layoutFormat;
 7651|   173k|    if (src.hasXfbBuffer())
  ------------------
  |  Branch (7651:9): [True: 47, False: 173k]
  ------------------
 7652|     47|        dst.layoutXfbBuffer = src.layoutXfbBuffer;
 7653|   173k|    if (src.hasBufferReferenceAlign())
  ------------------
  |  Branch (7653:9): [True: 0, False: 173k]
  ------------------
 7654|      0|        dst.layoutBufferReferenceAlign = src.layoutBufferReferenceAlign;
 7655|       |
 7656|   173k|    if (src.hasAlign())
  ------------------
  |  Branch (7656:9): [True: 0, False: 173k]
  ------------------
 7657|      0|        dst.layoutAlign = src.layoutAlign;
 7658|       |
 7659|   173k|    if (! inheritOnly) {
  ------------------
  |  Branch (7659:9): [True: 173k, False: 166]
  ------------------
 7660|   173k|        if (src.hasLocation())
  ------------------
  |  Branch (7660:13): [True: 72, False: 173k]
  ------------------
 7661|     72|            dst.layoutLocation = src.layoutLocation;
 7662|   173k|        if (src.hasOffset())
  ------------------
  |  Branch (7662:13): [True: 0, False: 173k]
  ------------------
 7663|      0|            dst.layoutOffset = src.layoutOffset;
 7664|   173k|        if (src.hasSet())
  ------------------
  |  Branch (7664:13): [True: 264, False: 173k]
  ------------------
 7665|    264|            dst.layoutSet = src.layoutSet;
 7666|   173k|        if (src.layoutBinding != TQualifier::layoutBindingEnd)
  ------------------
  |  Branch (7666:13): [True: 528, False: 172k]
  ------------------
 7667|    528|            dst.layoutBinding = src.layoutBinding;
 7668|       |
 7669|   173k|        if (src.hasSpecConstantId())
  ------------------
  |  Branch (7669:13): [True: 0, False: 173k]
  ------------------
 7670|      0|            dst.layoutSpecConstantId = src.layoutSpecConstantId;
 7671|       |
 7672|   173k|        if (src.hasComponent())
  ------------------
  |  Branch (7672:13): [True: 0, False: 173k]
  ------------------
 7673|      0|            dst.layoutComponent = src.layoutComponent;
 7674|   173k|        if (src.hasIndex())
  ------------------
  |  Branch (7674:13): [True: 0, False: 173k]
  ------------------
 7675|      0|            dst.layoutIndex = src.layoutIndex;
 7676|   173k|        if (src.hasXfbStride())
  ------------------
  |  Branch (7676:13): [True: 0, False: 173k]
  ------------------
 7677|      0|            dst.layoutXfbStride = src.layoutXfbStride;
 7678|   173k|        if (src.hasXfbOffset())
  ------------------
  |  Branch (7678:13): [True: 0, False: 173k]
  ------------------
 7679|      0|            dst.layoutXfbOffset = src.layoutXfbOffset;
 7680|   173k|        if (src.hasAttachment())
  ------------------
  |  Branch (7680:13): [True: 24, False: 173k]
  ------------------
 7681|     24|            dst.layoutAttachment = src.layoutAttachment;
 7682|   173k|        if (src.layoutDescriptorHeap)
  ------------------
  |  Branch (7682:13): [True: 0, False: 173k]
  ------------------
 7683|      0|            dst.layoutDescriptorHeap = true;
 7684|   173k|        if (src.layoutDescriptorInnerBlock)
  ------------------
  |  Branch (7684:13): [True: 0, False: 173k]
  ------------------
 7685|      0|            dst.layoutDescriptorInnerBlock = true;
 7686|   173k|        if (src.layoutDescriptorStride != TQualifier::layoutDescriptorStrideEnd)
  ------------------
  |  Branch (7686:13): [True: 0, False: 173k]
  ------------------
 7687|      0|            dst.layoutDescriptorStride = src.layoutDescriptorStride;
 7688|   173k|        if (src.layoutHeapOffset != 0)
  ------------------
  |  Branch (7688:13): [True: 0, False: 173k]
  ------------------
 7689|      0|            dst.layoutHeapOffset = src.layoutHeapOffset;
 7690|   173k|        if (src.layoutPushConstant)
  ------------------
  |  Branch (7690:13): [True: 0, False: 173k]
  ------------------
 7691|      0|            dst.layoutPushConstant = true;
 7692|       |
 7693|   173k|        if (src.layoutBufferReference)
  ------------------
  |  Branch (7693:13): [True: 0, False: 173k]
  ------------------
 7694|      0|            dst.layoutBufferReference = true;
 7695|       |
 7696|   173k|        if (src.layoutPassthrough)
  ------------------
  |  Branch (7696:13): [True: 0, False: 173k]
  ------------------
 7697|      0|            dst.layoutPassthrough = true;
 7698|   173k|        if (src.layoutViewportRelative)
  ------------------
  |  Branch (7698:13): [True: 0, False: 173k]
  ------------------
 7699|      0|            dst.layoutViewportRelative = true;
 7700|   173k|        if (src.layoutSecondaryViewportRelativeOffset != -2048)
  ------------------
  |  Branch (7700:13): [True: 0, False: 173k]
  ------------------
 7701|      0|            dst.layoutSecondaryViewportRelativeOffset = src.layoutSecondaryViewportRelativeOffset;
 7702|   173k|        if (src.layoutShaderRecord)
  ------------------
  |  Branch (7702:13): [True: 0, False: 173k]
  ------------------
 7703|      0|            dst.layoutShaderRecord = true;
 7704|   173k|        if (src.layoutFullQuads)
  ------------------
  |  Branch (7704:13): [True: 0, False: 173k]
  ------------------
 7705|      0|            dst.layoutFullQuads = true;
 7706|   173k|        if (src.layoutQuadDeriv)
  ------------------
  |  Branch (7706:13): [True: 0, False: 173k]
  ------------------
 7707|      0|            dst.layoutQuadDeriv = true;
 7708|   173k|        if (src.layoutBindlessSampler)
  ------------------
  |  Branch (7708:13): [True: 0, False: 173k]
  ------------------
 7709|      0|            dst.layoutBindlessSampler = true;
 7710|   173k|        if (src.layoutBindlessImage)
  ------------------
  |  Branch (7710:13): [True: 0, False: 173k]
  ------------------
 7711|      0|            dst.layoutBindlessImage = true;
 7712|   173k|        if (src.pervertexNV)
  ------------------
  |  Branch (7712:13): [True: 0, False: 173k]
  ------------------
 7713|      0|            dst.pervertexNV = true;
 7714|   173k|        if (src.pervertexEXT)
  ------------------
  |  Branch (7714:13): [True: 0, False: 173k]
  ------------------
 7715|      0|            dst.pervertexEXT = true;
 7716|   173k|        if (src.layoutHitObjectShaderRecordNV)
  ------------------
  |  Branch (7716:13): [True: 0, False: 173k]
  ------------------
 7717|      0|            dst.layoutHitObjectShaderRecordNV = true;
 7718|   173k|        dst.layoutTileAttachmentQCOM |= src.layoutTileAttachmentQCOM;
 7719|   173k|        if (src.layoutHitObjectShaderRecordEXT)
  ------------------
  |  Branch (7719:13): [True: 0, False: 173k]
  ------------------
 7720|      0|            dst.layoutHitObjectShaderRecordEXT = true;
 7721|   173k|        if (src.hasBank())
  ------------------
  |  Branch (7721:13): [True: 0, False: 173k]
  ------------------
 7722|      0|            dst.layoutBank = src.layoutBank;
 7723|   173k|        if (src.hasMemberOffset())
  ------------------
  |  Branch (7723:13): [True: 0, False: 173k]
  ------------------
 7724|      0|            dst.layoutMemberOffset = src.layoutMemberOffset;
 7725|   173k|    }
 7726|   173k|}
_ZN7glslang13TParseContext17layoutObjectCheckERKNS_10TSourceLocERKNS_7TSymbolE:
 7730|  13.8k|{
 7731|  13.8k|    const TType& type = symbol.getType();
 7732|  13.8k|    const TQualifier& qualifier = type.getQualifier();
 7733|       |
 7734|       |    // first, cross check WRT to just the type
 7735|  13.8k|    layoutTypeCheck(loc, type);
 7736|       |
 7737|       |    // now, any remaining error checking based on the object itself
 7738|       |
 7739|  13.8k|    if (qualifier.hasAnyLocation()) {
  ------------------
  |  Branch (7739:9): [True: 72, False: 13.7k]
  ------------------
 7740|     72|        switch (qualifier.storage) {
 7741|      0|        case EvqUniform:
  ------------------
  |  Branch (7741:9): [True: 0, False: 72]
  ------------------
 7742|      0|        case EvqBuffer:
  ------------------
  |  Branch (7742:9): [True: 0, False: 72]
  ------------------
 7743|      0|            if (symbol.getAsVariable() == nullptr)
  ------------------
  |  Branch (7743:17): [True: 0, False: 0]
  ------------------
 7744|      0|                error(loc, "can only be used on variable declaration", "location", "");
 7745|      0|            break;
 7746|     72|        default:
  ------------------
  |  Branch (7746:9): [True: 72, False: 0]
  ------------------
 7747|     72|            break;
 7748|     72|        }
 7749|     72|    }
 7750|       |
 7751|       |    // user-variable location check, which are required for SPIR-V in/out:
 7752|       |    //  - variables have it directly,
 7753|       |    //  - blocks have it on each member (already enforced), so check first one
 7754|  13.8k|    if (spvVersion.spv > 0 && !parsingBuiltins && qualifier.builtIn == EbvNone &&
  ------------------
  |  Branch (7754:9): [True: 13.8k, False: 0]
  |  Branch (7754:31): [True: 600, False: 13.2k]
  |  Branch (7754:51): [True: 600, False: 0]
  ------------------
 7755|    600|        !qualifier.hasLocation() && !intermediate.getAutoMapLocations()) {
  ------------------
  |  Branch (7755:9): [True: 528, False: 72]
  |  Branch (7755:37): [True: 176, False: 352]
  ------------------
 7756|       |
 7757|    176|        switch (qualifier.storage) {
 7758|      0|        case EvqVaryingIn:
  ------------------
  |  Branch (7758:9): [True: 0, False: 176]
  ------------------
 7759|      0|        case EvqVaryingOut:
  ------------------
  |  Branch (7759:9): [True: 0, False: 176]
  ------------------
 7760|      0|            if (!type.getQualifier().isTaskMemory() && !type.getQualifier().hasSpirvDecorate() &&
  ------------------
  |  Branch (7760:17): [True: 0, False: 0]
  |  Branch (7760:56): [True: 0, False: 0]
  ------------------
 7761|      0|                (type.getBasicType() != EbtBlock ||
  ------------------
  |  Branch (7761:18): [True: 0, False: 0]
  ------------------
 7762|      0|                 (!(*type.getStruct())[0].type->getQualifier().hasLocation() &&
  ------------------
  |  Branch (7762:19): [True: 0, False: 0]
  ------------------
 7763|      0|                   (*type.getStruct())[0].type->getQualifier().builtIn == EbvNone)))
  ------------------
  |  Branch (7763:20): [True: 0, False: 0]
  ------------------
 7764|      0|                error(loc, "SPIR-V requires location for user input/output", "location", "");
 7765|      0|            break;
 7766|    176|        default:
  ------------------
  |  Branch (7766:9): [True: 176, False: 0]
  ------------------
 7767|    176|            break;
 7768|    176|        }
 7769|    176|    }
 7770|       |
 7771|       |    // Check packing and matrix
 7772|  13.8k|    if (qualifier.hasUniformLayout()) {
  ------------------
  |  Branch (7772:9): [True: 264, False: 13.5k]
  ------------------
 7773|    264|        switch (qualifier.storage) {
 7774|    264|        case EvqUniform:
  ------------------
  |  Branch (7774:9): [True: 264, False: 0]
  ------------------
 7775|    264|        case EvqBuffer:
  ------------------
  |  Branch (7775:9): [True: 0, False: 264]
  ------------------
 7776|    264|            if (type.getBasicType() != EbtBlock) {
  ------------------
  |  Branch (7776:17): [True: 264, False: 0]
  ------------------
 7777|    264|                if (qualifier.hasMatrix())
  ------------------
  |  Branch (7777:21): [True: 0, False: 264]
  ------------------
 7778|      0|                    error(loc, "cannot specify matrix layout on a variable declaration", "layout", "");
 7779|    264|                if (qualifier.hasPacking())
  ------------------
  |  Branch (7779:21): [True: 0, False: 264]
  ------------------
 7780|      0|                    error(loc, "cannot specify packing on a variable declaration", "layout", "");
 7781|       |                // "The offset qualifier can only be used on block members of blocks..."
 7782|    264|                if (qualifier.hasOffset() && !type.isAtomic())
  ------------------
  |  Branch (7782:21): [True: 0, False: 264]
  |  Branch (7782:46): [True: 0, False: 0]
  ------------------
 7783|      0|                    error(loc, "cannot specify on a variable declaration", "offset", "");
 7784|       |                // "The align qualifier can only be used on blocks or block members..."
 7785|    264|                if (qualifier.hasAlign())
  ------------------
  |  Branch (7785:21): [True: 0, False: 264]
  ------------------
 7786|      0|                    error(loc, "cannot specify on a variable declaration", "align", "");
 7787|    264|                if (qualifier.isPushConstant())
  ------------------
  |  Branch (7787:21): [True: 0, False: 264]
  ------------------
 7788|      0|                    error(loc, "can only specify on a uniform block", "push_constant", "");
 7789|    264|                if (qualifier.isShaderRecord())
  ------------------
  |  Branch (7789:21): [True: 0, False: 264]
  ------------------
 7790|      0|                    error(loc, "can only specify on a buffer block", "shaderRecordNV", "");
 7791|    264|                if (qualifier.hasLocation() && type.isAtomic())
  ------------------
  |  Branch (7791:21): [True: 0, False: 264]
  |  Branch (7791:48): [True: 0, False: 0]
  ------------------
 7792|      0|                    error(loc, "cannot specify on atomic counter", "location", "");
 7793|    264|            }
 7794|    264|            break;
 7795|      0|        default:
  ------------------
  |  Branch (7795:9): [True: 0, False: 264]
  ------------------
 7796|       |            // these were already filtered by layoutTypeCheck() (or its callees)
 7797|      0|            break;
 7798|    264|        }
 7799|    264|    }
 7800|       |
 7801|       |    // Check that an in/out variable or block doesn't contain a boolean member
 7802|       |    // Don't enforce if redeclaring a builtin, which are allowed to contain bool
 7803|  13.8k|    if (!parsingBuiltins && type.containsBasicType(EbtBool) && !builtInName(symbol.getName())) {
  ------------------
  |  Branch (7803:9): [True: 600, False: 13.2k]
  |  Branch (7803:29): [True: 0, False: 600]
  |  Branch (7803:64): [True: 0, False: 0]
  ------------------
 7804|      0|        switch(qualifier.storage) {
 7805|      0|        case EvqVaryingIn:
  ------------------
  |  Branch (7805:9): [True: 0, False: 0]
  ------------------
 7806|      0|        case EvqVaryingOut:
  ------------------
  |  Branch (7806:9): [True: 0, False: 0]
  ------------------
 7807|      0|        {
 7808|      0|            const char *reason = type.getBasicType() == EbtBool ? "cannot be bool" : "cannot contain bool";
  ------------------
  |  Branch (7808:34): [True: 0, False: 0]
  ------------------
 7809|      0|            error(loc, reason, GetStorageQualifierString(qualifier.storage), "");
 7810|      0|            break;
 7811|      0|        }
 7812|      0|        default:
  ------------------
  |  Branch (7812:9): [True: 0, False: 0]
  ------------------
 7813|      0|            break;
 7814|      0|        }
 7815|      0|    }
 7816|  13.8k|}
_ZN7glslang13TParseContext30layoutMemberLocationArrayCheckERKNS_10TSourceLocEbPNS_11TArraySizesE:
 7827|     83|{
 7828|     83|    if (memberWithLocation && arraySizes != nullptr) {
  ------------------
  |  Branch (7828:9): [True: 0, False: 83]
  |  Branch (7828:31): [True: 0, False: 0]
  ------------------
 7829|      0|        if (arraySizes->getNumDims() > (currentBlockQualifier.isArrayedIo(language) ? 1 : 0))
  ------------------
  |  Branch (7829:13): [True: 0, False: 0]
  |  Branch (7829:41): [True: 0, False: 0]
  ------------------
 7830|      0|            error(loc, "cannot use in a block array where new locations are needed for each block element",
 7831|      0|                       "location", "");
 7832|      0|    }
 7833|     83|}
_ZN7glslang13TParseContext15layoutTypeCheckERKNS_10TSourceLocERKNS_5TTypeE:
 7837|  14.2k|{
 7838|  14.2k|    const TQualifier& qualifier = type.getQualifier();
 7839|       |
 7840|       |    // first, intra-layout qualifier-only error checking
 7841|  14.2k|    layoutQualifierCheck(loc, qualifier);
 7842|       |
 7843|       |    // now, error checking combining type and qualifier
 7844|       |
 7845|  14.2k|    if (qualifier.hasAnyLocation()) {
  ------------------
  |  Branch (7845:9): [True: 72, False: 14.1k]
  ------------------
 7846|     72|        if (qualifier.hasLocation()) {
  ------------------
  |  Branch (7846:13): [True: 72, False: 0]
  ------------------
 7847|     72|            if (qualifier.storage == EvqVaryingOut && language == EShLangFragment) {
  ------------------
  |  Branch (7847:17): [True: 6, False: 66]
  |  Branch (7847:55): [True: 0, False: 6]
  ------------------
 7848|      0|                if (qualifier.layoutLocation >= (unsigned int)resources.maxDrawBuffers)
  ------------------
  |  Branch (7848:21): [True: 0, False: 0]
  ------------------
 7849|      0|                    error(loc, "too large for fragment output", "location", "");
 7850|      0|            }
 7851|     72|        }
 7852|     72|        if (qualifier.hasComponent()) {
  ------------------
  |  Branch (7852:13): [True: 0, False: 72]
  ------------------
 7853|       |            // "It is a compile-time error if this sequence of components gets larger than 3."
 7854|      0|            if (qualifier.layoutComponent + type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1) > 4)
  ------------------
  |  Branch (7854:17): [True: 0, False: 0]
  |  Branch (7854:69): [True: 0, False: 0]
  ------------------
 7855|      0|                error(loc, "type overflows the available 4 components", "component", "");
 7856|       |
 7857|       |            // "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."
 7858|      0|            if (type.isMatrix() || type.getBasicType() == EbtBlock || type.getBasicType() == EbtStruct)
  ------------------
  |  Branch (7858:17): [True: 0, False: 0]
  |  Branch (7858:36): [True: 0, False: 0]
  |  Branch (7858:71): [True: 0, False: 0]
  ------------------
 7859|      0|                error(loc, "cannot apply to a matrix, structure, or block", "component", "");
 7860|       |
 7861|       |            // " It is a compile-time error to use component 1 or 3 as the beginning of a double or dvec2."
 7862|      0|            if (type.getBasicType() == EbtDouble)
  ------------------
  |  Branch (7862:17): [True: 0, False: 0]
  ------------------
 7863|      0|                if (qualifier.layoutComponent & 1)
  ------------------
  |  Branch (7863:21): [True: 0, False: 0]
  ------------------
 7864|      0|                    error(loc, "doubles cannot start on an odd-numbered component", "component", "");
 7865|      0|        }
 7866|       |
 7867|     72|        switch (qualifier.storage) {
 7868|     66|        case EvqVaryingIn:
  ------------------
  |  Branch (7868:9): [True: 66, False: 6]
  ------------------
 7869|     72|        case EvqVaryingOut:
  ------------------
  |  Branch (7869:9): [True: 6, False: 66]
  ------------------
 7870|     72|            if (type.getBasicType() == EbtBlock)
  ------------------
  |  Branch (7870:17): [True: 0, False: 72]
  ------------------
 7871|      0|                profileRequires(loc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, "location qualifier on in/out block");
 7872|     72|            if (type.getQualifier().isTaskMemory())
  ------------------
  |  Branch (7872:17): [True: 0, False: 72]
  ------------------
 7873|      0|                error(loc, "cannot apply to taskNV in/out blocks", "location", "");
 7874|     72|            break;
 7875|      0|        case EvqUniform:
  ------------------
  |  Branch (7875:9): [True: 0, False: 72]
  ------------------
 7876|      0|        case EvqBuffer:
  ------------------
  |  Branch (7876:9): [True: 0, False: 72]
  ------------------
 7877|      0|            if (type.getBasicType() == EbtBlock)
  ------------------
  |  Branch (7877:17): [True: 0, False: 0]
  ------------------
 7878|      0|                error(loc, "cannot apply to uniform or buffer block", "location", "");
 7879|      0|            else if (type.getBasicType() == EbtSampler && type.getSampler().isAttachmentEXT())
  ------------------
  |  Branch (7879:22): [True: 0, False: 0]
  |  Branch (7879:59): [True: 0, False: 0]
  ------------------
 7880|      0|                error(loc, "only applies to", "location", "%s with storage tileImageEXT", type.getBasicTypeString().c_str());
 7881|      0|            break;
 7882|      0|        case EvqtaskPayloadSharedEXT:
  ------------------
  |  Branch (7882:9): [True: 0, False: 72]
  ------------------
 7883|      0|            error(loc, "cannot apply to taskPayloadSharedEXT", "location", "");
 7884|      0|            break;
 7885|      0|        case EvqPayload:
  ------------------
  |  Branch (7885:9): [True: 0, False: 72]
  ------------------
 7886|      0|        case EvqPayloadIn:
  ------------------
  |  Branch (7886:9): [True: 0, False: 72]
  ------------------
 7887|      0|        case EvqHitAttr:
  ------------------
  |  Branch (7887:9): [True: 0, False: 72]
  ------------------
 7888|      0|        case EvqCallableData:
  ------------------
  |  Branch (7888:9): [True: 0, False: 72]
  ------------------
 7889|      0|        case EvqCallableDataIn:
  ------------------
  |  Branch (7889:9): [True: 0, False: 72]
  ------------------
 7890|      0|        case EvqHitObjectAttrNV:
  ------------------
  |  Branch (7890:9): [True: 0, False: 72]
  ------------------
 7891|      0|        case EvqHitObjectAttrEXT:
  ------------------
  |  Branch (7891:9): [True: 0, False: 72]
  ------------------
 7892|      0|        case EvqSpirvStorageClass:
  ------------------
  |  Branch (7892:9): [True: 0, False: 72]
  ------------------
 7893|      0|            break;
 7894|      0|        case EvqTileImageEXT:
  ------------------
  |  Branch (7894:9): [True: 0, False: 72]
  ------------------
 7895|      0|            break;
 7896|      0|        default:
  ------------------
  |  Branch (7896:9): [True: 0, False: 72]
  ------------------
 7897|      0|            error(loc, "can only apply to uniform, buffer, in, or out storage qualifiers", "location", "");
 7898|      0|            break;
 7899|     72|        }
 7900|       |
 7901|     72|        bool typeCollision;
 7902|     72|        int repeated = intermediate.addUsedLocation(qualifier, type, typeCollision);
 7903|     72|        if (repeated >= 0 && ! typeCollision)
  ------------------
  |  Branch (7903:13): [True: 0, False: 72]
  |  Branch (7903:30): [True: 0, False: 0]
  ------------------
 7904|      0|            error(loc, "overlapping use of location", "location", "%d", repeated);
 7905|       |        // When location aliasing, the aliases sharing the location must have the same underlying numerical type and bit width(
 7906|       |        // floating - point or integer, 32 - bit versus 64 - bit,etc.)
 7907|     72|        if (typeCollision && (qualifier.isPipeInput() || qualifier.isPipeOutput() || qualifier.storage == EvqTileImageEXT))
  ------------------
  |  Branch (7907:13): [True: 0, False: 72]
  |  Branch (7907:31): [True: 0, False: 0]
  |  Branch (7907:58): [True: 0, False: 0]
  |  Branch (7907:86): [True: 0, False: 0]
  ------------------
 7908|      0|            error(loc, "the aliases sharing the location", "location", "%d must be the same basic type and interpolation qualification", repeated);
 7909|     72|    }
 7910|       |
 7911|  14.2k|    if (qualifier.hasXfbOffset() && qualifier.hasXfbBuffer()) {
  ------------------
  |  Branch (7911:9): [True: 0, False: 14.2k]
  |  Branch (7911:37): [True: 0, False: 0]
  ------------------
 7912|      0|        if (type.isUnsizedArray()) {
  ------------------
  |  Branch (7912:13): [True: 0, False: 0]
  ------------------
 7913|      0|            error(loc, "unsized array", "xfb_offset", "in buffer %d", qualifier.layoutXfbBuffer);
 7914|      0|        } else {
 7915|      0|            int repeated = intermediate.addXfbBufferOffset(type);
 7916|      0|            if (repeated >= 0)
  ------------------
  |  Branch (7916:17): [True: 0, False: 0]
  ------------------
 7917|      0|                error(loc, "overlapping offsets at", "xfb_offset", "offset %d in buffer %d", repeated, qualifier.layoutXfbBuffer);
 7918|      0|        }
 7919|       |
 7920|       |        // "The offset must be a multiple of the size of the first component of the first
 7921|       |        // qualified variable or block member, or a compile-time error results. Further, if applied to an aggregate
 7922|       |        // containing a double or 64-bit integer, the offset must also be a multiple of 8..."
 7923|      0|        if ((type.containsBasicType(EbtDouble) || type.containsBasicType(EbtInt64) || type.containsBasicType(EbtUint64)) &&
  ------------------
  |  Branch (7923:14): [True: 0, False: 0]
  |  Branch (7923:51): [True: 0, False: 0]
  |  Branch (7923:87): [True: 0, False: 0]
  ------------------
 7924|      0|            ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 8))
  ------------------
  |  Branch (7924:13): [True: 0, False: 0]
  ------------------
 7925|      0|            error(loc, "type contains double or 64-bit integer; xfb_offset must be a multiple of 8", "xfb_offset", "");
 7926|      0|        else if ((type.containsBasicType(EbtBool) || type.containsBasicType(EbtFloat) ||
  ------------------
  |  Branch (7926:19): [True: 0, False: 0]
  |  Branch (7926:54): [True: 0, False: 0]
  ------------------
 7927|      0|                  type.containsBasicType(EbtInt) || type.containsBasicType(EbtUint)) &&
  ------------------
  |  Branch (7927:19): [True: 0, False: 0]
  |  Branch (7927:53): [True: 0, False: 0]
  ------------------
 7928|      0|                 ! IsMultipleOfPow2(qualifier.layoutXfbOffset, 4))
  ------------------
  |  Branch (7928:18): [True: 0, False: 0]
  ------------------
 7929|      0|            error(loc, "must be a multiple of size of first component", "xfb_offset", "");
 7930|       |        // ..., if applied to an aggregate containing a half float or 16-bit integer, the offset must also be a multiple of 2..."
 7931|      0|        else if ((type.contains16BitFloat() || type.containsBasicType(EbtInt16) || type.containsBasicType(EbtUint16)) &&
  ------------------
  |  Branch (7931:19): [True: 0, False: 0]
  |  Branch (7931:48): [True: 0, False: 0]
  |  Branch (7931:84): [True: 0, False: 0]
  ------------------
 7932|      0|                 !IsMultipleOfPow2(qualifier.layoutXfbOffset, 2))
  ------------------
  |  Branch (7932:18): [True: 0, False: 0]
  ------------------
 7933|      0|            error(loc, "type contains half float or 16-bit integer; xfb_offset must be a multiple of 2", "xfb_offset", "");
 7934|      0|    }
 7935|  14.2k|    if (qualifier.hasXfbStride() && qualifier.hasXfbBuffer()) {
  ------------------
  |  Branch (7935:9): [True: 0, False: 14.2k]
  |  Branch (7935:37): [True: 0, False: 0]
  ------------------
 7936|      0|        if (! intermediate.setXfbBufferStride(qualifier.layoutXfbBuffer, qualifier.layoutXfbStride))
  ------------------
  |  Branch (7936:13): [True: 0, False: 0]
  ------------------
 7937|      0|            error(loc, "all stride settings must match for xfb buffer", "xfb_stride", "%d", qualifier.layoutXfbBuffer);
 7938|      0|    }
 7939|       |
 7940|  14.2k|    if (qualifier.hasBinding()) {
  ------------------
  |  Branch (7940:9): [True: 264, False: 13.9k]
  ------------------
 7941|       |        // Binding checking, from the spec:
 7942|       |        //
 7943|       |        // "If the binding point for any uniform or shader storage block instance is less than zero, or greater than or
 7944|       |        // equal to the implementation-dependent maximum number of uniform buffer bindings, a compile-time
 7945|       |        // error will occur. When the binding identifier is used with a uniform or shader storage block instanced as
 7946|       |        // an array of size N, all elements of the array from binding through binding + N - 1 must be within this
 7947|       |        // range."
 7948|       |        //
 7949|    264|        if (!type.isOpaque() && type.getBasicType() != EbtBlock && type.getBasicType() != EbtSpirvType)
  ------------------
  |  Branch (7949:13): [True: 0, False: 264]
  |  Branch (7949:33): [True: 0, False: 0]
  |  Branch (7949:68): [True: 0, False: 0]
  ------------------
 7950|      0|            error(loc, "requires block, or sampler/image, or atomic-counter type", "binding", "");
 7951|    264|        if (type.getBasicType() == EbtSampler) {
  ------------------
  |  Branch (7951:13): [True: 264, False: 0]
  ------------------
 7952|    264|            int lastBinding = qualifier.layoutBinding;
 7953|    264|            if (type.isArray()) {
  ------------------
  |  Branch (7953:17): [True: 0, False: 264]
  ------------------
 7954|      0|                if (spvVersion.vulkan == 0) {
  ------------------
  |  Branch (7954:21): [True: 0, False: 0]
  ------------------
 7955|      0|                    if (type.isSizedArray())
  ------------------
  |  Branch (7955:25): [True: 0, False: 0]
  ------------------
 7956|      0|                        lastBinding += (type.getCumulativeArraySize() - 1);
 7957|      0|                    else {
 7958|      0|                        warn(loc, "assuming binding count of one for compile-time checking of binding numbers for unsized array", "[]", "");
 7959|      0|                    }
 7960|      0|                }
 7961|      0|            }
 7962|    264|            if (spvVersion.vulkan == 0 && lastBinding >= resources.maxCombinedTextureImageUnits)
  ------------------
  |  Branch (7962:17): [True: 0, False: 264]
  |  Branch (7962:43): [True: 0, False: 0]
  ------------------
 7963|      0|                error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : "");
  ------------------
  |  Branch (7963:104): [True: 0, False: 0]
  ------------------
 7964|    264|        }
 7965|    264|        if (type.isAtomic() && !spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (7965:13): [True: 0, False: 264]
  |  Branch (7965:32): [True: 0, False: 0]
  ------------------
 7966|      0|            if (qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) {
  ------------------
  |  Branch (7966:17): [True: 0, False: 0]
  ------------------
 7967|      0|                error(loc, "atomic_uint binding is too large; see gl_MaxAtomicCounterBindings", "binding", "");
 7968|      0|                return;
 7969|      0|            }
 7970|      0|        }
 7971|  13.9k|    } else if (!intermediate.getAutoMapBindings()) {
  ------------------
  |  Branch (7971:16): [True: 13.7k, False: 224]
  ------------------
 7972|       |        // some types require bindings
 7973|       |
 7974|       |        // atomic_uint
 7975|  13.7k|        if (type.isAtomic())
  ------------------
  |  Branch (7975:13): [True: 0, False: 13.7k]
  ------------------
 7976|      0|            error(loc, "layout(binding=X) is required", "atomic_uint", "");
 7977|       |
 7978|       |        // SPIR-V
 7979|  13.7k|        if (spvVersion.spv > 0) {
  ------------------
  |  Branch (7979:13): [True: 13.7k, False: 0]
  ------------------
 7980|  13.7k|            if (qualifier.isUniformOrBuffer() && !intermediate.IsRequestedExtension(E_GL_EXT_descriptor_heap)) {
  ------------------
  |  Branch (7980:17): [True: 135, False: 13.6k]
  |  Branch (7980:50): [True: 135, False: 0]
  ------------------
 7981|    135|                if (type.getBasicType() == EbtBlock && !qualifier.isPushConstant() &&
  ------------------
  |  Branch (7981:21): [True: 0, False: 135]
  |  Branch (7981:56): [True: 0, False: 0]
  ------------------
 7982|      0|                       !qualifier.isShaderRecord() &&
  ------------------
  |  Branch (7982:24): [True: 0, False: 0]
  ------------------
 7983|      0|                       !qualifier.hasAttachment() &&
  ------------------
  |  Branch (7983:24): [True: 0, False: 0]
  ------------------
 7984|      0|                       !qualifier.hasBufferReference())
  ------------------
  |  Branch (7984:24): [True: 0, False: 0]
  ------------------
 7985|      0|                    error(loc, "uniform/buffer blocks require layout(binding=X)", "binding", "");
 7986|    135|                else if (spvVersion.vulkan > 0 && type.getBasicType() == EbtSampler && !type.getSampler().isAttachmentEXT())
  ------------------
  |  Branch (7986:26): [True: 135, False: 0]
  |  Branch (7986:51): [True: 0, False: 135]
  |  Branch (7986:88): [True: 0, False: 0]
  ------------------
 7987|      0|                    error(loc, "sampler/texture/image requires layout(binding=X)", "binding", "");
 7988|    135|            }
 7989|  13.7k|        }
 7990|  13.7k|    }
 7991|       |
 7992|       |    // some things can't have arrays of arrays
 7993|  14.2k|    if (type.isArrayOfArrays()) {
  ------------------
  |  Branch (7993:9): [True: 15, False: 14.2k]
  ------------------
 7994|     15|        if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (7994:13): [True: 15, False: 0]
  ------------------
 7995|     15|            if (type.isOpaque() || (type.getQualifier().isUniformOrBuffer() && type.getBasicType() == EbtBlock))
  ------------------
  |  Branch (7995:17): [True: 0, False: 15]
  |  Branch (7995:37): [True: 0, False: 15]
  |  Branch (7995:80): [True: 0, False: 0]
  ------------------
 7996|      0|                warn(loc, "Generating SPIR-V array-of-arrays, but Vulkan only supports single array level for this resource", "[][]", "");
 7997|     15|        }
 7998|     15|    }
 7999|       |
 8000|       |    // "The offset qualifier can only be used on block members of blocks..."
 8001|  14.2k|    if (qualifier.hasOffset()) {
  ------------------
  |  Branch (8001:9): [True: 0, False: 14.2k]
  ------------------
 8002|      0|        if (type.getBasicType() == EbtBlock)
  ------------------
  |  Branch (8002:13): [True: 0, False: 0]
  ------------------
 8003|      0|            error(loc, "only applies to block members, not blocks", "offset", "");
 8004|      0|    }
 8005|       |
 8006|       |    // Image format
 8007|  14.2k|    if (qualifier.hasFormat()) {
  ------------------
  |  Branch (8007:9): [True: 66, False: 14.1k]
  ------------------
 8008|     66|        if (! type.isImage() && !intermediate.getBindlessImageMode())
  ------------------
  |  Branch (8008:13): [True: 0, False: 66]
  |  Branch (8008:33): [True: 0, False: 0]
  ------------------
 8009|      0|            error(loc, "only apply to images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
 8010|     66|        else {
 8011|     66|            if (type.getSampler().type == EbtFloat && qualifier.getFormat() > ElfFloatGuard)
  ------------------
  |  Branch (8011:17): [True: 66, False: 0]
  |  Branch (8011:55): [True: 0, False: 66]
  ------------------
 8012|      0|                error(loc, "does not apply to floating point images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
 8013|     66|            if (type.getSampler().type == EbtInt && (qualifier.getFormat() < ElfFloatGuard || qualifier.getFormat() > ElfIntGuard))
  ------------------
  |  Branch (8013:17): [True: 0, False: 66]
  |  Branch (8013:54): [True: 0, False: 0]
  |  Branch (8013:95): [True: 0, False: 0]
  ------------------
 8014|      0|                error(loc, "does not apply to signed integer images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
 8015|     66|            if (type.getSampler().type == EbtUint && qualifier.getFormat() < ElfIntGuard)
  ------------------
  |  Branch (8015:17): [True: 0, False: 66]
  |  Branch (8015:54): [True: 0, False: 0]
  ------------------
 8016|      0|                error(loc, "does not apply to unsigned integer images", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
 8017|       |
 8018|     66|            if (isEsProfile()) {
  ------------------
  |  Branch (8018:17): [True: 0, False: 66]
  ------------------
 8019|       |                // "Except for image variables qualified with the format qualifiers r32f, r32i, and r32ui, image variables must
 8020|       |                // specify either memory qualifier readonly or the memory qualifier writeonly."
 8021|      0|                if (! (qualifier.getFormat() == ElfR32f || qualifier.getFormat() == ElfR32i || qualifier.getFormat() == ElfR32ui)) {
  ------------------
  |  Branch (8021:24): [True: 0, False: 0]
  |  Branch (8021:60): [True: 0, False: 0]
  |  Branch (8021:96): [True: 0, False: 0]
  ------------------
 8022|      0|                    if (! qualifier.isReadOnly() && ! qualifier.isWriteOnly())
  ------------------
  |  Branch (8022:25): [True: 0, False: 0]
  |  Branch (8022:53): [True: 0, False: 0]
  ------------------
 8023|      0|                        error(loc, "format requires readonly or writeonly memory qualifier", TQualifier::getLayoutFormatString(qualifier.getFormat()), "");
 8024|      0|                }
 8025|      0|            }
 8026|     66|        }
 8027|  14.1k|    } else if (type.isImage() && ! qualifier.isWriteOnly() && !intermediate.getBindlessImageMode()) {
  ------------------
  |  Branch (8027:16): [True: 0, False: 14.1k]
  |  Branch (8027:34): [True: 0, False: 0]
  |  Branch (8027:63): [True: 0, False: 0]
  ------------------
 8028|      0|        const char *explanation = "image variables not declared 'writeonly' and without a format layout qualifier";
 8029|      0|        requireProfile(loc, ECoreProfile | ECompatibilityProfile, explanation);
 8030|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shader_image_load_formatted, explanation);
 8031|      0|    }
 8032|       |
 8033|  14.2k|    if (qualifier.isPushConstant()) {
  ------------------
  |  Branch (8033:9): [True: 0, False: 14.2k]
  ------------------
 8034|      0|        if (type.getBasicType() != EbtBlock)
  ------------------
  |  Branch (8034:13): [True: 0, False: 0]
  ------------------
 8035|      0|            error(loc, "can only be used with a block", "push_constant", "");
 8036|      0|        if (type.isArray())
  ------------------
  |  Branch (8036:13): [True: 0, False: 0]
  ------------------
 8037|      0|            error(loc, "Push constants blocks can't be an array", "push_constant", "");
 8038|      0|    }
 8039|       |
 8040|  14.2k|    if (type.getBasicType() == EbtReference) {
  ------------------
  |  Branch (8040:9): [True: 0, False: 14.2k]
  ------------------
 8041|      0|        if (qualifier.isPipeInput())
  ------------------
  |  Branch (8041:13): [True: 0, False: 0]
  ------------------
 8042|      0|            error(loc, "cannot contain any structs with buffer_reference.", "in",
 8043|      0|                  "If you want to interface shader stages with a buffer_reference cast to a uint64 or uvec2 instead.");
 8044|      0|        if (qualifier.isPipeOutput())
  ------------------
  |  Branch (8044:13): [True: 0, False: 0]
  ------------------
 8045|      0|            error(loc, "cannot contain any structs with buffer_reference.", "out",
 8046|      0|                  "If you want to interface shader stages with a buffer_reference cast to a uint64 or uvec2 instead.");
 8047|      0|    }
 8048|       |
 8049|  14.2k|    if (qualifier.hasBufferReference() && type.getBasicType() != EbtBlock)
  ------------------
  |  Branch (8049:9): [True: 0, False: 14.2k]
  |  Branch (8049:43): [True: 0, False: 0]
  ------------------
 8050|      0|        error(loc, "can only be used with a block", "buffer_reference", "");
 8051|       |
 8052|  14.2k|    if (qualifier.isShaderRecord() && type.getBasicType() != EbtBlock)
  ------------------
  |  Branch (8052:9): [True: 0, False: 14.2k]
  |  Branch (8052:39): [True: 0, False: 0]
  ------------------
 8053|      0|        error(loc, "can only be used with a block", "shaderRecordNV", "");
 8054|       |
 8055|       |    // input attachment
 8056|  14.2k|    if (type.isSubpass()) {
  ------------------
  |  Branch (8056:9): [True: 12, False: 14.2k]
  ------------------
 8057|     12|        if (extensionTurnedOn(E_GL_EXT_shader_tile_image))
  ------------------
  |  Branch (8057:13): [True: 0, False: 12]
  ------------------
 8058|      0|            error(loc, "cannot be used with GL_EXT_shader_tile_image enabled", type.getSampler().getString().c_str(),
 8059|      0|                  "");
 8060|     12|        if (! qualifier.hasAttachment())
  ------------------
  |  Branch (8060:13): [True: 0, False: 12]
  ------------------
 8061|      0|            error(loc, "requires an input_attachment_index layout qualifier", "subpass", "");
 8062|  14.2k|    } else {
 8063|  14.2k|        if (qualifier.hasAttachment())
  ------------------
  |  Branch (8063:13): [True: 0, False: 14.2k]
  ------------------
 8064|      0|            error(loc, "can only be used with a subpass", "input_attachment_index", "");
 8065|  14.2k|    }
 8066|       |
 8067|       |    // specialization-constant id
 8068|  14.2k|    if (qualifier.hasSpecConstantId()) {
  ------------------
  |  Branch (8068:9): [True: 0, False: 14.2k]
  ------------------
 8069|      0|        if (type.getQualifier().storage != EvqConst)
  ------------------
  |  Branch (8069:13): [True: 0, False: 0]
  ------------------
 8070|      0|            error(loc, "can only be applied to 'const'-qualified scalar", "constant_id", "");
 8071|      0|        if (! type.isScalar())
  ------------------
  |  Branch (8071:13): [True: 0, False: 0]
  ------------------
 8072|      0|            error(loc, "can only be applied to a scalar", "constant_id", "");
 8073|      0|        switch (type.getBasicType())
 8074|      0|        {
 8075|      0|        case EbtInt8:
  ------------------
  |  Branch (8075:9): [True: 0, False: 0]
  ------------------
 8076|      0|        case EbtUint8:
  ------------------
  |  Branch (8076:9): [True: 0, False: 0]
  ------------------
 8077|      0|        case EbtInt16:
  ------------------
  |  Branch (8077:9): [True: 0, False: 0]
  ------------------
 8078|      0|        case EbtUint16:
  ------------------
  |  Branch (8078:9): [True: 0, False: 0]
  ------------------
 8079|      0|        case EbtInt:
  ------------------
  |  Branch (8079:9): [True: 0, False: 0]
  ------------------
 8080|      0|        case EbtUint:
  ------------------
  |  Branch (8080:9): [True: 0, False: 0]
  ------------------
 8081|      0|        case EbtInt64:
  ------------------
  |  Branch (8081:9): [True: 0, False: 0]
  ------------------
 8082|      0|        case EbtUint64:
  ------------------
  |  Branch (8082:9): [True: 0, False: 0]
  ------------------
 8083|      0|        case EbtBool:
  ------------------
  |  Branch (8083:9): [True: 0, False: 0]
  ------------------
 8084|      0|        case EbtFloat:
  ------------------
  |  Branch (8084:9): [True: 0, False: 0]
  ------------------
 8085|      0|        case EbtDouble:
  ------------------
  |  Branch (8085:9): [True: 0, False: 0]
  ------------------
 8086|      0|        case EbtFloat16:
  ------------------
  |  Branch (8086:9): [True: 0, False: 0]
  ------------------
 8087|      0|        case EbtBFloat16:
  ------------------
  |  Branch (8087:9): [True: 0, False: 0]
  ------------------
 8088|      0|        case EbtFloatE5M2:
  ------------------
  |  Branch (8088:9): [True: 0, False: 0]
  ------------------
 8089|      0|        case EbtFloatE4M3:
  ------------------
  |  Branch (8089:9): [True: 0, False: 0]
  ------------------
 8090|      0|            break;
 8091|      0|        default:
  ------------------
  |  Branch (8091:9): [True: 0, False: 0]
  ------------------
 8092|      0|            error(loc, "cannot be applied to this type", "constant_id", "");
 8093|      0|            break;
 8094|      0|        }
 8095|      0|    }
 8096|  14.2k|}
_ZN7glslang13TParseContext20layoutQualifierCheckERKNS_10TSourceLocERKNS_10TQualifierE:
 8115|  14.2k|{
 8116|  14.2k|    if (qualifier.storage == EvqShared && qualifier.hasLayout()) {
  ------------------
  |  Branch (8116:9): [True: 0, False: 14.2k]
  |  Branch (8116:43): [True: 0, False: 0]
  ------------------
 8117|      0|        if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_4) {
  ------------------
  |  Branch (8117:13): [True: 0, False: 0]
  |  Branch (8117:35): [True: 0, False: 0]
  ------------------
 8118|      0|            error(loc, "shared block requires at least SPIR-V 1.4", "shared block", "");
 8119|      0|        }
 8120|      0|        profileRequires(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shared_memory_block, "shared block");
 8121|      0|    }
 8122|       |
 8123|       |    // "It is a compile-time error to use *component* without also specifying the location qualifier (order does not matter)."
 8124|  14.2k|    if (qualifier.hasComponent() && ! qualifier.hasLocation())
  ------------------
  |  Branch (8124:9): [True: 0, False: 14.2k]
  |  Branch (8124:37): [True: 0, False: 0]
  ------------------
 8125|      0|        error(loc, "must specify 'location' to use 'component'", "component", "");
 8126|       |
 8127|  14.2k|    if (qualifier.hasAnyLocation()) {
  ------------------
  |  Branch (8127:9): [True: 72, False: 14.1k]
  ------------------
 8128|       |
 8129|       |        // "As with input layout qualifiers, all shaders except compute shaders
 8130|       |        // allow *location* layout qualifiers on output variable declarations,
 8131|       |        // output block declarations, and output block member declarations."
 8132|       |
 8133|     72|        switch (qualifier.storage) {
 8134|     66|        case EvqVaryingIn:
  ------------------
  |  Branch (8134:9): [True: 66, False: 6]
  ------------------
 8135|     66|        {
 8136|     66|            const char* feature = "location qualifier on input";
 8137|     66|            if (isEsProfile() && version < 310)
  ------------------
  |  Branch (8137:17): [True: 0, False: 66]
  |  Branch (8137:34): [True: 0, False: 0]
  ------------------
 8138|      0|                requireStage(loc, EShLangVertex, feature);
 8139|     66|            else
 8140|     66|                requireStage(loc, (EShLanguageMask)~EShLangComputeMask, feature);
 8141|     66|            if (language == EShLangVertex) {
  ------------------
  |  Branch (8141:17): [True: 0, False: 66]
  ------------------
 8142|      0|                const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
 8143|      0|                profileRequires(loc, ~EEsProfile, 330, 2, exts, feature);
 8144|      0|                profileRequires(loc, EEsProfile, 300, nullptr, feature);
 8145|     66|            } else {
 8146|     66|                profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature);
 8147|     66|                profileRequires(loc, EEsProfile, 310, nullptr, feature);
 8148|     66|            }
 8149|     66|            break;
 8150|      0|        }
 8151|      6|        case EvqVaryingOut:
  ------------------
  |  Branch (8151:9): [True: 6, False: 66]
  ------------------
 8152|      6|        {
 8153|      6|            const char* feature = "location qualifier on output";
 8154|      6|            if (isEsProfile() && version < 310)
  ------------------
  |  Branch (8154:17): [True: 0, False: 6]
  |  Branch (8154:34): [True: 0, False: 0]
  ------------------
 8155|      0|                requireStage(loc, EShLangFragment, feature);
 8156|      6|            else
 8157|      6|                requireStage(loc, (EShLanguageMask)~EShLangComputeMask, feature);
 8158|      6|            if (language == EShLangFragment) {
  ------------------
  |  Branch (8158:17): [True: 0, False: 6]
  ------------------
 8159|      0|                const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
 8160|      0|                profileRequires(loc, ~EEsProfile, 330, 2, exts, feature);
 8161|      0|                profileRequires(loc, EEsProfile, 300, nullptr, feature);
 8162|      6|            } else {
 8163|      6|                profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature);
 8164|      6|                profileRequires(loc, EEsProfile, 310, nullptr, feature);
 8165|      6|            }
 8166|      6|            break;
 8167|      0|        }
 8168|      0|        case EvqUniform:
  ------------------
  |  Branch (8168:9): [True: 0, False: 72]
  ------------------
 8169|      0|        case EvqBuffer:
  ------------------
  |  Branch (8169:9): [True: 0, False: 72]
  ------------------
 8170|      0|        {
 8171|      0|            const char* feature = "location qualifier on uniform or buffer";
 8172|      0|            requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile | ENoProfile, feature);
 8173|      0|            profileRequires(loc, ~EEsProfile, 330, E_GL_ARB_explicit_attrib_location, feature);
 8174|      0|            profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_explicit_uniform_location, feature);
 8175|      0|            profileRequires(loc, EEsProfile, 310, nullptr, feature);
 8176|      0|            break;
 8177|      0|        }
 8178|      0|        default:
  ------------------
  |  Branch (8178:9): [True: 0, False: 72]
  ------------------
 8179|      0|            break;
 8180|     72|        }
 8181|     72|        if (qualifier.hasIndex()) {
  ------------------
  |  Branch (8181:13): [True: 0, False: 72]
  ------------------
 8182|      0|            if (qualifier.storage != EvqVaryingOut)
  ------------------
  |  Branch (8182:17): [True: 0, False: 0]
  ------------------
 8183|      0|                error(loc, "can only be used on an output", "index", "");
 8184|      0|            if (! qualifier.hasLocation())
  ------------------
  |  Branch (8184:17): [True: 0, False: 0]
  ------------------
 8185|      0|                error(loc, "can only be used with an explicit location", "index", "");
 8186|      0|        }
 8187|     72|    }
 8188|       |
 8189|  14.2k|    if (qualifier.hasBinding()) {
  ------------------
  |  Branch (8189:9): [True: 264, False: 13.9k]
  ------------------
 8190|    264|        if (! qualifier.isUniformOrBuffer() && !qualifier.isTaskMemory() && !qualifier.isTileAttachmentQCOM())
  ------------------
  |  Branch (8190:13): [True: 0, False: 264]
  |  Branch (8190:48): [True: 0, False: 0]
  |  Branch (8190:77): [True: 0, False: 0]
  ------------------
 8191|      0|            error(loc, "requires uniform or buffer or tile image storage qualifier", "binding", "");
 8192|    264|    }
 8193|  14.2k|    if (qualifier.hasStream()) {
  ------------------
  |  Branch (8193:9): [True: 96, False: 14.1k]
  ------------------
 8194|     96|        if (!qualifier.isPipeOutput())
  ------------------
  |  Branch (8194:13): [True: 0, False: 96]
  ------------------
 8195|      0|            error(loc, "can only be used on an output", "stream", "");
 8196|     96|    }
 8197|  14.2k|    if (qualifier.hasXfb()) {
  ------------------
  |  Branch (8197:9): [True: 620, False: 13.6k]
  ------------------
 8198|    620|        if (!qualifier.isPipeOutput())
  ------------------
  |  Branch (8198:13): [True: 0, False: 620]
  ------------------
 8199|      0|            error(loc, "can only be used on an output", "xfb layout qualifier", "");
 8200|    620|    }
 8201|  14.2k|    if (qualifier.hasUniformLayout()) {
  ------------------
  |  Branch (8201:9): [True: 264, False: 13.9k]
  ------------------
 8202|    264|        if (!storageCanHaveLayoutInBlock(qualifier.storage) && !qualifier.isTaskMemory()) {
  ------------------
  |  Branch (8202:13): [True: 0, False: 264]
  |  Branch (8202:64): [True: 0, False: 0]
  ------------------
 8203|      0|            if (qualifier.hasMatrix() || qualifier.hasPacking())
  ------------------
  |  Branch (8203:17): [True: 0, False: 0]
  |  Branch (8203:42): [True: 0, False: 0]
  ------------------
 8204|      0|                error(loc, "matrix or packing qualifiers can only be used on a uniform or buffer", "layout", "");
 8205|      0|            if (qualifier.hasOffset() || qualifier.hasAlign())
  ------------------
  |  Branch (8205:17): [True: 0, False: 0]
  |  Branch (8205:42): [True: 0, False: 0]
  ------------------
 8206|      0|                error(loc, "offset/align can only be used on a uniform or buffer", "layout", "");
 8207|      0|        }
 8208|    264|    }
 8209|  14.2k|    if (qualifier.isPushConstant()) {
  ------------------
  |  Branch (8209:9): [True: 0, False: 14.2k]
  ------------------
 8210|      0|        if (qualifier.storage != EvqUniform)
  ------------------
  |  Branch (8210:13): [True: 0, False: 0]
  ------------------
 8211|      0|            error(loc, "can only be used with a uniform", "push_constant", "");
 8212|      0|        if (qualifier.hasSet())
  ------------------
  |  Branch (8212:13): [True: 0, False: 0]
  ------------------
 8213|      0|            error(loc, "cannot be used with push_constant", "set", "");
 8214|      0|        if (qualifier.hasBinding())
  ------------------
  |  Branch (8214:13): [True: 0, False: 0]
  ------------------
 8215|      0|            error(loc, "cannot be used with push_constant", "binding", "");
 8216|      0|    }
 8217|  14.2k|    if (qualifier.hasBufferReference()) {
  ------------------
  |  Branch (8217:9): [True: 0, False: 14.2k]
  ------------------
 8218|      0|        if (qualifier.storage != EvqBuffer)
  ------------------
  |  Branch (8218:13): [True: 0, False: 0]
  ------------------
 8219|      0|            error(loc, "can only be used with buffer", "buffer_reference", "");
 8220|      0|    }
 8221|  14.2k|    if (qualifier.isShaderRecord()) {
  ------------------
  |  Branch (8221:9): [True: 0, False: 14.2k]
  ------------------
 8222|      0|        if (qualifier.storage != EvqBuffer)
  ------------------
  |  Branch (8222:13): [True: 0, False: 0]
  ------------------
 8223|      0|            error(loc, "can only be used with a buffer", "shaderRecordNV", "");
 8224|      0|        if (qualifier.hasBinding())
  ------------------
  |  Branch (8224:13): [True: 0, False: 0]
  ------------------
 8225|      0|            error(loc, "cannot be used with shaderRecordNV", "binding", "");
 8226|      0|        if (qualifier.hasSet())
  ------------------
  |  Branch (8226:13): [True: 0, False: 0]
  ------------------
 8227|      0|            error(loc, "cannot be used with shaderRecordNV", "set", "");
 8228|       |
 8229|      0|    }
 8230|       |
 8231|  14.2k|    if (qualifier.storage == EvqTileImageEXT) {
  ------------------
  |  Branch (8231:9): [True: 0, False: 14.2k]
  ------------------
 8232|      0|        if (qualifier.hasSet())
  ------------------
  |  Branch (8232:13): [True: 0, False: 0]
  ------------------
 8233|      0|            error(loc, "cannot be used with tileImageEXT", "set", "");
 8234|      0|        if (!qualifier.hasLocation())
  ------------------
  |  Branch (8234:13): [True: 0, False: 0]
  ------------------
 8235|      0|            error(loc, "can only be used with an explicit location", "tileImageEXT", "");
 8236|      0|    }
 8237|       |
 8238|  14.2k|    if (qualifier.storage == EvqHitAttr && qualifier.hasLayout()) {
  ------------------
  |  Branch (8238:9): [True: 0, False: 14.2k]
  |  Branch (8238:44): [True: 0, False: 0]
  ------------------
 8239|      0|        error(loc, "cannot apply layout qualifiers to hitAttributeNV variable", "hitAttributeNV", "");
 8240|      0|    }
 8241|  14.2k|    if (qualifier.hasBank()) {
  ------------------
  |  Branch (8241:9): [True: 0, False: 14.2k]
  ------------------
 8242|      0|        if (!qualifier.isPushConstant())
  ------------------
  |  Branch (8242:13): [True: 0, False: 0]
  ------------------
 8243|      0|            error(loc, "can only be used with push_constant", "bank", "");
 8244|      0|    }
 8245|  14.2k|    if (qualifier.hasMemberOffset()) {
  ------------------
  |  Branch (8245:9): [True: 0, False: 14.2k]
  ------------------
 8246|      0|        if (!qualifier.isPushConstant())
  ------------------
  |  Branch (8246:13): [True: 0, False: 0]
  ------------------
 8247|      0|            error(loc, "can only be used with push_constant", "member_offset", "");
 8248|      0|    }
 8249|       |
 8250|  14.2k|    if (qualifier.layoutDescriptorStride != TQualifier::layoutDescriptorStrideEnd &&
  ------------------
  |  Branch (8250:9): [True: 0, False: 14.2k]
  ------------------
 8251|      0|        !qualifier.layoutDescriptorHeap)
  ------------------
  |  Branch (8251:9): [True: 0, False: 0]
  ------------------
 8252|      0|        error(loc, "must specify 'descriptor_heap' to use 'descriptor_stride'", "descriptor_stride", "");
 8253|  14.2k|    if (qualifier.layoutHeapOffset != 0 && !qualifier.layoutDescriptorHeap &&
  ------------------
  |  Branch (8253:9): [True: 0, False: 14.2k]
  |  Branch (8253:44): [True: 0, False: 0]
  ------------------
 8254|      0|        qualifier.storage != EvqSamplerHeap && qualifier.storage != EvqResourceHeap)
  ------------------
  |  Branch (8254:9): [True: 0, False: 0]
  |  Branch (8254:48): [True: 0, False: 0]
  ------------------
 8255|      0|        error(loc, "must specify 'descriptor_heap' to use 'heap_offset'", "heap_offset", "");
 8256|  14.2k|}
_ZN7glslang13TParseContext20checkNoShaderLayoutsERKNS_10TSourceLocERKNS_17TShaderQualifiersE:
 8260|   156k|{
 8261|   156k|    const char* message = "can only apply to a standalone qualifier";
 8262|       |
 8263|   156k|    if (shaderQualifiers.geometry != ElgNone)
  ------------------
  |  Branch (8263:9): [True: 0, False: 156k]
  ------------------
 8264|      0|        error(loc, message, TQualifier::getGeometryString(shaderQualifiers.geometry), "");
 8265|   156k|    if (shaderQualifiers.spacing != EvsNone)
  ------------------
  |  Branch (8265:9): [True: 0, False: 156k]
  ------------------
 8266|      0|        error(loc, message, TQualifier::getVertexSpacingString(shaderQualifiers.spacing), "");
 8267|   156k|    if (shaderQualifiers.order != EvoNone)
  ------------------
  |  Branch (8267:9): [True: 0, False: 156k]
  ------------------
 8268|      0|        error(loc, message, TQualifier::getVertexOrderString(shaderQualifiers.order), "");
 8269|   156k|    if (shaderQualifiers.pointMode)
  ------------------
  |  Branch (8269:9): [True: 0, False: 156k]
  ------------------
 8270|      0|        error(loc, message, "point_mode", "");
 8271|   156k|    if (shaderQualifiers.invocations != TQualifier::layoutNotSet)
  ------------------
  |  Branch (8271:9): [True: 0, False: 156k]
  ------------------
 8272|      0|        error(loc, message, "invocations", "");
 8273|   627k|    for (int i = 0; i < 3; ++i) {
  ------------------
  |  Branch (8273:21): [True: 470k, False: 156k]
  ------------------
 8274|   470k|        if (shaderQualifiers.localSize[i] > 1)
  ------------------
  |  Branch (8274:13): [True: 0, False: 470k]
  ------------------
 8275|      0|            error(loc, message, "local_size", "");
 8276|   470k|        if (shaderQualifiers.localSizeSpecId[i] != TQualifier::layoutNotSet)
  ------------------
  |  Branch (8276:13): [True: 0, False: 470k]
  ------------------
 8277|      0|            error(loc, message, "local_size id", "");
 8278|   470k|    }
 8279|   156k|    if (shaderQualifiers.vertices != TQualifier::layoutNotSet) {
  ------------------
  |  Branch (8279:9): [True: 0, False: 156k]
  ------------------
 8280|      0|        if (language == EShLangGeometry || language == EShLangMesh)
  ------------------
  |  Branch (8280:13): [True: 0, False: 0]
  |  Branch (8280:44): [True: 0, False: 0]
  ------------------
 8281|      0|            error(loc, message, "max_vertices", "");
 8282|      0|        else if (language == EShLangTessControl)
  ------------------
  |  Branch (8282:18): [True: 0, False: 0]
  ------------------
 8283|      0|            error(loc, message, "vertices", "");
 8284|      0|        else
 8285|      0|            assert(0);
 8286|      0|    }
 8287|   156k|    if (shaderQualifiers.earlyFragmentTests)
  ------------------
  |  Branch (8287:9): [True: 0, False: 156k]
  ------------------
 8288|      0|        error(loc, message, "early_fragment_tests", "");
 8289|   156k|    if (shaderQualifiers.postDepthCoverage)
  ------------------
  |  Branch (8289:9): [True: 0, False: 156k]
  ------------------
 8290|      0|        error(loc, message, "post_depth_coverage", "");
 8291|   156k|    if (shaderQualifiers.nonCoherentColorAttachmentReadEXT)
  ------------------
  |  Branch (8291:9): [True: 0, False: 156k]
  ------------------
 8292|      0|        error(loc, message, "non_coherent_color_attachment_readEXT", "");
 8293|   156k|    if (shaderQualifiers.nonCoherentDepthAttachmentReadEXT)
  ------------------
  |  Branch (8293:9): [True: 0, False: 156k]
  ------------------
 8294|      0|        error(loc, message, "non_coherent_depth_attachment_readEXT", "");
 8295|   156k|    if (shaderQualifiers.nonCoherentStencilAttachmentReadEXT)
  ------------------
  |  Branch (8295:9): [True: 0, False: 156k]
  ------------------
 8296|      0|        error(loc, message, "non_coherent_stencil_attachment_readEXT", "");
 8297|   156k|    if (shaderQualifiers.primitives != TQualifier::layoutNotSet) {
  ------------------
  |  Branch (8297:9): [True: 0, False: 156k]
  ------------------
 8298|      0|        if (language == EShLangMesh)
  ------------------
  |  Branch (8298:13): [True: 0, False: 0]
  ------------------
 8299|      0|            error(loc, message, "max_primitives", "");
 8300|      0|        else
 8301|      0|            assert(0);
 8302|      0|    }
 8303|   156k|    if (shaderQualifiers.hasBlendEquation())
  ------------------
  |  Branch (8303:9): [True: 0, False: 156k]
  ------------------
 8304|      0|        error(loc, message, "blend equation", "");
 8305|   156k|    if (shaderQualifiers.numViews != TQualifier::layoutNotSet)
  ------------------
  |  Branch (8305:9): [True: 0, False: 156k]
  ------------------
 8306|      0|        error(loc, message, "num_views", "");
 8307|   156k|    if (shaderQualifiers.interlockOrdering != EioNone)
  ------------------
  |  Branch (8307:9): [True: 0, False: 156k]
  ------------------
 8308|      0|        error(loc, message, TQualifier::getInterlockOrderingString(shaderQualifiers.interlockOrdering), "");
 8309|   156k|    if (shaderQualifiers.layoutPrimitiveCulling)
  ------------------
  |  Branch (8309:9): [True: 0, False: 156k]
  ------------------
 8310|      0|        error(loc, "can only be applied as standalone", "primitive_culling", "");
 8311|       |
 8312|   156k|    if (shaderQualifiers.layoutNonCoherentTileAttachmentReadQCOM)
  ------------------
  |  Branch (8312:9): [True: 0, False: 156k]
  ------------------
 8313|      0|        error(loc, message, "non_coherent_attachment_readQCOM", "");
 8314|   156k|    if (shaderQualifiers.layoutTileShadingRateQCOM[0] >= 1)
  ------------------
  |  Branch (8314:9): [True: 0, False: 156k]
  ------------------
 8315|      0|        error(loc, message, "shading_rate_xQCOM", "");
 8316|   156k|    if (shaderQualifiers.layoutTileShadingRateQCOM[1] >= 1)
  ------------------
  |  Branch (8316:9): [True: 0, False: 156k]
  ------------------
 8317|      0|        error(loc, message, "shading_rate_yQCOM", "");
 8318|   156k|    if (shaderQualifiers.layoutTileShadingRateQCOM[2] >= 1)
  ------------------
  |  Branch (8318:9): [True: 0, False: 156k]
  ------------------
 8319|      0|        error(loc, message, "shading_rate_zQCOM", "");
 8320|   156k|}
_ZN7glslang13TParseContext9fixOffsetERKNS_10TSourceLocERNS_7TSymbolE:
 8324|  13.7k|{
 8325|  13.7k|    const TQualifier& qualifier = symbol.getType().getQualifier();
 8326|  13.7k|    if (symbol.getType().isAtomic()) {
  ------------------
  |  Branch (8326:9): [True: 0, False: 13.7k]
  ------------------
 8327|      0|        if (qualifier.hasBinding() && (int)qualifier.layoutBinding < resources.maxAtomicCounterBindings) {
  ------------------
  |  Branch (8327:13): [True: 0, False: 0]
  |  Branch (8327:39): [True: 0, False: 0]
  ------------------
 8328|       |
 8329|       |            // Set the offset
 8330|      0|            int offset;
 8331|      0|            if (qualifier.hasOffset())
  ------------------
  |  Branch (8331:17): [True: 0, False: 0]
  ------------------
 8332|      0|                offset = qualifier.layoutOffset;
 8333|      0|            else
 8334|      0|                offset = atomicUintOffsets[qualifier.layoutBinding];
 8335|       |
 8336|      0|            if (offset % 4 != 0)
  ------------------
  |  Branch (8336:17): [True: 0, False: 0]
  ------------------
 8337|      0|                error(loc, "atomic counters offset should align based on 4:", "offset", "%d", offset);
 8338|       |
 8339|      0|            symbol.getWritableType().getQualifier().layoutOffset = offset;
 8340|       |
 8341|       |            // Check for overlap
 8342|      0|            int numOffsets = 4;
 8343|      0|            if (symbol.getType().isArray()) {
  ------------------
  |  Branch (8343:17): [True: 0, False: 0]
  ------------------
 8344|      0|                if (symbol.getType().isSizedArray() && !symbol.getType().getArraySizes()->isInnerUnsized())
  ------------------
  |  Branch (8344:21): [True: 0, False: 0]
  |  Branch (8344:56): [True: 0, False: 0]
  ------------------
 8345|      0|                    numOffsets *= symbol.getType().getCumulativeArraySize();
 8346|      0|                else {
 8347|       |                    // "It is a compile-time error to declare an unsized array of atomic_uint."
 8348|      0|                    error(loc, "array must be explicitly sized", "atomic_uint", "");
 8349|      0|                }
 8350|      0|            }
 8351|      0|            int repeated = intermediate.addUsedOffsets(qualifier.layoutBinding, offset, numOffsets);
 8352|      0|            if (repeated >= 0)
  ------------------
  |  Branch (8352:17): [True: 0, False: 0]
  ------------------
 8353|      0|                error(loc, "atomic counters sharing the same offset:", "offset", "%d", repeated);
 8354|       |
 8355|       |            // Bump the default offset
 8356|      0|            atomicUintOffsets[qualifier.layoutBinding] = offset + numOffsets;
 8357|      0|        }
 8358|      0|    }
 8359|  13.7k|}
_ZN7glslang13TParseContext12findFunctionERKNS_10TSourceLocERKNS_9TFunctionERb:
 8367|  2.18k|{
 8368|  2.18k|    if (symbolTable.isFunctionNameVariable(call.getName())) {
  ------------------
  |  Branch (8368:9): [True: 0, False: 2.18k]
  ------------------
 8369|      0|        error(loc, "can't use function syntax on variable", call.getName().c_str(), "");
 8370|      0|        return nullptr;
 8371|      0|    }
 8372|       |
 8373|  2.18k|    const TFunction* function = nullptr;
 8374|       |
 8375|       |    // debugPrintfEXT has var args and is in the symbol table as "debugPrintfEXT()",
 8376|       |    // mangled to "debugPrintfEXT("
 8377|  2.18k|    if (call.getName() == "debugPrintfEXT") {
  ------------------
  |  Branch (8377:9): [True: 0, False: 2.18k]
  ------------------
 8378|      0|        TSymbol* symbol = symbolTable.find("debugPrintfEXT(", &builtIn);
 8379|      0|        if (symbol)
  ------------------
  |  Branch (8379:13): [True: 0, False: 0]
  ------------------
 8380|      0|            return symbol->getAsFunction();
 8381|      0|    }
 8382|       |    // abortEXT has usage (var args) as similar as debugPrintfEXT.
 8383|  2.18k|    if (call.getName() == "abortEXT") {
  ------------------
  |  Branch (8383:9): [True: 0, False: 2.18k]
  ------------------
 8384|      0|        TSymbol* symbol = symbolTable.find("abortEXT(", &builtIn);
 8385|      0|        if (symbol)
  ------------------
  |  Branch (8385:13): [True: 0, False: 0]
  ------------------
 8386|      0|            return symbol->getAsFunction();
 8387|      0|    }
 8388|       |
 8389|       |    // coopMatPerElementNV is variadic. There is some function signature error
 8390|       |    // checking in handleCoopMat2FunctionCall.
 8391|  2.18k|    if (call.getName() == "coopMatPerElementNV") {
  ------------------
  |  Branch (8391:9): [True: 0, False: 2.18k]
  ------------------
 8392|      0|        TSymbol* symbol = symbolTable.find("coopMatPerElementNV(", &builtIn);
 8393|      0|        if (symbol)
  ------------------
  |  Branch (8393:13): [True: 0, False: 0]
  ------------------
 8394|      0|            return symbol->getAsFunction();
 8395|      0|    }
 8396|       |
 8397|  2.18k|    if (call.getName() == "saturatedConvertEXT") {
  ------------------
  |  Branch (8397:9): [True: 0, False: 2.18k]
  ------------------
 8398|      0|        TSymbol* symbol = symbolTable.find("saturatedConvertEXT(", &builtIn);
 8399|      0|        if (symbol)
  ------------------
  |  Branch (8399:13): [True: 0, False: 0]
  ------------------
 8400|      0|            return symbol->getAsFunction();
 8401|      0|    }
 8402|       |
 8403|  2.18k|    bool explicitTypesEnabled = extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (8403:33): [True: 0, False: 2.18k]
  ------------------
 8404|  2.18k|                                extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8) ||
  ------------------
  |  Branch (8404:33): [True: 0, False: 2.18k]
  ------------------
 8405|  2.18k|                                extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16) ||
  ------------------
  |  Branch (8405:33): [True: 0, False: 2.18k]
  ------------------
 8406|  2.18k|                                extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int32) ||
  ------------------
  |  Branch (8406:33): [True: 0, False: 2.18k]
  ------------------
 8407|  2.18k|                                extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int64) ||
  ------------------
  |  Branch (8407:33): [True: 0, False: 2.18k]
  ------------------
 8408|  2.18k|                                extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16) ||
  ------------------
  |  Branch (8408:33): [True: 0, False: 2.18k]
  ------------------
 8409|  2.18k|                                extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32) ||
  ------------------
  |  Branch (8409:33): [True: 0, False: 2.18k]
  ------------------
 8410|  2.18k|                                extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64);
  ------------------
  |  Branch (8410:33): [True: 0, False: 2.18k]
  ------------------
 8411|       |
 8412|  2.18k|    if (isEsProfile())
  ------------------
  |  Branch (8412:9): [True: 0, False: 2.18k]
  ------------------
 8413|      0|        function = (explicitTypesEnabled && version >= 310)
  ------------------
  |  Branch (8413:21): [True: 0, False: 0]
  |  Branch (8413:45): [True: 0, False: 0]
  ------------------
 8414|      0|                   ? findFunctionExplicitTypes(loc, call, builtIn)
 8415|      0|                   : ((extensionTurnedOn(E_GL_EXT_shader_implicit_conversions) && version >= 310)
  ------------------
  |  Branch (8415:24): [True: 0, False: 0]
  |  Branch (8415:83): [True: 0, False: 0]
  ------------------
 8416|      0|                      ? findFunction120(loc, call, builtIn)
 8417|      0|                      : findFunctionExact(loc, call, builtIn));
 8418|  2.18k|    else if (version < 120)
  ------------------
  |  Branch (8418:14): [True: 0, False: 2.18k]
  ------------------
 8419|      0|        function = findFunctionExact(loc, call, builtIn);
 8420|  2.18k|    else if (version < 400) {
  ------------------
  |  Branch (8420:14): [True: 0, False: 2.18k]
  ------------------
 8421|      0|        bool needfindFunction400 = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64)
  ------------------
  |  Branch (8421:36): [True: 0, False: 0]
  ------------------
 8422|      0|                                  || extensionTurnedOn(E_GL_ARB_gpu_shader5)
  ------------------
  |  Branch (8422:38): [True: 0, False: 0]
  ------------------
 8423|      0|                                  || extensionTurnedOn(E_GL_NV_gpu_shader5);
  ------------------
  |  Branch (8423:38): [True: 0, False: 0]
  ------------------
 8424|      0|        function = needfindFunction400 ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn);
  ------------------
  |  Branch (8424:20): [True: 0, False: 0]
  ------------------
 8425|      0|    }
 8426|  2.18k|    else if (explicitTypesEnabled)
  ------------------
  |  Branch (8426:14): [True: 0, False: 2.18k]
  ------------------
 8427|      0|        function = findFunctionExplicitTypes(loc, call, builtIn);
 8428|  2.18k|    else
 8429|  2.18k|        function = findFunction400(loc, call, builtIn);
 8430|       |
 8431|  2.18k|    return function;
 8432|  2.18k|}
_ZN7glslang13TParseContext15findFunction400ERKNS_10TSourceLocERKNS_9TFunctionERb:
 8557|  2.18k|{
 8558|       |    // first, look for an exact match
 8559|  2.18k|    TSymbol* symbol = symbolTable.find(call.getMangledName(), &builtIn);
 8560|  2.18k|    if (symbol)
  ------------------
  |  Branch (8560:9): [True: 1.99k, False: 192]
  ------------------
 8561|  1.99k|        return symbol->getAsFunction();
 8562|       |
 8563|       |    // no exact match, use the generic selector, parameterized by the GLSL rules
 8564|       |
 8565|       |    // create list of candidates to send
 8566|    192|    TVector<const TFunction*> candidateList;
 8567|    192|    symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
 8568|       |
 8569|       |    // can 'from' convert to 'to'?
 8570|    192|    const auto convertible = [this,builtIn](const TType& from, const TType& to, TOperator op, int param) -> bool {
 8571|    192|        if (from == to)
 8572|    192|            return true;
 8573|    192|        if (from.coopMatParameterOK(to))
 8574|    192|            return true;
 8575|    192|        if (from.tensorParameterOK(to))
 8576|    192|            return true;
 8577|    192|        if (from.getBasicType() == EbtFunction && to.getBasicType() == EbtFunction)
 8578|    192|            return true;
 8579|    192|        if (from.coopVecParameterOK(to))
 8580|    192|            return true;
 8581|       |        // Allow a sized array to be passed through an unsized array parameter, for coopMatLoad/Store functions
 8582|    192|        if (builtIn && from.isArray() && to.isUnsizedArray()) {
 8583|    192|            TType fromElementType(from, 0);
 8584|    192|            TType toElementType(to, 0);
 8585|       |            // Load/store tensor functions allow any element type for the pointer
 8586|    192|            if ((op == EOpCooperativeMatrixLoadTensorNV || op == EOpCooperativeMatrixStoreTensorNV) &&
 8587|    192|                param == 1) {
 8588|    192|                return true;
 8589|    192|            }
 8590|    192|            if (fromElementType == toElementType)
 8591|    192|                return true;
 8592|    192|        }
 8593|    192|        if (TType::vectorAndLongVectorMatch(from, to))
 8594|    192|            return true;
 8595|    192|        if (from.isArray() || to.isArray() || ! from.sameElementShape(to))
 8596|    192|            return false;
 8597|    192|        if (from.isCoopMat() && to.isCoopMat())
 8598|    192|            return from.sameCoopMatBaseType(to);
 8599|    192|        if (from.isCoopVecNV() && to.isCoopVecNV())
 8600|    192|            return from.sameCoopVecBaseType(to);
 8601|    192|        if (from.isLongVector() && to.isLongVector())
 8602|    192|            return from.sameLongVectorBaseType(to);
 8603|    192|        if (from.isTensorARM() && to.isTensorARM())
 8604|    192|            return from.sameTensorBaseTypeARM(to);
 8605|    192|        return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType());
 8606|    192|    };
 8607|       |
 8608|       |    // Is 'to2' a better conversion than 'to1'?
 8609|       |    // Ties should not be considered as better.
 8610|       |    // Assumes 'convertible' already said true.
 8611|    192|    const auto better = [&](const TType& from, const TType& to1, const TType& to2) -> bool {
 8612|       |        // 1. exact match
 8613|    192|        bool to2Matches = from == to2 || (from.isLongVector() && to2.getBasicType() == EbtLongVector);
 8614|    192|        bool to1Matches = from == to1 || (from.isLongVector() && to1.getBasicType() == EbtLongVector);
 8615|    192|        if (to2Matches)
 8616|    192|            return !to1Matches;
 8617|    192|        if (to1Matches)
 8618|    192|            return false;
 8619|       |
 8620|    192|        if (extensionTurnedOn(E_GL_NV_gpu_shader5)) {
 8621|       |            // This map refers to the conversion table mentioned under the 
 8622|       |            // section "Modify Section 6.1, Function Definitions, p. 63" in NV_gpu_shader5 spec
 8623|    192|            const static std::map<int, std::vector<int>> conversionTable = {
 8624|    192|                {EbtInt8,   {EbtInt, EbtInt64}},
 8625|    192|                {EbtInt16,  {EbtInt, EbtInt64}},
 8626|    192|                {EbtInt,    {EbtInt64}},
 8627|    192|                {EbtUint8,  {EbtUint, EbtUint64}}, 
 8628|    192|                {EbtUint16, {EbtUint, EbtUint64}}, 
 8629|    192|                {EbtUint,   {EbtUint64}},
 8630|    192|            };
 8631|    192|            auto source = conversionTable.find(from.getBasicType());
 8632|    192|            if (source != conversionTable.end()) {
 8633|    192|                for (auto destination : source->second) {
 8634|    192|                    if (to2.getBasicType() == destination &&
 8635|    192|                        to1.getBasicType() != destination) // to2 is better then to1
 8636|    192|                        return true;
 8637|    192|                    else if (to1.getBasicType() == destination &&
 8638|    192|                             to2.getBasicType() != destination) // This means to1 is better then to2
 8639|    192|                        return false;
 8640|    192|                }
 8641|    192|            }
 8642|    192|        }
 8643|       |        // 2. float -> double is better
 8644|    192|        if (from.getBasicType() == EbtFloat) {
 8645|    192|            if (to2.getBasicType() == EbtDouble && to1.getBasicType() != EbtDouble)
 8646|    192|                return true;
 8647|    192|        }
 8648|       |
 8649|       |        // 3. -> float is better than -> double
 8650|    192|        return to2.getBasicType() == EbtFloat && to1.getBasicType() == EbtDouble;
 8651|    192|    };
 8652|       |
 8653|       |    // for ambiguity reporting
 8654|    192|    bool tie = false;
 8655|       |
 8656|       |    // send to the generic selector
 8657|    192|    const TFunction* bestMatch = selectFunction(candidateList, call, convertible, better, tie);
 8658|       |
 8659|    192|    if (bestMatch == nullptr)
  ------------------
  |  Branch (8659:9): [True: 192, False: 0]
  ------------------
 8660|    192|        error(loc, "no matching overloaded function found", call.getName().c_str(), "");
 8661|      0|    else if (tie)
  ------------------
  |  Branch (8661:14): [True: 0, False: 0]
  ------------------
 8662|      0|        error(loc, "ambiguous best function under implicit type conversion", call.getName().c_str(), "");
 8663|       |
 8664|    192|    return bestMatch;
 8665|  2.18k|}
_ZN7glslang13TParseContext19declareTypeDefaultsERKNS_10TSourceLocERKNS_11TPublicTypeE:
 8843|     17|{
 8844|     17|    if (publicType.basicType == EbtAtomicUint && publicType.qualifier.hasBinding()) {
  ------------------
  |  Branch (8844:9): [True: 0, False: 17]
  |  Branch (8844:50): [True: 0, False: 0]
  ------------------
 8845|      0|        if (publicType.qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) {
  ------------------
  |  Branch (8845:13): [True: 0, False: 0]
  ------------------
 8846|      0|            error(loc, "atomic_uint binding is too large", "binding", "");
 8847|      0|            return;
 8848|      0|        }
 8849|      0|        if (publicType.qualifier.hasOffset())
  ------------------
  |  Branch (8849:13): [True: 0, False: 0]
  ------------------
 8850|      0|            atomicUintOffsets[publicType.qualifier.layoutBinding] = publicType.qualifier.layoutOffset;
 8851|      0|        return;
 8852|      0|    }
 8853|       |
 8854|     17|    if (publicType.arraySizes) {
  ------------------
  |  Branch (8854:9): [True: 0, False: 17]
  ------------------
 8855|      0|        error(loc, "expect an array name", "", "");
 8856|      0|    }
 8857|       |
 8858|     17|    if (publicType.qualifier.hasLayout() && !publicType.qualifier.hasBufferReference())
  ------------------
  |  Branch (8858:9): [True: 0, False: 17]
  |  Branch (8858:45): [True: 0, False: 0]
  ------------------
 8859|      0|        warn(loc, "useless application of layout qualifier", "layout", "");
 8860|     17|}
_ZN7glslang13TParseContext19typeParametersCheckERKNS_10TSourceLocERKNS_11TPublicTypeE:
 8863|  1.57M|{
 8864|  1.57M|    if (parsingBuiltins)
  ------------------
  |  Branch (8864:9): [True: 1.57M, False: 1.59k]
  ------------------
 8865|  1.57M|        return;
 8866|  1.59k|    if (publicType.isCoopmatKHR()) {
  ------------------
  |  Branch (8866:9): [True: 0, False: 1.59k]
  ------------------
 8867|      0|        if (publicType.typeParameters == nullptr) {
  ------------------
  |  Branch (8867:13): [True: 0, False: 0]
  ------------------
 8868|      0|            error(loc, "coopmat missing type parameters", "", "");
 8869|      0|            return;
 8870|      0|        }
 8871|      0|        switch (publicType.typeParameters->basicType) {
 8872|      0|        case EbtFloat:
  ------------------
  |  Branch (8872:9): [True: 0, False: 0]
  ------------------
 8873|      0|        case EbtFloat16:
  ------------------
  |  Branch (8873:9): [True: 0, False: 0]
  ------------------
 8874|      0|        case EbtBFloat16:
  ------------------
  |  Branch (8874:9): [True: 0, False: 0]
  ------------------
 8875|      0|        case EbtFloatE5M2:
  ------------------
  |  Branch (8875:9): [True: 0, False: 0]
  ------------------
 8876|      0|        case EbtFloatE4M3:
  ------------------
  |  Branch (8876:9): [True: 0, False: 0]
  ------------------
 8877|      0|        case EbtInt:
  ------------------
  |  Branch (8877:9): [True: 0, False: 0]
  ------------------
 8878|      0|        case EbtInt8:
  ------------------
  |  Branch (8878:9): [True: 0, False: 0]
  ------------------
 8879|      0|        case EbtInt16:
  ------------------
  |  Branch (8879:9): [True: 0, False: 0]
  ------------------
 8880|      0|        case EbtUint:
  ------------------
  |  Branch (8880:9): [True: 0, False: 0]
  ------------------
 8881|      0|        case EbtUint8:
  ------------------
  |  Branch (8881:9): [True: 0, False: 0]
  ------------------
 8882|      0|        case EbtUint16:
  ------------------
  |  Branch (8882:9): [True: 0, False: 0]
  ------------------
 8883|      0|        case EbtSpirvType:
  ------------------
  |  Branch (8883:9): [True: 0, False: 0]
  ------------------
 8884|      0|            break;
 8885|      0|        default:
  ------------------
  |  Branch (8885:9): [True: 0, False: 0]
  ------------------
 8886|      0|            error(loc, "coopmat invalid basic type", TType::getBasicString(publicType.typeParameters->basicType), "");
 8887|      0|            break;
 8888|      0|        }
 8889|      0|        if (publicType.typeParameters->arraySizes->getNumDims() != 4) {
  ------------------
  |  Branch (8889:13): [True: 0, False: 0]
  ------------------
 8890|      0|            error(loc, "coopmat incorrect number of type parameters", "", "");
 8891|      0|            return;
 8892|      0|        }
 8893|      0|        int use = publicType.typeParameters->arraySizes->getDimSize(3);
 8894|      0|        if (use < 0 || use > 2) {
  ------------------
  |  Branch (8894:13): [True: 0, False: 0]
  |  Branch (8894:24): [True: 0, False: 0]
  ------------------
 8895|      0|            error(loc, "coopmat invalid matrix Use", "", "");
 8896|      0|            return;
 8897|      0|        }
 8898|      0|    }
 8899|  1.59k|    if (publicType.isTensorLayoutNV()) {
  ------------------
  |  Branch (8899:9): [True: 0, False: 1.59k]
  ------------------
 8900|      0|        if (publicType.typeParameters == nullptr) {
  ------------------
  |  Branch (8900:13): [True: 0, False: 0]
  ------------------
 8901|      0|            error(loc, "tensorLayout missing type parameters", "", "");
 8902|      0|            return;
 8903|      0|        }
 8904|      0|        if (publicType.typeParameters->arraySizes->getNumDims() > 2) {
  ------------------
  |  Branch (8904:13): [True: 0, False: 0]
  ------------------
 8905|      0|            error(loc, "tensorLayout incorrect number of type parameters", "", "");
 8906|      0|            return;
 8907|      0|        }
 8908|      0|        if (publicType.typeParameters && publicType.typeParameters->arraySizes->getNumDims() < 2) {
  ------------------
  |  Branch (8908:13): [True: 0, False: 0]
  |  Branch (8908:42): [True: 0, False: 0]
  ------------------
 8909|      0|            while (publicType.typeParameters->arraySizes->getNumDims() < 2) {
  ------------------
  |  Branch (8909:20): [True: 0, False: 0]
  ------------------
 8910|      0|                publicType.typeParameters->arraySizes->addInnerSize(0);
 8911|      0|            }
 8912|      0|        }
 8913|      0|    }
 8914|  1.59k|    if (publicType.isTensorViewNV()) {
  ------------------
  |  Branch (8914:9): [True: 0, False: 1.59k]
  ------------------
 8915|      0|        if (publicType.typeParameters == nullptr) {
  ------------------
  |  Branch (8915:13): [True: 0, False: 0]
  ------------------
 8916|      0|            error(loc, "tensorView missing type parameters", "", "");
 8917|      0|            return;
 8918|      0|        }
 8919|      0|        if (publicType.typeParameters->arraySizes->getNumDims() < 1 ||
  ------------------
  |  Branch (8919:13): [True: 0, False: 0]
  ------------------
 8920|      0|            publicType.typeParameters->arraySizes->getNumDims() > 7) {
  ------------------
  |  Branch (8920:13): [True: 0, False: 0]
  ------------------
 8921|      0|            error(loc, "tensorView incorrect number of type parameters", "", "");
 8922|      0|            return;
 8923|      0|        }
 8924|      0|        if (publicType.typeParameters && publicType.typeParameters->arraySizes->getNumDims() < 7) {
  ------------------
  |  Branch (8924:13): [True: 0, False: 0]
  |  Branch (8924:42): [True: 0, False: 0]
  ------------------
 8925|      0|            uint32_t numDims = publicType.typeParameters->arraySizes->getNumDims();
 8926|      0|            while (numDims < 7) {
  ------------------
  |  Branch (8926:20): [True: 0, False: 0]
  ------------------
 8927|      0|                uint32_t dim = (numDims == 1) ? 0 : (numDims - 2);
  ------------------
  |  Branch (8927:32): [True: 0, False: 0]
  ------------------
 8928|      0|                publicType.typeParameters->arraySizes->addInnerSize(dim);
 8929|      0|                numDims++;
 8930|      0|            }
 8931|      0|        }
 8932|      0|    }
 8933|  1.59k|    if (publicType.isTensorARM()) {
  ------------------
  |  Branch (8933:9): [True: 0, False: 1.59k]
  ------------------
 8934|      0|        if (publicType.typeParameters == nullptr) {
  ------------------
  |  Branch (8934:13): [True: 0, False: 0]
  ------------------
 8935|      0|            error(loc, "tensor type is missing type parameters", "", "");
 8936|      0|            return;
 8937|      0|        }
 8938|      0|        if (publicType.typeParameters->arraySizes == nullptr) {
  ------------------
  |  Branch (8938:13): [True: 0, False: 0]
  ------------------
 8939|      0|            error(loc, "tensor type is missing rank information", "", "");
 8940|      0|            return;
 8941|      0|        }
 8942|      0|        if (publicType.typeParameters->arraySizes->getNumDims() != 1) {
  ------------------
  |  Branch (8942:13): [True: 0, False: 0]
  ------------------
 8943|      0|            error(loc, "tensor type requires exactly 1 rank specifier", "", "");
 8944|      0|            return;
 8945|      0|        }
 8946|      0|        if (publicType.typeParameters->arraySizes->getDimSize(0) < 1) {
  ------------------
  |  Branch (8946:13): [True: 0, False: 0]
  ------------------
 8947|      0|            error(loc, "tensor rank must be greater than or equal to 1", "", "");
 8948|      0|            return;
 8949|      0|        }
 8950|      0|    }
 8951|  1.59k|    if (publicType.isLongVector() && !isValidLongVectorElseError(loc, publicType)) {
  ------------------
  |  Branch (8951:9): [True: 0, False: 1.59k]
  |  Branch (8951:38): [True: 0, False: 0]
  ------------------
 8952|      0|        return;
 8953|      0|    }
 8954|  1.59k|}
_ZN7glslang13TParseContext15declareVariableERKNS_10TSourceLocERNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS_11TPublicTypeEPNS_11TArraySizesEPNS_12TIntermTypedE:
 9322|  13.7k|{
 9323|       |    // Make a fresh type that combines the characteristics from the individual
 9324|       |    // identifier syntax and the declaration-type syntax.
 9325|  13.7k|    TType type(publicType);
 9326|  13.7k|    type.transferArraySizes(arraySizes);
 9327|  13.7k|    type.copyArrayInnerSizes(publicType.arraySizes);
 9328|  13.7k|    arrayOfArrayVersionCheck(loc, type.getArraySizes());
 9329|       |
 9330|  13.7k|    if (initializer) {
  ------------------
  |  Branch (9330:9): [True: 4.39k, False: 9.34k]
  ------------------
 9331|  4.39k|        if (type.getBasicType() == EbtRayQuery) {
  ------------------
  |  Branch (9331:13): [True: 0, False: 4.39k]
  ------------------
 9332|      0|            error(loc, "ray queries can only be initialized by using the rayQueryInitializeEXT intrinsic:", "=", identifier.c_str());
 9333|  4.39k|        } else if ((type.getBasicType() == EbtHitObjectNV) || (type.getBasicType() == EbtHitObjectEXT)) {
  ------------------
  |  Branch (9333:20): [True: 0, False: 4.39k]
  |  Branch (9333:63): [True: 0, False: 4.39k]
  ------------------
 9334|      0|            error(loc, "hit objects cannot be initialized using initializers", "=", identifier.c_str());
 9335|      0|        }
 9336|       |
 9337|  4.39k|    }
 9338|       |
 9339|  13.7k|    if (type.isCoopMatKHR()) {
  ------------------
  |  Branch (9339:9): [True: 0, False: 13.7k]
  ------------------
 9340|      0|        intermediate.setUseVulkanMemoryModel();
 9341|      0|        intermediate.setUseStorageBuffer();
 9342|       |
 9343|      0|        if (!publicType.typeParameters || !publicType.typeParameters->arraySizes ||
  ------------------
  |  Branch (9343:13): [True: 0, False: 0]
  |  Branch (9343:43): [True: 0, False: 0]
  ------------------
 9344|      0|            publicType.typeParameters->arraySizes->getNumDims() != 4) {
  ------------------
  |  Branch (9344:13): [True: 0, False: 0]
  ------------------
 9345|      0|            error(loc, "unexpected number type parameters", identifier.c_str(), "");
 9346|      0|        }
 9347|      0|        if (publicType.typeParameters) {
  ------------------
  |  Branch (9347:13): [True: 0, False: 0]
  ------------------
 9348|      0|            if (!isTypeFloat(publicType.typeParameters->basicType) &&
  ------------------
  |  Branch (9348:17): [True: 0, False: 0]
  ------------------
 9349|      0|                !isTypeInt(publicType.typeParameters->basicType) && publicType.typeParameters->basicType != EbtSpirvType) {
  ------------------
  |  Branch (9349:17): [True: 0, False: 0]
  |  Branch (9349:69): [True: 0, False: 0]
  ------------------
 9350|      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(), "");
 9351|      0|            }
 9352|      0|        }
 9353|      0|    }
 9354|  13.7k|    else if (type.isCoopMatNV()) {
  ------------------
  |  Branch (9354:14): [True: 0, False: 13.7k]
  ------------------
 9355|      0|        intermediate.setUseVulkanMemoryModel();
 9356|      0|        intermediate.setUseStorageBuffer();
 9357|       |
 9358|      0|        if (!publicType.typeParameters || !publicType.typeParameters->arraySizes || publicType.typeParameters->arraySizes->getNumDims() != 4) {
  ------------------
  |  Branch (9358:13): [True: 0, False: 0]
  |  Branch (9358:43): [True: 0, False: 0]
  |  Branch (9358:85): [True: 0, False: 0]
  ------------------
 9359|      0|            error(loc, "expected four type parameters", identifier.c_str(), "");
 9360|      0|        } else {
 9361|      0|            if (isTypeFloat(publicType.basicType) &&
  ------------------
  |  Branch (9361:17): [True: 0, False: 0]
  ------------------
 9362|      0|                publicType.typeParameters->arraySizes->getDimSize(0) != 16 &&
  ------------------
  |  Branch (9362:17): [True: 0, False: 0]
  ------------------
 9363|      0|                publicType.typeParameters->arraySizes->getDimSize(0) != 32 &&
  ------------------
  |  Branch (9363:17): [True: 0, False: 0]
  ------------------
 9364|      0|                publicType.typeParameters->arraySizes->getDimSize(0) != 64) {
  ------------------
  |  Branch (9364:17): [True: 0, False: 0]
  ------------------
 9365|      0|                error(loc, "expected 16, 32, or 64 bits for first type parameter", identifier.c_str(), "");
 9366|      0|            }
 9367|      0|            if (isTypeInt(publicType.basicType) &&
  ------------------
  |  Branch (9367:17): [True: 0, False: 0]
  ------------------
 9368|      0|                publicType.typeParameters->arraySizes->getDimSize(0) != 8 &&
  ------------------
  |  Branch (9368:17): [True: 0, False: 0]
  ------------------
 9369|      0|                publicType.typeParameters->arraySizes->getDimSize(0) != 16 &&
  ------------------
  |  Branch (9369:17): [True: 0, False: 0]
  ------------------
 9370|      0|                publicType.typeParameters->arraySizes->getDimSize(0) != 32) {
  ------------------
  |  Branch (9370:17): [True: 0, False: 0]
  ------------------
 9371|      0|                error(loc, "expected 8, 16, or 32 bits for first type parameter", identifier.c_str(), "");
 9372|      0|            }
 9373|      0|        }
 9374|  13.7k|    } else if (type.isTensorLayoutNV()) {
  ------------------
  |  Branch (9374:16): [True: 0, False: 13.7k]
  ------------------
 9375|      0|        if (!publicType.typeParameters || publicType.typeParameters->arraySizes->getNumDims() > 2) {
  ------------------
  |  Branch (9375:13): [True: 0, False: 0]
  |  Branch (9375:43): [True: 0, False: 0]
  ------------------
 9376|      0|            error(loc, "expected 1-2 type parameters", identifier.c_str(), "");
 9377|      0|        }
 9378|  13.7k|    } else if (type.isTensorViewNV()) {
  ------------------
  |  Branch (9378:16): [True: 0, False: 13.7k]
  ------------------
 9379|      0|        if (!publicType.typeParameters || publicType.typeParameters->arraySizes->getNumDims() > 7) {
  ------------------
  |  Branch (9379:13): [True: 0, False: 0]
  |  Branch (9379:43): [True: 0, False: 0]
  ------------------
 9380|      0|            error(loc, "expected 1-7 type parameters", identifier.c_str(), "");
 9381|      0|        }
 9382|  13.7k|    } else if (type.isCoopVecNV()) {
  ------------------
  |  Branch (9382:16): [True: 0, False: 13.7k]
  ------------------
 9383|      0|        intermediate.setUseVulkanMemoryModel();
 9384|      0|        intermediate.setUseStorageBuffer();
 9385|       |
 9386|      0|        if (!publicType.typeParameters || !publicType.typeParameters->arraySizes || publicType.typeParameters->arraySizes->getNumDims() != 1) {
  ------------------
  |  Branch (9386:13): [True: 0, False: 0]
  |  Branch (9386:43): [True: 0, False: 0]
  |  Branch (9386:85): [True: 0, False: 0]
  ------------------
 9387|      0|            error(loc, "expected two type parameters", identifier.c_str(), "");
 9388|      0|        } else if (publicType.typeParameters->arraySizes->getDimNode(0) == nullptr && publicType.typeParameters->arraySizes->getDimSize(0) <= 0) {
  ------------------
  |  Branch (9388:20): [True: 0, False: 0]
  |  Branch (9388:87): [True: 0, False: 0]
  ------------------
 9389|      0|            error(loc, "expected positive number of components", identifier.c_str(), "");
 9390|      0|        }
 9391|  13.7k|    } else if (type.isLongVector()) {
  ------------------
  |  Branch (9391:16): [True: 0, False: 13.7k]
  ------------------
 9392|      0|        intermediate.setUseStorageBuffer();
 9393|       |
 9394|      0|        if (!publicType.typeParameters || !publicType.typeParameters->arraySizes || publicType.typeParameters->arraySizes->getNumDims() != 1) {
  ------------------
  |  Branch (9394:13): [True: 0, False: 0]
  |  Branch (9394:43): [True: 0, False: 0]
  |  Branch (9394:85): [True: 0, False: 0]
  ------------------
 9395|      0|            error(loc, "expected two type parameters", identifier.c_str(), "");
 9396|      0|        } else if (publicType.typeParameters->arraySizes->getDimNode(0) == nullptr && publicType.typeParameters->arraySizes->getDimSize(0) <= 0) {
  ------------------
  |  Branch (9396:20): [True: 0, False: 0]
  |  Branch (9396:87): [True: 0, False: 0]
  ------------------
 9397|      0|            error(loc, "expected positive number of components", identifier.c_str(), "");
 9398|      0|        }
 9399|  13.7k|    } else if (type.isTensorARM()) {
  ------------------
  |  Branch (9399:16): [True: 0, False: 13.7k]
  ------------------
 9400|      0|        intermediate.setUseStorageBuffer();
 9401|       |
 9402|      0|        if (!publicType.typeParameters || publicType.typeParameters->arraySizes->getNumDims() != 1) {
  ------------------
  |  Branch (9402:13): [True: 0, False: 0]
  |  Branch (9402:43): [True: 0, False: 0]
  ------------------
 9403|      0|            error(loc, "expected two type parameters", identifier.c_str(), "");
 9404|      0|        }
 9405|      0|        if (publicType.typeParameters) {
  ------------------
  |  Branch (9405:13): [True: 0, False: 0]
  ------------------
 9406|      0|            if (publicType.typeParameters->basicType != EbtBool &&
  ------------------
  |  Branch (9406:17): [True: 0, False: 0]
  ------------------
 9407|      0|                publicType.typeParameters->basicType != EbtInt8 &&
  ------------------
  |  Branch (9407:17): [True: 0, False: 0]
  ------------------
 9408|      0|                publicType.typeParameters->basicType != EbtInt16 &&
  ------------------
  |  Branch (9408:17): [True: 0, False: 0]
  ------------------
 9409|      0|                publicType.typeParameters->basicType != EbtInt &&
  ------------------
  |  Branch (9409:17): [True: 0, False: 0]
  ------------------
 9410|      0|                publicType.typeParameters->basicType != EbtInt64 &&
  ------------------
  |  Branch (9410:17): [True: 0, False: 0]
  ------------------
 9411|      0|                publicType.typeParameters->basicType != EbtUint8 &&
  ------------------
  |  Branch (9411:17): [True: 0, False: 0]
  ------------------
 9412|      0|                publicType.typeParameters->basicType != EbtUint16 &&
  ------------------
  |  Branch (9412:17): [True: 0, False: 0]
  ------------------
 9413|      0|                publicType.typeParameters->basicType != EbtUint &&
  ------------------
  |  Branch (9413:17): [True: 0, False: 0]
  ------------------
 9414|      0|                publicType.typeParameters->basicType != EbtUint64 &&
  ------------------
  |  Branch (9414:17): [True: 0, False: 0]
  ------------------
 9415|      0|                publicType.typeParameters->basicType != EbtFloat16 &&
  ------------------
  |  Branch (9415:17): [True: 0, False: 0]
  ------------------
 9416|      0|                publicType.typeParameters->basicType != EbtFloat &&
  ------------------
  |  Branch (9416:17): [True: 0, False: 0]
  ------------------
 9417|      0|                publicType.typeParameters->basicType != EbtDouble &&
  ------------------
  |  Branch (9417:17): [True: 0, False: 0]
  ------------------
 9418|      0|                publicType.typeParameters->basicType != EbtBFloat16 &&
  ------------------
  |  Branch (9418:17): [True: 0, False: 0]
  ------------------
 9419|      0|                publicType.typeParameters->basicType != EbtFloatE5M2 &&
  ------------------
  |  Branch (9419:17): [True: 0, False: 0]
  ------------------
 9420|      0|                publicType.typeParameters->basicType != EbtFloatE4M3) {
  ------------------
  |  Branch (9420:17): [True: 0, False: 0]
  ------------------
 9421|      0|                error(loc, "expected bool, integer or floating point type parameter", identifier.c_str(), "");
 9422|      0|            }
 9423|       |
 9424|      0|            if (publicType.typeParameters->basicType == EbtBFloat16) {
  ------------------
  |  Branch (9424:17): [True: 0, False: 0]
  ------------------
 9425|      0|                requireExtensions(loc, 1, &E_GL_ARM_tensors_bfloat16, "tensor with bfloat16_t type");
 9426|      0|            }
 9427|       |
 9428|      0|            if (publicType.typeParameters->basicType == EbtFloatE5M2) {
  ------------------
  |  Branch (9428:17): [True: 0, False: 0]
  ------------------
 9429|      0|                requireExtensions(loc, 1, &E_GL_ARM_tensors_float_e5m2, "tensor with floate5m2_t type");
 9430|      0|            }
 9431|       |
 9432|      0|            if (publicType.typeParameters->basicType == EbtFloatE4M3) {
  ------------------
  |  Branch (9432:17): [True: 0, False: 0]
  ------------------
 9433|      0|                requireExtensions(loc, 1, &E_GL_ARM_tensors_float_e4m3, "tensor with floate4m3_t type");
 9434|      0|            }
 9435|      0|        }
 9436|  13.7k|    } else {
 9437|  13.7k|        if (publicType.typeParameters && publicType.typeParameters->arraySizes->getNumDims() != 0) {
  ------------------
  |  Branch (9437:13): [True: 0, False: 13.7k]
  |  Branch (9437:42): [True: 0, False: 0]
  ------------------
 9438|      0|            error(loc, "unexpected type parameters", identifier.c_str(), "");
 9439|      0|        }
 9440|  13.7k|    }
 9441|       |
 9442|  13.7k|    if (voidErrorCheck(loc, identifier, type.getBasicType()))
  ------------------
  |  Branch (9442:9): [True: 0, False: 13.7k]
  ------------------
 9443|      0|        return nullptr;
 9444|       |
 9445|  13.7k|    if (initializer)
  ------------------
  |  Branch (9445:9): [True: 4.39k, False: 9.34k]
  ------------------
 9446|  4.39k|        rValueErrorCheck(loc, "initializer", initializer);
 9447|  9.34k|    else
 9448|  9.34k|        nonInitConstCheck(loc, identifier, type);
 9449|       |
 9450|  13.7k|    samplerCheck(loc, type, identifier, initializer);
 9451|  13.7k|    transparentOpaqueCheck(loc, type, identifier);
 9452|  13.7k|    atomicUintCheck(loc, type, identifier);
 9453|  13.7k|    accStructCheck(loc, type, identifier);
 9454|  13.7k|    hitObjectNVCheck(loc, type, identifier);
 9455|  13.7k|    hitObjectEXTCheck(loc, type, identifier);
 9456|  13.7k|    checkAndResizeMeshViewDim(loc, type, /*isBlockMember*/ false);
 9457|  13.7k|    if (type.getQualifier().storage == EvqConst && type.containsReference()) {
  ------------------
  |  Branch (9457:9): [True: 4.15k, False: 9.58k]
  |  Branch (9457:52): [True: 0, False: 4.15k]
  ------------------
 9458|      0|        error(loc, "variables with reference type can't have qualifier 'const'", "qualifier", "");
 9459|      0|    }
 9460|       |
 9461|  13.7k|    if (type.getQualifier().storage != EvqUniform && type.getQualifier().storage != EvqBuffer) {
  ------------------
  |  Branch (9461:9): [True: 13.3k, False: 399]
  |  Branch (9461:54): [True: 13.3k, False: 0]
  ------------------
 9462|  13.3k|        if (type.contains16BitFloat())
  ------------------
  |  Branch (9462:13): [True: 0, False: 13.3k]
  ------------------
 9463|      0|            requireFloat16Arithmetic(loc, "qualifier", "float16 types can only be in uniform block or buffer storage");
 9464|  13.3k|        if (type.contains16BitInt())
  ------------------
  |  Branch (9464:13): [True: 0, False: 13.3k]
  ------------------
 9465|      0|            requireInt16Arithmetic(loc, "qualifier", "(u)int16 types can only be in uniform block or buffer storage");
 9466|  13.3k|        if (type.contains8BitInt())
  ------------------
  |  Branch (9466:13): [True: 0, False: 13.3k]
  ------------------
 9467|      0|            requireInt8Arithmetic(loc, "qualifier", "(u)int8 types can only be in uniform block or buffer storage");
 9468|  13.3k|    }
 9469|  13.7k|    if (type.getBasicType() == EbtBFloat16 &&
  ------------------
  |  Branch (9469:9): [True: 0, False: 13.7k]
  ------------------
 9470|      0|        (type.getQualifier().storage == EvqVaryingIn || type.getQualifier().storage == EvqVaryingOut))
  ------------------
  |  Branch (9470:10): [True: 0, False: 0]
  |  Branch (9470:57): [True: 0, False: 0]
  ------------------
 9471|      0|        error(loc, "qualifier", "bfloat16 types not allowed as input/output", "");
 9472|       |
 9473|  13.7k|    if ((type.getBasicType() == EbtFloatE5M2 || type.getBasicType() == EbtFloatE4M3) &&
  ------------------
  |  Branch (9473:10): [True: 0, False: 13.7k]
  |  Branch (9473:49): [True: 0, False: 13.7k]
  ------------------
 9474|      0|        (type.getQualifier().storage == EvqVaryingIn || type.getQualifier().storage == EvqVaryingOut))
  ------------------
  |  Branch (9474:10): [True: 0, False: 0]
  |  Branch (9474:57): [True: 0, False: 0]
  ------------------
 9475|      0|        error(loc, "qualifier", "fp8 types not allowed as input/output", "");
 9476|       |
 9477|  13.7k|    if (type.getQualifier().storage == EvqtaskPayloadSharedEXT)
  ------------------
  |  Branch (9477:9): [True: 0, False: 13.7k]
  ------------------
 9478|      0|        intermediate.addTaskPayloadEXTCount();
 9479|  13.7k|    if (type.getQualifier().storage == EvqShared && type.containsCoopMat())
  ------------------
  |  Branch (9479:9): [True: 0, False: 13.7k]
  |  Branch (9479:53): [True: 0, False: 0]
  ------------------
 9480|      0|        error(loc, "qualifier", "Cooperative matrix types must not be used in shared memory", "");
 9481|       |
 9482|  13.7k|    if (profile == EEsProfile) {
  ------------------
  |  Branch (9482:9): [True: 0, False: 13.7k]
  ------------------
 9483|      0|        if (type.getQualifier().isPipeInput() && type.getBasicType() == EbtStruct) {
  ------------------
  |  Branch (9483:13): [True: 0, False: 0]
  |  Branch (9483:50): [True: 0, False: 0]
  ------------------
 9484|      0|            if (type.getQualifier().isArrayedIo(language)) {
  ------------------
  |  Branch (9484:17): [True: 0, False: 0]
  ------------------
 9485|      0|                TType perVertexType(type, 0);
 9486|      0|                if (perVertexType.containsArray() && perVertexType.containsBuiltIn() == false) {
  ------------------
  |  Branch (9486:21): [True: 0, False: 0]
  |  Branch (9486:54): [True: 0, False: 0]
  ------------------
 9487|      0|                    error(loc, "A per vertex structure containing an array is not allowed as input in ES", type.getTypeName().c_str(), "");
 9488|      0|                }
 9489|      0|            }
 9490|      0|            else if (type.containsArray() && type.containsBuiltIn() == false) {
  ------------------
  |  Branch (9490:22): [True: 0, False: 0]
  |  Branch (9490:46): [True: 0, False: 0]
  ------------------
 9491|      0|                error(loc, "A structure containing an array is not allowed as input in ES", type.getTypeName().c_str(), "");
 9492|      0|            }
 9493|      0|            if (type.containsStructure())
  ------------------
  |  Branch (9493:17): [True: 0, False: 0]
  ------------------
 9494|      0|                error(loc, "A structure containing an struct is not allowed as input in ES", type.getTypeName().c_str(), "");
 9495|      0|        }
 9496|      0|    }
 9497|       |
 9498|  13.7k|    if (identifier != "gl_FragCoord" && (publicType.shaderQualifiers.originUpperLeft || publicType.shaderQualifiers.pixelCenterInteger))
  ------------------
  |  Branch (9498:9): [True: 13.6k, False: 99]
  |  Branch (9498:42): [True: 0, False: 13.6k]
  |  Branch (9498:89): [True: 0, False: 13.6k]
  ------------------
 9499|      0|        error(loc, "can only apply origin_upper_left and pixel_center_origin to gl_FragCoord", "layout qualifier", "");
 9500|  13.7k|    if (identifier != "gl_FragDepth" && publicType.shaderQualifiers.getDepth() != EldNone)
  ------------------
  |  Branch (9500:9): [True: 13.6k, False: 99]
  |  Branch (9500:41): [True: 0, False: 13.6k]
  ------------------
 9501|      0|        error(loc, "can only apply depth layout to gl_FragDepth", "layout qualifier", "");
 9502|  13.7k|    if (identifier != "gl_FragStencilRefARB" && publicType.shaderQualifiers.getStencil() != ElsNone)
  ------------------
  |  Branch (9502:9): [True: 13.6k, False: 99]
  |  Branch (9502:49): [True: 0, False: 13.6k]
  ------------------
 9503|      0|        error(loc, "can only apply depth layout to gl_FragStencilRefARB", "layout qualifier", "");
 9504|       |
 9505|       |    // Check for redeclaration of built-ins and/or attempting to declare a reserved name
 9506|  13.7k|    TSymbol* symbol = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), publicType.shaderQualifiers);
 9507|  13.7k|    if (symbol == nullptr)
  ------------------
  |  Branch (9507:9): [True: 13.7k, False: 0]
  ------------------
 9508|  13.7k|        reservedErrorCheck(loc, identifier);
 9509|       |
 9510|  13.7k|    if (symbol == nullptr && spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) {
  ------------------
  |  Branch (9510:9): [True: 13.7k, False: 0]
  |  Branch (9510:30): [True: 13.7k, False: 0]
  |  Branch (9510:55): [True: 0, False: 13.7k]
  ------------------
 9511|      0|        bool remapped = vkRelaxedRemapUniformVariable(loc, identifier, publicType, arraySizes, initializer, type);
 9512|       |
 9513|      0|        if (remapped) {
  ------------------
  |  Branch (9513:13): [True: 0, False: 0]
  ------------------
 9514|      0|            return nullptr;
 9515|      0|        }
 9516|      0|    }
 9517|       |
 9518|  13.7k|    inheritGlobalDefaults(type.getQualifier());
 9519|       |
 9520|       |    // Declare the variable
 9521|  13.7k|    if (type.isArray()) {
  ------------------
  |  Branch (9521:9): [True: 503, False: 13.2k]
  ------------------
 9522|       |        // Check that implicit sizing is only where allowed.
 9523|    503|        arraySizesCheck(loc, type.getQualifier(), type.getArraySizes(), initializer, false);
 9524|       |
 9525|    503|        if (! arrayQualifierError(loc, type.getQualifier()) && ! arrayError(loc, type))
  ------------------
  |  Branch (9525:13): [True: 503, False: 0]
  |  Branch (9525:64): [True: 503, False: 0]
  ------------------
 9526|    503|            declareArray(loc, identifier, type, symbol);
 9527|       |
 9528|    503|        if (initializer) {
  ------------------
  |  Branch (9528:13): [True: 9, False: 494]
  ------------------
 9529|      9|            profileRequires(loc, ENoProfile, 120, E_GL_3DL_array_objects, "initializer");
 9530|      9|            profileRequires(loc, EEsProfile, 300, nullptr, "initializer");
 9531|      9|        }
 9532|  13.2k|    } else {
 9533|       |        // non-array case
 9534|  13.2k|        if (symbol == nullptr)
  ------------------
  |  Branch (9534:13): [True: 13.2k, False: 0]
  ------------------
 9535|  13.2k|            symbol = declareNonArray(loc, identifier, type);
 9536|      0|        else if (type != symbol->getType())
  ------------------
  |  Branch (9536:18): [True: 0, False: 0]
  ------------------
 9537|      0|            error(loc, "cannot change the type of", "redeclaration", symbol->getName().c_str());
 9538|  13.2k|    }
 9539|       |
 9540|  13.7k|    if (symbol == nullptr)
  ------------------
  |  Branch (9540:9): [True: 0, False: 13.7k]
  ------------------
 9541|      0|        return nullptr;
 9542|       |
 9543|       |    // Deal with initializer
 9544|  13.7k|    TIntermNode* initNode = nullptr;
 9545|  13.7k|    if (symbol != nullptr && initializer) {
  ------------------
  |  Branch (9545:9): [True: 13.7k, False: 0]
  |  Branch (9545:30): [True: 4.39k, False: 9.34k]
  ------------------
 9546|  4.39k|        TVariable* variable = symbol->getAsVariable();
 9547|  4.39k|        if (! variable) {
  ------------------
  |  Branch (9547:13): [True: 0, False: 4.39k]
  ------------------
 9548|      0|            error(loc, "initializer requires a variable, not a member", identifier.c_str(), "");
 9549|      0|            return nullptr;
 9550|      0|        }
 9551|  4.39k|        initNode = executeInitializer(loc, initializer, variable);
 9552|  4.39k|    }
 9553|       |
 9554|       |    // EXT_descriptor_heap
 9555|  13.7k|    if (!untypedHeapCheck(symbol, type, loc, identifier.c_str())) {
  ------------------
  |  Branch (9555:9): [True: 0, False: 13.7k]
  ------------------
 9556|      0|        return nullptr;
 9557|      0|    }
 9558|       |
 9559|       |    // look for errors in layout qualifier use
 9560|  13.7k|    layoutObjectCheck(loc, *symbol);
 9561|       |
 9562|       |    // fix up
 9563|  13.7k|    fixOffset(loc, *symbol);
 9564|       |
 9565|       |    // TODO: The decl AST is turned on based on debug info right now. We should expose it as an explicit option.
 9566|  13.7k|    if (intermediate.getDebugInfo()) {
  ------------------
  |  Branch (9566:9): [True: 0, False: 13.7k]
  ------------------
 9567|      0|        TVariable* variable = symbol->getAsVariable();
 9568|      0|        if (variable) {
  ------------------
  |  Branch (9568:13): [True: 0, False: 0]
  ------------------
 9569|      0|            auto decl = new TIntermVariableDecl(intermediate.addSymbol(*variable, loc), initNode);
 9570|      0|            decl->setLoc(loc);
 9571|      0|            return decl;
 9572|      0|        }
 9573|      0|        else {
 9574|       |            // We ignore builtins redeclarations
 9575|      0|            return nullptr;
 9576|      0|        }
 9577|      0|    }
 9578|  13.7k|    else {
 9579|  13.7k|        return initNode;
 9580|  13.7k|    }
 9581|  13.7k|}
_ZNK7glslang13TParseContext21inheritGlobalDefaultsERNS_10TQualifierE:
 9585|  13.7k|{
 9586|  13.7k|    if (dst.storage == EvqVaryingOut) {
  ------------------
  |  Branch (9586:9): [True: 580, False: 13.1k]
  ------------------
 9587|    580|        if (! dst.hasStream() && language == EShLangGeometry)
  ------------------
  |  Branch (9587:13): [True: 580, False: 0]
  |  Branch (9587:34): [True: 59, False: 521]
  ------------------
 9588|     59|            dst.layoutStream = globalOutputDefaults.layoutStream;
 9589|    580|        if (! dst.hasXfbBuffer())
  ------------------
  |  Branch (9589:13): [True: 580, False: 0]
  ------------------
 9590|    580|            dst.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer;
 9591|    580|    }
 9592|  13.7k|}
_ZN7glslang13TParseContext15declareNonArrayERKNS_10TSourceLocERKNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEERKNS_5TTypeE:
 9616|  13.2k|{
 9617|       |    // make a new variable
 9618|  13.2k|    TVariable* variable = new TVariable(&identifier, type);
 9619|       |
 9620|  13.2k|    ioArrayCheck(loc, type, identifier);
 9621|       |
 9622|       |    // add variable to symbol table
 9623|  13.2k|    if (symbolTable.insert(*variable)) {
  ------------------
  |  Branch (9623:9): [True: 13.2k, False: 0]
  ------------------
 9624|  13.2k|        if (symbolTable.atGlobalLevel())
  ------------------
  |  Branch (9624:13): [True: 13.0k, False: 237]
  ------------------
 9625|  13.0k|            trackLinkage(*variable);
 9626|  13.2k|        return variable;
 9627|  13.2k|    }
 9628|       |
 9629|      0|    error(loc, "redefinition", variable->getName().c_str(), "");
 9630|      0|    return nullptr;
 9631|  13.2k|}
_ZN7glslang13TParseContext18executeInitializerERKNS_10TSourceLocEPNS_12TIntermTypedEPNS_9TVariableE:
 9640|  4.39k|{
 9641|       |    // A null initializer is an aggregate that hasn't had an op assigned yet
 9642|       |    // (still EOpNull, no relation to nullInit), and has no children.
 9643|  4.39k|    bool nullInit = initializer->getAsAggregate() && initializer->getAsAggregate()->getOp() == EOpNull &&
  ------------------
  |  Branch (9643:21): [True: 6, False: 4.38k]
  |  Branch (9643:54): [True: 6, False: 0]
  ------------------
 9644|      6|        initializer->getAsAggregate()->getSequence().size() == 0;
  ------------------
  |  Branch (9644:9): [True: 0, False: 6]
  ------------------
 9645|       |
 9646|       |    //
 9647|       |    // Identifier must be of type constant, a global, or a temporary, and
 9648|       |    // starting at version 120, desktop allows uniforms to have initializers.
 9649|       |    //
 9650|  4.39k|    TStorageQualifier qualifier = variable->getType().getQualifier().storage;
 9651|  4.39k|    if (! (qualifier == EvqTemporary || qualifier == EvqGlobal || qualifier == EvqConst ||
  ------------------
  |  Branch (9651:12): [True: 237, False: 4.15k]
  |  Branch (9651:41): [True: 0, False: 4.15k]
  |  Branch (9651:67): [True: 4.15k, False: 0]
  ------------------
 9652|      0|           (qualifier == EvqUniform && !isEsProfile() && version >= 120))) {
  ------------------
  |  Branch (9652:13): [True: 0, False: 0]
  |  Branch (9652:40): [True: 0, False: 0]
  |  Branch (9652:58): [True: 0, False: 0]
  ------------------
 9653|      0|        if (qualifier == EvqShared) {
  ------------------
  |  Branch (9653:13): [True: 0, False: 0]
  ------------------
 9654|       |            // GL_EXT_null_initializer allows this for shared, if it's a null initializer
 9655|      0|            if (nullInit) {
  ------------------
  |  Branch (9655:17): [True: 0, False: 0]
  ------------------
 9656|      0|                const char* feature = "initialization with shared qualifier";
 9657|      0|                profileRequires(loc, EEsProfile, 0, E_GL_EXT_null_initializer, feature);
 9658|      0|                profileRequires(loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, feature);
 9659|      0|            } else {
 9660|      0|                error(loc, "initializer can only be a null initializer ('{}')", "shared", "");
 9661|      0|            }
 9662|      0|        } else {
 9663|      0|            error(loc, " cannot initialize this type of qualifier ",
 9664|      0|                  variable->getType().getStorageQualifierString(), "");
 9665|      0|            return nullptr;
 9666|      0|        }
 9667|      0|    }
 9668|       |
 9669|  4.39k|    if (nullInit) {
  ------------------
  |  Branch (9669:9): [True: 0, False: 4.39k]
  ------------------
 9670|       |        // only some types can be null initialized
 9671|      0|        if (variable->getType().containsUnsizedArray()) {
  ------------------
  |  Branch (9671:13): [True: 0, False: 0]
  ------------------
 9672|      0|            error(loc, "null initializers can't size unsized arrays", "{}", "");
 9673|      0|            return nullptr;
 9674|      0|        }
 9675|      0|        if (variable->getType().containsOpaque()) {
  ------------------
  |  Branch (9675:13): [True: 0, False: 0]
  ------------------
 9676|      0|            error(loc, "null initializers can't be used on opaque values", "{}", "");
 9677|      0|            return nullptr;
 9678|      0|        }
 9679|      0|        variable->getWritableType().getQualifier().setNullInit();
 9680|      0|        return nullptr;
 9681|      0|    }
 9682|       |
 9683|  4.39k|    arrayObjectCheck(loc, variable->getType(), "array initializer");
 9684|       |
 9685|       |    //
 9686|       |    // If the initializer was from braces { ... }, we convert the whole subtree to a
 9687|       |    // constructor-style subtree, allowing the rest of the code to operate
 9688|       |    // identically for both kinds of initializers.
 9689|       |    //
 9690|       |    // Type can't be deduced from the initializer list, so a skeletal type to
 9691|       |    // follow has to be passed in.  Constness and specialization-constness
 9692|       |    // should be deduced bottom up, not dictated by the skeletal type.
 9693|       |    //
 9694|  4.39k|    TType skeletalType;
 9695|  4.39k|    skeletalType.shallowCopy(variable->getType());
 9696|  4.39k|    skeletalType.getQualifier().makeTemporary();
 9697|  4.39k|    initializer = convertInitializerList(loc, skeletalType, initializer);
 9698|  4.39k|    if (! initializer) {
  ------------------
  |  Branch (9698:9): [True: 0, False: 4.39k]
  ------------------
 9699|       |        // error recovery; don't leave const without constant values
 9700|      0|        if (qualifier == EvqConst)
  ------------------
  |  Branch (9700:13): [True: 0, False: 0]
  ------------------
 9701|      0|            variable->getWritableType().getQualifier().makeTemporary();
 9702|      0|        return nullptr;
 9703|      0|    }
 9704|       |
 9705|       |    // Fix outer arrayness if variable is unsized, getting size from the initializer
 9706|  4.39k|    if (initializer->getType().isSizedArray() && variable->getType().isUnsizedArray())
  ------------------
  |  Branch (9706:9): [True: 9, False: 4.38k]
  |  Branch (9706:50): [True: 0, False: 9]
  ------------------
 9707|      0|        variable->getWritableType().changeOuterArraySize(initializer->getType().getOuterArraySize());
 9708|       |
 9709|       |    // Inner arrayness can also get set by an initializer
 9710|  4.39k|    if (initializer->getType().isArrayOfArrays() && variable->getType().isArrayOfArrays() &&
  ------------------
  |  Branch (9710:9): [True: 0, False: 4.39k]
  |  Branch (9710:53): [True: 0, False: 0]
  ------------------
 9711|      0|        initializer->getType().getArraySizes()->getNumDims() ==
  ------------------
  |  Branch (9711:9): [True: 0, False: 0]
  ------------------
 9712|      0|           variable->getType().getArraySizes()->getNumDims()) {
 9713|       |        // adopt unsized sizes from the initializer's sizes
 9714|      0|        for (int d = 1; d < variable->getType().getArraySizes()->getNumDims(); ++d) {
  ------------------
  |  Branch (9714:25): [True: 0, False: 0]
  ------------------
 9715|      0|            if (variable->getType().getArraySizes()->getDimSize(d) == UnsizedArraySize) {
  ------------------
  |  Branch (9715:17): [True: 0, False: 0]
  ------------------
 9716|      0|                variable->getWritableType().getArraySizes()->setDimSize(d,
 9717|      0|                    initializer->getType().getArraySizes()->getDimSize(d));
 9718|      0|            }
 9719|      0|        }
 9720|      0|    }
 9721|       |
 9722|       |    // Uniforms require a compile-time constant initializer
 9723|  4.39k|    if (qualifier == EvqUniform && ! initializer->getType().getQualifier().isFrontEndConstant()) {
  ------------------
  |  Branch (9723:9): [True: 0, False: 4.39k]
  |  Branch (9723:36): [True: 0, False: 0]
  ------------------
 9724|      0|        error(loc, "uniform initializers must be constant", "=", "'%s'",
 9725|      0|              variable->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str());
 9726|      0|        variable->getWritableType().getQualifier().makeTemporary();
 9727|      0|        return nullptr;
 9728|      0|    }
 9729|       |    // Global consts require a constant initializer (specialization constant is okay)
 9730|  4.39k|    if (qualifier == EvqConst && symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) {
  ------------------
  |  Branch (9730:9): [True: 4.15k, False: 237]
  |  Branch (9730:34): [True: 4.15k, False: 3]
  |  Branch (9730:65): [True: 0, False: 4.15k]
  ------------------
 9731|      0|        error(loc, "global const initializers must be constant", "=", "'%s'",
 9732|      0|              variable->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str());
 9733|      0|        variable->getWritableType().getQualifier().makeTemporary();
 9734|      0|        return nullptr;
 9735|      0|    }
 9736|       |
 9737|       |    // Const variables require a constant initializer, depending on version
 9738|  4.39k|    if (qualifier == EvqConst) {
  ------------------
  |  Branch (9738:9): [True: 4.15k, False: 237]
  ------------------
 9739|  4.15k|        if (! initializer->getType().getQualifier().isConstant()) {
  ------------------
  |  Branch (9739:13): [True: 0, False: 4.15k]
  ------------------
 9740|      0|            const char* initFeature = "non-constant initializer";
 9741|      0|            requireProfile(loc, ~EEsProfile, initFeature);
 9742|      0|            profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
 9743|      0|            variable->getWritableType().getQualifier().storage = EvqConstReadOnly;
 9744|      0|            qualifier = EvqConstReadOnly;
 9745|      0|        }
 9746|  4.15k|    } else {
 9747|       |        // Non-const global variables in ES need a const initializer.
 9748|       |        //
 9749|       |        // "In declarations of global variables with no storage qualifier or with a const
 9750|       |        // qualifier any initializer must be a constant expression."
 9751|    237|        if (symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) {
  ------------------
  |  Branch (9751:13): [True: 0, False: 237]
  |  Branch (9751:44): [True: 0, False: 0]
  ------------------
 9752|      0|            const char* initFeature =
 9753|      0|                "non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)";
 9754|      0|            if (isEsProfile()) {
  ------------------
  |  Branch (9754:17): [True: 0, False: 0]
  ------------------
 9755|      0|                if (relaxedErrors() && ! extensionTurnedOn(E_GL_EXT_shader_non_constant_global_initializers))
  ------------------
  |  Branch (9755:21): [True: 0, False: 0]
  |  Branch (9755:40): [True: 0, False: 0]
  ------------------
 9756|      0|                    warn(loc, "not allowed in this version", initFeature, "");
 9757|      0|                else
 9758|      0|                    profileRequires(loc, EEsProfile, 0, E_GL_EXT_shader_non_constant_global_initializers, initFeature);
 9759|      0|            }
 9760|      0|        }
 9761|    237|    }
 9762|       |
 9763|  4.39k|    if (qualifier == EvqConst || qualifier == EvqUniform) {
  ------------------
  |  Branch (9763:9): [True: 4.15k, False: 237]
  |  Branch (9763:34): [True: 0, False: 237]
  ------------------
 9764|       |        // Compile-time tagging of the variable with its constant value...
 9765|       |
 9766|  4.15k|        initializer = intermediate.addConversion(EOpAssign, variable->getType(), initializer);
 9767|  4.15k|        if (! initializer || ! initializer->getType().getQualifier().isConstant() ||
  ------------------
  |  Branch (9767:13): [True: 0, False: 4.15k]
  |  Branch (9767:30): [True: 0, False: 4.15k]
  ------------------
 9768|  4.15k|            variable->getType() != initializer->getType()) {
  ------------------
  |  Branch (9768:13): [True: 0, False: 4.15k]
  ------------------
 9769|      0|            error(loc, "non-matching or non-convertible constant type for const initializer",
 9770|      0|                  variable->getType().getStorageQualifierString(), "");
 9771|      0|            variable->getWritableType().getQualifier().makeTemporary();
 9772|      0|            return nullptr;
 9773|      0|        }
 9774|       |
 9775|       |        // We either have a folded constant in getAsConstantUnion, or we have to use
 9776|       |        // the initializer's subtree in the AST to represent the computation of a
 9777|       |        // specialization constant.
 9778|  4.15k|        assert(initializer->getAsConstantUnion() || initializer->getType().getQualifier().isSpecConstant());
 9779|  4.15k|        if (initializer->getAsConstantUnion())
  ------------------
  |  Branch (9779:13): [True: 4.15k, False: 0]
  ------------------
 9780|  4.15k|            variable->setConstArray(initializer->getAsConstantUnion()->getConstArray());
 9781|      0|        else {
 9782|       |            // It's a specialization constant.
 9783|      0|            variable->getWritableType().getQualifier().makeSpecConstant();
 9784|       |
 9785|       |            // Keep the subtree that computes the specialization constant with the variable.
 9786|       |            // Later, a symbol node will adopt the subtree from the variable.
 9787|      0|            variable->setConstSubtree(initializer);
 9788|      0|        }
 9789|  4.15k|    } else {
 9790|       |        // normal assigning of a value to a variable...
 9791|    237|        specializationCheck(loc, initializer->getType(), "initializer");
 9792|    237|        TIntermSymbol* intermSymbol = intermediate.addSymbol(*variable, loc);
 9793|    237|        TIntermTyped* initNode = intermediate.addAssign(EOpAssign, intermSymbol, initializer, loc);
 9794|    237|        if (! initNode)
  ------------------
  |  Branch (9794:13): [True: 0, False: 237]
  ------------------
 9795|      0|            assignError(loc, "=", intermSymbol->getCompleteString(intermediate.getEnhancedMsgs()), initializer->getCompleteString(intermediate.getEnhancedMsgs()));
 9796|       |
 9797|    237|        return initNode;
 9798|    237|    }
 9799|       |
 9800|  4.15k|    return nullptr;
 9801|  4.39k|}
_ZN7glslang13TParseContext22convertInitializerListERKNS_10TSourceLocERKNS_5TTypeEPNS_12TIntermTypedE:
 9814|  4.41k|{
 9815|       |    // Will operate recursively.  Once a subtree is found that is constructor style,
 9816|       |    // everything below it is already good: Only the "top part" of the initializer
 9817|       |    // can be an initializer list, where "top part" can extend for several (or all) levels.
 9818|       |
 9819|       |    // see if we have bottomed out in the tree within the initializer-list part
 9820|  4.41k|    TIntermAggregate* initList = initializer->getAsAggregate();
 9821|  4.41k|    if (! initList || initList->getOp() != EOpNull)
  ------------------
  |  Branch (9821:9): [True: 4.41k, False: 6]
  |  Branch (9821:23): [True: 0, False: 6]
  ------------------
 9822|  4.41k|        return initializer;
 9823|       |
 9824|       |    // Of the initializer-list set of nodes, need to process bottom up,
 9825|       |    // so recurse deep, then process on the way up.
 9826|       |
 9827|       |    // Go down the tree here...
 9828|      6|    if (type.isArray()) {
  ------------------
  |  Branch (9828:9): [True: 6, False: 0]
  ------------------
 9829|       |        // The type's array might be unsized, which could be okay, so base sizes on the size of the aggregate.
 9830|       |        // Later on, initializer execution code will deal with array size logic.
 9831|      6|        TType arrayType;
 9832|      6|        arrayType.shallowCopy(type);                     // sharing struct stuff is fine
 9833|      6|        arrayType.copyArraySizes(*type.getArraySizes());  // but get a fresh copy of the array information, to edit below
 9834|       |
 9835|       |        // edit array sizes to fill in unsized dimensions
 9836|      6|        arrayType.changeOuterArraySize((int)initList->getSequence().size());
 9837|      6|        TIntermTyped* firstInit = initList->getSequence()[0]->getAsTyped();
 9838|      6|        if (arrayType.isArrayOfArrays() && firstInit->getType().isArray() &&
  ------------------
  |  Branch (9838:13): [True: 0, False: 6]
  |  Branch (9838:44): [True: 0, False: 0]
  ------------------
 9839|      0|            arrayType.getArraySizes()->getNumDims() == firstInit->getType().getArraySizes()->getNumDims() + 1) {
  ------------------
  |  Branch (9839:13): [True: 0, False: 0]
  ------------------
 9840|      0|            for (int d = 1; d < arrayType.getArraySizes()->getNumDims(); ++d) {
  ------------------
  |  Branch (9840:29): [True: 0, False: 0]
  ------------------
 9841|      0|                if (arrayType.getArraySizes()->getDimSize(d) == UnsizedArraySize)
  ------------------
  |  Branch (9841:21): [True: 0, False: 0]
  ------------------
 9842|      0|                    arrayType.getArraySizes()->setDimSize(d, firstInit->getType().getArraySizes()->getDimSize(d - 1));
 9843|      0|            }
 9844|      0|        }
 9845|       |
 9846|      6|        TType elementType(arrayType, 0); // dereferenced type
 9847|     30|        for (size_t i = 0; i < initList->getSequence().size(); ++i) {
  ------------------
  |  Branch (9847:28): [True: 24, False: 6]
  ------------------
 9848|     24|            initList->getSequence()[i] = convertInitializerList(loc, elementType, initList->getSequence()[i]->getAsTyped());
 9849|     24|            if (initList->getSequence()[i] == nullptr)
  ------------------
  |  Branch (9849:17): [True: 0, False: 24]
  ------------------
 9850|      0|                return nullptr;
 9851|     24|        }
 9852|       |
 9853|      6|        return addConstructor(loc, initList, arrayType);
 9854|      6|    } else if (type.isStruct()) {
  ------------------
  |  Branch (9854:16): [True: 0, False: 0]
  ------------------
 9855|      0|        if (type.getStruct()->size() != initList->getSequence().size()) {
  ------------------
  |  Branch (9855:13): [True: 0, False: 0]
  ------------------
 9856|      0|            error(loc, "wrong number of structure members", "initializer list", "");
 9857|      0|            return nullptr;
 9858|      0|        }
 9859|      0|        for (size_t i = 0; i < type.getStruct()->size(); ++i) {
  ------------------
  |  Branch (9859:28): [True: 0, False: 0]
  ------------------
 9860|      0|            initList->getSequence()[i] = convertInitializerList(loc, *(*type.getStruct())[i].type, initList->getSequence()[i]->getAsTyped());
 9861|      0|            if (initList->getSequence()[i] == nullptr)
  ------------------
  |  Branch (9861:17): [True: 0, False: 0]
  ------------------
 9862|      0|                return nullptr;
 9863|      0|        }
 9864|      0|    } else if (type.isMatrix()) {
  ------------------
  |  Branch (9864:16): [True: 0, False: 0]
  ------------------
 9865|      0|        if (type.getMatrixCols() != (int)initList->getSequence().size()) {
  ------------------
  |  Branch (9865:13): [True: 0, False: 0]
  ------------------
 9866|      0|            error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str());
 9867|      0|            return nullptr;
 9868|      0|        }
 9869|      0|        TType vectorType(type, 0); // dereferenced type
 9870|      0|        for (int i = 0; i < type.getMatrixCols(); ++i) {
  ------------------
  |  Branch (9870:25): [True: 0, False: 0]
  ------------------
 9871|      0|            initList->getSequence()[i] = convertInitializerList(loc, vectorType, initList->getSequence()[i]->getAsTyped());
 9872|      0|            if (initList->getSequence()[i] == nullptr)
  ------------------
  |  Branch (9872:17): [True: 0, False: 0]
  ------------------
 9873|      0|                return nullptr;
 9874|      0|        }
 9875|      0|    } else if (type.isVector()) {
  ------------------
  |  Branch (9875:16): [True: 0, False: 0]
  ------------------
 9876|      0|        if (type.getVectorSize() != (int)initList->getSequence().size()) {
  ------------------
  |  Branch (9876:13): [True: 0, False: 0]
  ------------------
 9877|      0|            error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str());
 9878|      0|            return nullptr;
 9879|      0|        }
 9880|      0|        TBasicType destType = type.getBasicType();
 9881|      0|        for (int i = 0; i < type.getVectorSize(); ++i) {
  ------------------
  |  Branch (9881:25): [True: 0, False: 0]
  ------------------
 9882|      0|            TBasicType initType = initList->getSequence()[i]->getAsTyped()->getBasicType();
 9883|      0|            if (destType != initType && !intermediate.canImplicitlyPromote(initType, destType)) {
  ------------------
  |  Branch (9883:17): [True: 0, False: 0]
  |  Branch (9883:41): [True: 0, False: 0]
  ------------------
 9884|      0|                error(loc, "type mismatch in initializer list", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str());
 9885|      0|                return nullptr;
 9886|      0|            }
 9887|       |
 9888|      0|        }
 9889|      0|    } else {
 9890|      0|        error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str());
 9891|      0|        return nullptr;
 9892|      0|    }
 9893|       |
 9894|       |    // Now that the subtree is processed, process this node as if the
 9895|       |    // initializer list is a set of arguments to a constructor.
 9896|      0|    TIntermNode* emulatedConstructorArguments;
 9897|      0|    if (initList->getSequence().size() == 1)
  ------------------
  |  Branch (9897:9): [True: 0, False: 0]
  ------------------
 9898|      0|        emulatedConstructorArguments = initList->getSequence()[0];
 9899|      0|    else
 9900|      0|        emulatedConstructorArguments = initList;
 9901|      0|    return addConstructor(loc, emulatedConstructorArguments, type);
 9902|      6|}
_ZN7glslang13TParseContext14addConstructorERKNS_10TSourceLocEP11TIntermNodeRKNS_5TTypeE:
 9914|    810|{
 9915|    810|    if (node == nullptr || node->getAsTyped() == nullptr)
  ------------------
  |  Branch (9915:9): [True: 0, False: 810]
  |  Branch (9915:28): [True: 0, False: 810]
  ------------------
 9916|      0|        return nullptr;
 9917|    810|    rValueErrorCheck(loc, "constructor", node->getAsTyped());
 9918|       |
 9919|    810|    TIntermAggregate* aggrNode = node->getAsAggregate();
 9920|    810|    TOperator op = intermediate.mapTypeToConstructorOp(type);
 9921|       |
 9922|       |    // Combined texture-sampler constructors are completely semantic checked
 9923|       |    // in constructorTextureSamplerError()
 9924|    810|    if (op == EOpConstructTextureSampler) {
  ------------------
  |  Branch (9924:9): [True: 45, False: 765]
  ------------------
 9925|     45|        if (aggrNode != nullptr) {
  ------------------
  |  Branch (9925:13): [True: 45, False: 0]
  ------------------
 9926|     45|            if (aggrNode->getSequence()[1]->getAsTyped()->getType().getSampler().shadow) {
  ------------------
  |  Branch (9926:17): [True: 21, False: 24]
  ------------------
 9927|       |                // Transfer depth into the texture (SPIR-V image) type, as a hint
 9928|       |                // for tools to know this texture/image is a depth image.
 9929|     21|                aggrNode->getSequence()[0]->getAsTyped()->getWritableType().getSampler().shadow = true;
 9930|     21|            }
 9931|     45|            return intermediate.setAggregateOperator(aggrNode, op, type, loc);
 9932|     45|        }
 9933|     45|    }
 9934|       |
 9935|    765|    TTypeList::const_iterator memberTypes;
 9936|    765|    if (op == EOpConstructStruct)
  ------------------
  |  Branch (9936:9): [True: 0, False: 765]
  ------------------
 9937|      0|        memberTypes = type.getStruct()->begin();
 9938|       |
 9939|    765|    TType elementType;
 9940|    765|    if (type.isArray()) {
  ------------------
  |  Branch (9940:9): [True: 9, False: 756]
  ------------------
 9941|      9|        TType dereferenced(type, 0);
 9942|      9|        elementType.shallowCopy(dereferenced);
 9943|      9|    } else
 9944|    756|        elementType.shallowCopy(type);
 9945|       |
 9946|    765|    bool singleArg;
 9947|    765|    if (aggrNode) {
  ------------------
  |  Branch (9947:9): [True: 96, False: 669]
  ------------------
 9948|     96|        if (aggrNode->getOp() != EOpNull)
  ------------------
  |  Branch (9948:13): [True: 6, False: 90]
  ------------------
 9949|      6|            singleArg = true;
 9950|     90|        else
 9951|     90|            singleArg = false;
 9952|     96|    } else
 9953|    669|        singleArg = true;
 9954|       |
 9955|    765|    TIntermTyped *newNode;
 9956|    765|    if (singleArg) {
  ------------------
  |  Branch (9956:9): [True: 675, False: 90]
  ------------------
 9957|       |        // If structure constructor or array constructor is being called
 9958|       |        // for only one parameter inside the structure, we need to call constructAggregate function once.
 9959|    675|        if (type.isArray())
  ------------------
  |  Branch (9959:13): [True: 0, False: 675]
  ------------------
 9960|      0|            newNode = constructAggregate(node, elementType, 1, node->getLoc());
 9961|    675|        else if (op == EOpConstructStruct)
  ------------------
  |  Branch (9961:18): [True: 0, False: 675]
  ------------------
 9962|      0|            newNode = constructAggregate(node, *(*memberTypes).type, 1, node->getLoc());
 9963|    675|        else
 9964|    675|            newNode = constructBuiltIn(type, op, node->getAsTyped(), node->getLoc(), false);
 9965|       |
 9966|    675|        if (newNode && (type.isArray() || op == EOpConstructStruct))
  ------------------
  |  Branch (9966:13): [True: 675, False: 0]
  |  Branch (9966:25): [True: 0, False: 675]
  |  Branch (9966:43): [True: 0, False: 675]
  ------------------
 9967|      0|            newNode = intermediate.setAggregateOperator(newNode, EOpConstructStruct, type, loc);
 9968|       |
 9969|    675|        return newNode;
 9970|    675|    }
 9971|       |
 9972|       |    //
 9973|       |    // Handle list of arguments.
 9974|       |    //
 9975|     90|    TIntermSequence &sequenceVector = aggrNode->getSequence();    // Stores the information about the parameter to the constructor
 9976|       |    // if the structure constructor contains more than one parameter, then construct
 9977|       |    // each parameter
 9978|       |
 9979|     90|    int paramCount = 0;  // keeps track of the constructor parameter number being checked
 9980|       |
 9981|       |    // We don't know "top down" whether type is a specialization constant,
 9982|       |    // but a const becomes a specialization constant if any of its children are.
 9983|     90|    bool hasSpecConst = false;
 9984|     90|    bool isConstConstructor = true;
 9985|       |
 9986|       |    // for each parameter to the constructor call, check to see if the right type is passed or convert them
 9987|       |    // to the right type if possible (and allowed).
 9988|       |    // for structure constructors, just check if the right type is passed, no conversion is allowed.
 9989|     90|    for (TIntermSequence::iterator p = sequenceVector.begin();
 9990|    357|                                   p != sequenceVector.end(); p++, paramCount++) {
  ------------------
  |  Branch (9990:36): [True: 267, False: 90]
  ------------------
 9991|    267|        if (type.isArray())
  ------------------
  |  Branch (9991:13): [True: 36, False: 231]
  ------------------
 9992|     36|            newNode = constructAggregate(*p, elementType, paramCount+1, node->getLoc());
 9993|    231|        else if (op == EOpConstructStruct)
  ------------------
  |  Branch (9993:18): [True: 0, False: 231]
  ------------------
 9994|      0|            newNode = constructAggregate(*p, *(memberTypes[paramCount]).type, paramCount+1, node->getLoc());
 9995|    231|        else
 9996|    231|            newNode = constructBuiltIn(type, op, (*p)->getAsTyped(), node->getLoc(), true);
 9997|       |
 9998|    267|        if (newNode) {
  ------------------
  |  Branch (9998:13): [True: 267, False: 0]
  ------------------
 9999|    267|            *p = newNode;
10000|    267|            if (!newNode->getType().getQualifier().isConstant())
  ------------------
  |  Branch (10000:17): [True: 0, False: 267]
  ------------------
10001|      0|                isConstConstructor = false;
10002|    267|            if (newNode->getType().getQualifier().isSpecConstant())
  ------------------
  |  Branch (10002:17): [True: 0, False: 267]
  ------------------
10003|      0|                hasSpecConst = true;
10004|    267|        } else
10005|      0|            return nullptr;
10006|    267|    }
10007|       |
10008|     90|    TIntermTyped* ret_node = intermediate.setAggregateOperator(aggrNode, op, type, loc);
10009|       |
10010|     90|    const char *specConstantCompositeExt[] = { E_GL_EXT_spec_constant_composites };
10011|     90|    if (checkExtensionsRequested(loc, 1, specConstantCompositeExt, "spec constant aggregate constructor")) {
  ------------------
  |  Branch (10011:9): [True: 0, False: 90]
  ------------------
10012|      0|        if (isConstConstructor && hasSpecConst) {
  ------------------
  |  Branch (10012:13): [True: 0, False: 0]
  |  Branch (10012:35): [True: 0, False: 0]
  ------------------
10013|      0|            ret_node->getWritableType().getQualifier().makeSpecConstant();
10014|      0|        }
10015|      0|    }
10016|       |
10017|     90|    TIntermAggregate *agg_node = ret_node->getAsAggregate();
10018|     90|    if (agg_node && (agg_node->isVector() || agg_node->isArray() || agg_node->isMatrix()))
  ------------------
  |  Branch (10018:9): [True: 0, False: 90]
  |  Branch (10018:22): [True: 0, False: 0]
  |  Branch (10018:46): [True: 0, False: 0]
  |  Branch (10018:69): [True: 0, False: 0]
  ------------------
10019|      0|        agg_node->updatePrecision();
10020|       |
10021|     90|    return ret_node;
10022|     90|}
_ZN7glslang13TParseContext16constructBuiltInERKNS_5TTypeENS_9TOperatorEPNS_12TIntermTypedERKNS_10TSourceLocEb:
10033|    906|{
10034|       |    // If we are changing a matrix in both domain of basic type and to a non matrix,
10035|       |    // do the shape change first (by default, below, basic type is changed before shape).
10036|       |    // This avoids requesting a matrix of a new type that is going to be discarded anyway.
10037|       |    // TODO: This could be generalized to more type combinations, but that would require
10038|       |    // more extensive testing and full algorithm rework. For now, the need to do two changes makes
10039|       |    // the recursive call work, and avoids the most egregious case of creating integer matrices.
10040|    906|    if (node->getType().isMatrix() && (type.isScalar() || type.isVector()) &&
  ------------------
  |  Branch (10040:9): [True: 0, False: 906]
  |  Branch (10040:40): [True: 0, False: 0]
  |  Branch (10040:59): [True: 0, False: 0]
  ------------------
10041|      0|            type.isFloatingDomain() != node->getType().isFloatingDomain()) {
  ------------------
  |  Branch (10041:13): [True: 0, False: 0]
  ------------------
10042|      0|        TType transitionType(node->getBasicType(), glslang::EvqTemporary, type.getVectorSize(), 0, 0, node->isVector());
10043|      0|        TOperator transitionOp = intermediate.mapTypeToConstructorOp(transitionType);
10044|      0|        node = constructBuiltIn(transitionType, transitionOp, node, loc, false);
10045|      0|    }
10046|       |
10047|    906|    TIntermTyped* newNode;
10048|    906|    TOperator basicOp;
10049|       |
10050|       |    //
10051|       |    // First, convert types as needed.
10052|       |    //
10053|    906|    switch (op) {
10054|      9|    case EOpConstructVec2:
  ------------------
  |  Branch (10054:5): [True: 9, False: 897]
  ------------------
10055|      9|    case EOpConstructVec3:
  ------------------
  |  Branch (10055:5): [True: 0, False: 906]
  ------------------
10056|    225|    case EOpConstructVec4:
  ------------------
  |  Branch (10056:5): [True: 216, False: 690]
  ------------------
10057|    225|    case EOpConstructMat2x2:
  ------------------
  |  Branch (10057:5): [True: 0, False: 906]
  ------------------
10058|    225|    case EOpConstructMat2x3:
  ------------------
  |  Branch (10058:5): [True: 0, False: 906]
  ------------------
10059|    225|    case EOpConstructMat2x4:
  ------------------
  |  Branch (10059:5): [True: 0, False: 906]
  ------------------
10060|    225|    case EOpConstructMat3x2:
  ------------------
  |  Branch (10060:5): [True: 0, False: 906]
  ------------------
10061|    225|    case EOpConstructMat3x3:
  ------------------
  |  Branch (10061:5): [True: 0, False: 906]
  ------------------
10062|    225|    case EOpConstructMat3x4:
  ------------------
  |  Branch (10062:5): [True: 0, False: 906]
  ------------------
10063|    225|    case EOpConstructMat4x2:
  ------------------
  |  Branch (10063:5): [True: 0, False: 906]
  ------------------
10064|    225|    case EOpConstructMat4x3:
  ------------------
  |  Branch (10064:5): [True: 0, False: 906]
  ------------------
10065|    225|    case EOpConstructMat4x4:
  ------------------
  |  Branch (10065:5): [True: 0, False: 906]
  ------------------
10066|    225|    case EOpConstructFloat:
  ------------------
  |  Branch (10066:5): [True: 0, False: 906]
  ------------------
10067|    225|        basicOp = EOpConstructFloat;
10068|    225|        break;
10069|       |
10070|    144|    case EOpConstructIVec2:
  ------------------
  |  Branch (10070:5): [True: 144, False: 762]
  ------------------
10071|    402|    case EOpConstructIVec3:
  ------------------
  |  Branch (10071:5): [True: 258, False: 648]
  ------------------
10072|    408|    case EOpConstructIVec4:
  ------------------
  |  Branch (10072:5): [True: 6, False: 900]
  ------------------
10073|    606|    case EOpConstructInt:
  ------------------
  |  Branch (10073:5): [True: 198, False: 708]
  ------------------
10074|    606|        basicOp = EOpConstructInt;
10075|    606|        break;
10076|       |
10077|      0|    case EOpConstructUVec2:
  ------------------
  |  Branch (10077:5): [True: 0, False: 906]
  ------------------
10078|      0|        if (node->getType().getBasicType() == EbtReference) {
  ------------------
  |  Branch (10078:13): [True: 0, False: 0]
  ------------------
10079|      0|            requireExtensions(loc, 1, &E_GL_EXT_buffer_reference_uvec2, "reference conversion to uvec2");
10080|      0|            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUvec2, true, node,
10081|      0|                type);
10082|      0|            return newNode;
10083|      0|        } else if (node->getType().getBasicType() == EbtSampler) {
  ------------------
  |  Branch (10083:20): [True: 0, False: 0]
  ------------------
10084|      0|            requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "sampler conversion to uvec2");
10085|       |            // force the basic type of the constructor param to uvec2, otherwise spv builder will
10086|       |            // report some errors
10087|      0|            TIntermTyped* newSrcNode = intermediate.createConversion(EbtUint, node);
10088|      0|            newSrcNode->getAsTyped()->getWritableType().setVectorSize(2);
10089|       |
10090|      0|            TIntermTyped* newNode =
10091|      0|                intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConstructUVec2, false, newSrcNode, type);
10092|      0|            return newNode;
10093|      0|        }
10094|      0|        [[fallthrough]];
10095|     75|    case EOpConstructUVec3:
  ------------------
  |  Branch (10095:5): [True: 75, False: 831]
  ------------------
10096|     75|    case EOpConstructUVec4:
  ------------------
  |  Branch (10096:5): [True: 0, False: 906]
  ------------------
10097|     75|    case EOpConstructUint:
  ------------------
  |  Branch (10097:5): [True: 0, False: 906]
  ------------------
10098|     75|        basicOp = EOpConstructUint;
10099|     75|        break;
10100|       |
10101|      0|    case EOpConstructBVec2:
  ------------------
  |  Branch (10101:5): [True: 0, False: 906]
  ------------------
10102|      0|    case EOpConstructBVec3:
  ------------------
  |  Branch (10102:5): [True: 0, False: 906]
  ------------------
10103|      0|    case EOpConstructBVec4:
  ------------------
  |  Branch (10103:5): [True: 0, False: 906]
  ------------------
10104|      0|    case EOpConstructBool:
  ------------------
  |  Branch (10104:5): [True: 0, False: 906]
  ------------------
10105|      0|        basicOp = EOpConstructBool;
10106|      0|        break;
10107|      0|    case EOpConstructTextureSampler:
  ------------------
  |  Branch (10107:5): [True: 0, False: 906]
  ------------------
10108|      0|        if ((node->getType().getBasicType() == EbtUint || node->getType().getBasicType() == EbtInt) &&
  ------------------
  |  Branch (10108:14): [True: 0, False: 0]
  |  Branch (10108:59): [True: 0, False: 0]
  ------------------
10109|      0|            node->getType().getVectorSize() == 2) {
  ------------------
  |  Branch (10109:13): [True: 0, False: 0]
  ------------------
10110|      0|            requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "ivec2/uvec2 convert to texture handle");
10111|       |            // No matter ivec2 or uvec2, Set EOpPackUint2x32 just to generate an opBitcast op code
10112|      0|            TIntermTyped* newNode =
10113|      0|                intermediate.addBuiltInFunctionCall(node->getLoc(), EOpPackUint2x32, true, node, type);
10114|      0|            return newNode;
10115|      0|        }
10116|      0|        [[fallthrough]];
10117|      0|    case EOpConstructDVec2:
  ------------------
  |  Branch (10117:5): [True: 0, False: 906]
  ------------------
10118|      0|    case EOpConstructDVec3:
  ------------------
  |  Branch (10118:5): [True: 0, False: 906]
  ------------------
10119|      0|    case EOpConstructDVec4:
  ------------------
  |  Branch (10119:5): [True: 0, False: 906]
  ------------------
10120|      0|    case EOpConstructDMat2x2:
  ------------------
  |  Branch (10120:5): [True: 0, False: 906]
  ------------------
10121|      0|    case EOpConstructDMat2x3:
  ------------------
  |  Branch (10121:5): [True: 0, False: 906]
  ------------------
10122|      0|    case EOpConstructDMat2x4:
  ------------------
  |  Branch (10122:5): [True: 0, False: 906]
  ------------------
10123|      0|    case EOpConstructDMat3x2:
  ------------------
  |  Branch (10123:5): [True: 0, False: 906]
  ------------------
10124|      0|    case EOpConstructDMat3x3:
  ------------------
  |  Branch (10124:5): [True: 0, False: 906]
  ------------------
10125|      0|    case EOpConstructDMat3x4:
  ------------------
  |  Branch (10125:5): [True: 0, False: 906]
  ------------------
10126|      0|    case EOpConstructDMat4x2:
  ------------------
  |  Branch (10126:5): [True: 0, False: 906]
  ------------------
10127|      0|    case EOpConstructDMat4x3:
  ------------------
  |  Branch (10127:5): [True: 0, False: 906]
  ------------------
10128|      0|    case EOpConstructDMat4x4:
  ------------------
  |  Branch (10128:5): [True: 0, False: 906]
  ------------------
10129|      0|    case EOpConstructDouble:
  ------------------
  |  Branch (10129:5): [True: 0, False: 906]
  ------------------
10130|      0|        basicOp = EOpConstructDouble;
10131|      0|        break;
10132|       |
10133|      0|    case EOpConstructF16Vec2:
  ------------------
  |  Branch (10133:5): [True: 0, False: 906]
  ------------------
10134|      0|    case EOpConstructF16Vec3:
  ------------------
  |  Branch (10134:5): [True: 0, False: 906]
  ------------------
10135|      0|    case EOpConstructF16Vec4:
  ------------------
  |  Branch (10135:5): [True: 0, False: 906]
  ------------------
10136|      0|    case EOpConstructF16Mat2x2:
  ------------------
  |  Branch (10136:5): [True: 0, False: 906]
  ------------------
10137|      0|    case EOpConstructF16Mat2x3:
  ------------------
  |  Branch (10137:5): [True: 0, False: 906]
  ------------------
10138|      0|    case EOpConstructF16Mat2x4:
  ------------------
  |  Branch (10138:5): [True: 0, False: 906]
  ------------------
10139|      0|    case EOpConstructF16Mat3x2:
  ------------------
  |  Branch (10139:5): [True: 0, False: 906]
  ------------------
10140|      0|    case EOpConstructF16Mat3x3:
  ------------------
  |  Branch (10140:5): [True: 0, False: 906]
  ------------------
10141|      0|    case EOpConstructF16Mat3x4:
  ------------------
  |  Branch (10141:5): [True: 0, False: 906]
  ------------------
10142|      0|    case EOpConstructF16Mat4x2:
  ------------------
  |  Branch (10142:5): [True: 0, False: 906]
  ------------------
10143|      0|    case EOpConstructF16Mat4x3:
  ------------------
  |  Branch (10143:5): [True: 0, False: 906]
  ------------------
10144|      0|    case EOpConstructF16Mat4x4:
  ------------------
  |  Branch (10144:5): [True: 0, False: 906]
  ------------------
10145|      0|    case EOpConstructFloat16:
  ------------------
  |  Branch (10145:5): [True: 0, False: 906]
  ------------------
10146|      0|        basicOp = EOpConstructFloat16;
10147|       |        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
10148|       |        // so construct a 32-bit type and convert
10149|       |        // and do not generate any conversion if it is an identity conversion, i.e. float16_t(<float16_t> var)
10150|      0|        if (!intermediate.getArithemeticFloat16Enabled() && (node->getBasicType() != EbtFloat16)) {
  ------------------
  |  Branch (10150:13): [True: 0, False: 0]
  |  Branch (10150:61): [True: 0, False: 0]
  ------------------
10151|      0|            TType tempType(EbtFloat, EvqTemporary, type.getVectorSize());
10152|      0|            newNode = node;
10153|      0|            if (tempType != newNode->getType()) {
  ------------------
  |  Branch (10153:17): [True: 0, False: 0]
  ------------------
10154|      0|                TOperator aggregateOp;
10155|      0|                if (op == EOpConstructFloat16)
  ------------------
  |  Branch (10155:21): [True: 0, False: 0]
  ------------------
10156|      0|                    aggregateOp = EOpConstructFloat;
10157|      0|                else
10158|      0|                    aggregateOp = (TOperator)(EOpConstructVec2 + op - EOpConstructF16Vec2);
10159|      0|                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
10160|      0|            }
10161|      0|            newNode = intermediate.addConversion(EbtFloat16, newNode);
10162|      0|            return newNode;
10163|      0|        }
10164|      0|        break;
10165|       |
10166|      0|    case EOpConstructBF16Vec2:
  ------------------
  |  Branch (10166:5): [True: 0, False: 906]
  ------------------
10167|      0|    case EOpConstructBF16Vec3:
  ------------------
  |  Branch (10167:5): [True: 0, False: 906]
  ------------------
10168|      0|    case EOpConstructBF16Vec4:
  ------------------
  |  Branch (10168:5): [True: 0, False: 906]
  ------------------
10169|      0|    case EOpConstructBFloat16:
  ------------------
  |  Branch (10169:5): [True: 0, False: 906]
  ------------------
10170|      0|        basicOp = EOpConstructBFloat16;
10171|      0|        break;
10172|       |
10173|      0|    case EOpConstructFloatE5M2Vec2:
  ------------------
  |  Branch (10173:5): [True: 0, False: 906]
  ------------------
10174|      0|    case EOpConstructFloatE5M2Vec3:
  ------------------
  |  Branch (10174:5): [True: 0, False: 906]
  ------------------
10175|      0|    case EOpConstructFloatE5M2Vec4:
  ------------------
  |  Branch (10175:5): [True: 0, False: 906]
  ------------------
10176|      0|    case EOpConstructFloatE5M2:
  ------------------
  |  Branch (10176:5): [True: 0, False: 906]
  ------------------
10177|      0|        basicOp = EOpConstructFloatE5M2;
10178|      0|        break;
10179|       |
10180|      0|    case EOpConstructFloatE4M3Vec2:
  ------------------
  |  Branch (10180:5): [True: 0, False: 906]
  ------------------
10181|      0|    case EOpConstructFloatE4M3Vec3:
  ------------------
  |  Branch (10181:5): [True: 0, False: 906]
  ------------------
10182|      0|    case EOpConstructFloatE4M3Vec4:
  ------------------
  |  Branch (10182:5): [True: 0, False: 906]
  ------------------
10183|      0|    case EOpConstructFloatE4M3:
  ------------------
  |  Branch (10183:5): [True: 0, False: 906]
  ------------------
10184|      0|        basicOp = EOpConstructFloatE4M3;
10185|      0|        break;
10186|       |
10187|      0|    case EOpConstructI8Vec2:
  ------------------
  |  Branch (10187:5): [True: 0, False: 906]
  ------------------
10188|      0|    case EOpConstructI8Vec3:
  ------------------
  |  Branch (10188:5): [True: 0, False: 906]
  ------------------
10189|      0|    case EOpConstructI8Vec4:
  ------------------
  |  Branch (10189:5): [True: 0, False: 906]
  ------------------
10190|      0|    case EOpConstructInt8:
  ------------------
  |  Branch (10190:5): [True: 0, False: 906]
  ------------------
10191|      0|        basicOp = EOpConstructInt8;
10192|       |        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
10193|       |        // so construct a 32-bit type and convert
10194|       |        // and do not generate any conversion if it is an identity conversion, i.e. int8_t(<int8_t> var)
10195|      0|        if (!intermediate.getArithemeticInt8Enabled() && (node->getBasicType() != EbtInt8)) {
  ------------------
  |  Branch (10195:13): [True: 0, False: 0]
  |  Branch (10195:58): [True: 0, False: 0]
  ------------------
10196|      0|            TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
10197|      0|            newNode = node;
10198|      0|            if (tempType != newNode->getType()) {
  ------------------
  |  Branch (10198:17): [True: 0, False: 0]
  ------------------
10199|      0|                TOperator aggregateOp;
10200|      0|                if (op == EOpConstructInt8)
  ------------------
  |  Branch (10200:21): [True: 0, False: 0]
  ------------------
10201|      0|                    aggregateOp = EOpConstructInt;
10202|      0|                else
10203|      0|                    aggregateOp = (TOperator)(EOpConstructIVec2 + op - EOpConstructI8Vec2);
10204|      0|                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
10205|      0|            }
10206|      0|            newNode = intermediate.addConversion(EbtInt8, newNode);
10207|      0|            return newNode;
10208|      0|        }
10209|      0|        break;
10210|       |
10211|      0|    case EOpConstructU8Vec2:
  ------------------
  |  Branch (10211:5): [True: 0, False: 906]
  ------------------
10212|      0|    case EOpConstructU8Vec3:
  ------------------
  |  Branch (10212:5): [True: 0, False: 906]
  ------------------
10213|      0|    case EOpConstructU8Vec4:
  ------------------
  |  Branch (10213:5): [True: 0, False: 906]
  ------------------
10214|      0|    case EOpConstructUint8:
  ------------------
  |  Branch (10214:5): [True: 0, False: 906]
  ------------------
10215|      0|        basicOp = EOpConstructUint8;
10216|       |        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
10217|       |        // so construct a 32-bit type and convert
10218|       |        // and do not generate any conversion if it is an identity conversion, i.e. uint8_t(<uint8_t> var)
10219|      0|        if (!intermediate.getArithemeticInt8Enabled() && (node->getBasicType() != EbtUint8)) {
  ------------------
  |  Branch (10219:13): [True: 0, False: 0]
  |  Branch (10219:58): [True: 0, False: 0]
  ------------------
10220|      0|            TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
10221|      0|            newNode = node;
10222|      0|            if (tempType != newNode->getType()) {
  ------------------
  |  Branch (10222:17): [True: 0, False: 0]
  ------------------
10223|      0|                TOperator aggregateOp;
10224|      0|                if (op == EOpConstructUint8)
  ------------------
  |  Branch (10224:21): [True: 0, False: 0]
  ------------------
10225|      0|                    aggregateOp = EOpConstructUint;
10226|      0|                else
10227|      0|                    aggregateOp = (TOperator)(EOpConstructUVec2 + op - EOpConstructU8Vec2);
10228|      0|                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
10229|      0|            }
10230|      0|            newNode = intermediate.addConversion(EbtUint8, newNode);
10231|      0|            return newNode;
10232|      0|        }
10233|      0|        break;
10234|       |
10235|      0|    case EOpConstructI16Vec2:
  ------------------
  |  Branch (10235:5): [True: 0, False: 906]
  ------------------
10236|      0|    case EOpConstructI16Vec3:
  ------------------
  |  Branch (10236:5): [True: 0, False: 906]
  ------------------
10237|      0|    case EOpConstructI16Vec4:
  ------------------
  |  Branch (10237:5): [True: 0, False: 906]
  ------------------
10238|      0|    case EOpConstructInt16:
  ------------------
  |  Branch (10238:5): [True: 0, False: 906]
  ------------------
10239|      0|        basicOp = EOpConstructInt16;
10240|       |        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
10241|       |        // so construct a 32-bit type and convert
10242|       |        // and do not generate any conversion if it is an identity conversion, i.e. int16_t(<int16_t> var)
10243|      0|        if (!intermediate.getArithemeticInt16Enabled() && (node->getBasicType() != EbtInt16)) {
  ------------------
  |  Branch (10243:13): [True: 0, False: 0]
  |  Branch (10243:59): [True: 0, False: 0]
  ------------------
10244|      0|            TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
10245|      0|            newNode = node;
10246|      0|            if (tempType != newNode->getType()) {
  ------------------
  |  Branch (10246:17): [True: 0, False: 0]
  ------------------
10247|      0|                TOperator aggregateOp;
10248|      0|                if (op == EOpConstructInt16)
  ------------------
  |  Branch (10248:21): [True: 0, False: 0]
  ------------------
10249|      0|                    aggregateOp = EOpConstructInt;
10250|      0|                else
10251|      0|                    aggregateOp = (TOperator)(EOpConstructIVec2 + op - EOpConstructI16Vec2);
10252|      0|                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
10253|      0|            }
10254|      0|            newNode = intermediate.addConversion(EbtInt16, newNode);
10255|      0|            return newNode;
10256|      0|        }
10257|      0|        break;
10258|       |
10259|      0|    case EOpConstructU16Vec2:
  ------------------
  |  Branch (10259:5): [True: 0, False: 906]
  ------------------
10260|      0|    case EOpConstructU16Vec3:
  ------------------
  |  Branch (10260:5): [True: 0, False: 906]
  ------------------
10261|      0|    case EOpConstructU16Vec4:
  ------------------
  |  Branch (10261:5): [True: 0, False: 906]
  ------------------
10262|      0|    case EOpConstructUint16:
  ------------------
  |  Branch (10262:5): [True: 0, False: 906]
  ------------------
10263|      0|        basicOp = EOpConstructUint16;
10264|       |        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
10265|       |        // so construct a 32-bit type and convert
10266|       |        // and do not generate any conversion if it is an identity conversion, i.e. uint16_t(<uint16_t> var)
10267|      0|        if (!intermediate.getArithemeticInt16Enabled() && (node->getBasicType() != EbtUint16)) {
  ------------------
  |  Branch (10267:13): [True: 0, False: 0]
  |  Branch (10267:59): [True: 0, False: 0]
  ------------------
10268|      0|            TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
10269|      0|            newNode = node;
10270|      0|            if (tempType != newNode->getType()) {
  ------------------
  |  Branch (10270:17): [True: 0, False: 0]
  ------------------
10271|      0|                TOperator aggregateOp;
10272|      0|                if (op == EOpConstructUint16)
  ------------------
  |  Branch (10272:21): [True: 0, False: 0]
  ------------------
10273|      0|                    aggregateOp = EOpConstructUint;
10274|      0|                else
10275|      0|                    aggregateOp = (TOperator)(EOpConstructUVec2 + op - EOpConstructU16Vec2);
10276|      0|                newNode = intermediate.setAggregateOperator(newNode, aggregateOp, tempType, node->getLoc());
10277|      0|            }
10278|      0|            newNode = intermediate.addConversion(EbtUint16, newNode);
10279|      0|            return newNode;
10280|      0|        }
10281|      0|        break;
10282|       |
10283|      0|    case EOpConstructI64Vec2:
  ------------------
  |  Branch (10283:5): [True: 0, False: 906]
  ------------------
10284|      0|    case EOpConstructI64Vec3:
  ------------------
  |  Branch (10284:5): [True: 0, False: 906]
  ------------------
10285|      0|    case EOpConstructI64Vec4:
  ------------------
  |  Branch (10285:5): [True: 0, False: 906]
  ------------------
10286|      0|    case EOpConstructInt64:
  ------------------
  |  Branch (10286:5): [True: 0, False: 906]
  ------------------
10287|      0|        basicOp = EOpConstructInt64;
10288|      0|        break;
10289|       |
10290|      0|    case EOpConstructUint64:
  ------------------
  |  Branch (10290:5): [True: 0, False: 906]
  ------------------
10291|      0|        if (type.isScalar() && node->getType().isReference()) {
  ------------------
  |  Branch (10291:13): [True: 0, False: 0]
  |  Branch (10291:32): [True: 0, False: 0]
  ------------------
10292|      0|            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUint64, true, node, type);
10293|      0|            return newNode;
10294|      0|        }
10295|      0|        [[fallthrough]];
10296|      0|    case EOpConstructU64Vec2:
  ------------------
  |  Branch (10296:5): [True: 0, False: 906]
  ------------------
10297|      0|    case EOpConstructU64Vec3:
  ------------------
  |  Branch (10297:5): [True: 0, False: 906]
  ------------------
10298|      0|    case EOpConstructU64Vec4:
  ------------------
  |  Branch (10298:5): [True: 0, False: 906]
  ------------------
10299|      0|        basicOp = EOpConstructUint64;
10300|      0|        break;
10301|       |
10302|      0|    case EOpConstructNonuniform:
  ------------------
  |  Branch (10302:5): [True: 0, False: 906]
  ------------------
10303|       |        // Make a nonuniform copy of node
10304|      0|        newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpCopyObject, true, node, type);
10305|      0|        return newNode;
10306|       |
10307|      0|    case EOpConstructReference:
  ------------------
  |  Branch (10307:5): [True: 0, False: 906]
  ------------------
10308|       |        // construct reference from reference
10309|      0|        if (node->getType().isReference()) {
  ------------------
  |  Branch (10309:13): [True: 0, False: 0]
  ------------------
10310|      0|            newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConstructReference, true, node, type);
10311|      0|            return newNode;
10312|       |        // construct reference from uint64
10313|      0|        } else if (node->getType().isScalar() && node->getType().getBasicType() == EbtUint64) {
  ------------------
  |  Branch (10313:20): [True: 0, False: 0]
  |  Branch (10313:50): [True: 0, False: 0]
  ------------------
10314|      0|            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToPtr, true, node,
10315|      0|                type);
10316|      0|            return newNode;
10317|       |        // construct reference from uvec2
10318|      0|        } else if (node->getType().isVector() && node->getType().getBasicType() == EbtUint &&
  ------------------
  |  Branch (10318:20): [True: 0, False: 0]
  |  Branch (10318:50): [True: 0, False: 0]
  ------------------
10319|      0|                   node->getVectorSize() == 2) {
  ------------------
  |  Branch (10319:20): [True: 0, False: 0]
  ------------------
10320|      0|            requireExtensions(loc, 1, &E_GL_EXT_buffer_reference_uvec2, "uvec2 conversion to reference");
10321|      0|            TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUvec2ToPtr, true, node,
10322|      0|                type);
10323|      0|            return newNode;
10324|      0|        } else {
10325|      0|            return nullptr;
10326|      0|        }
10327|       |
10328|      0|    case EOpConstructCooperativeVectorNV:
  ------------------
  |  Branch (10328:5): [True: 0, False: 906]
  ------------------
10329|      0|        if (!node->getType().isCoopVecNV()) {
  ------------------
  |  Branch (10329:13): [True: 0, False: 0]
  ------------------
10330|      0|            if (type.getBasicType() != node->getType().getBasicType()) {
  ------------------
  |  Branch (10330:17): [True: 0, False: 0]
  ------------------
10331|      0|                node = intermediate.addConversion(type.getBasicType(), node);
10332|      0|                if (node == nullptr)
  ------------------
  |  Branch (10332:21): [True: 0, False: 0]
  ------------------
10333|      0|                    return nullptr;
10334|      0|            }
10335|      0|        }
10336|      0|        if (type.getBasicType() != node->getType().getBasicType()) {
  ------------------
  |  Branch (10336:13): [True: 0, False: 0]
  ------------------
10337|      0|            intermediate.buildConvertOp(type.getBasicType(), node->getType().getBasicType(), op);
10338|      0|            node = intermediate.addUnaryNode(op, node, node->getLoc(), type);
10339|      0|            return node;
10340|      0|        }
10341|      0|        if (subset) {
  ------------------
  |  Branch (10341:13): [True: 0, False: 0]
  ------------------
10342|      0|            return node;
10343|      0|        }
10344|       |
10345|      0|        node = intermediate.setAggregateOperator(node, op, type, node->getLoc());
10346|       |
10347|      0|        return node;
10348|       |
10349|      0|    case EOpConstructCooperativeMatrixNV:
  ------------------
  |  Branch (10349:5): [True: 0, False: 906]
  ------------------
10350|      0|    case EOpConstructCooperativeMatrixKHR:
  ------------------
  |  Branch (10350:5): [True: 0, False: 906]
  ------------------
10351|      0|        if (node->getType() == type) {
  ------------------
  |  Branch (10351:13): [True: 0, False: 0]
  ------------------
10352|      0|            return node;
10353|      0|        }
10354|      0|        if (!node->getType().isCoopMat()) {
  ------------------
  |  Branch (10354:13): [True: 0, False: 0]
  ------------------
10355|      0|            if (type.getBasicType() != node->getType().getBasicType()) {
  ------------------
  |  Branch (10355:17): [True: 0, False: 0]
  ------------------
10356|      0|                node = intermediate.addConversion(type.getBasicType(), node);
10357|      0|                if (node == nullptr)
  ------------------
  |  Branch (10357:21): [True: 0, False: 0]
  ------------------
10358|      0|                    return nullptr;
10359|      0|            }
10360|      0|            node = intermediate.setAggregateOperator(node, op, type, node->getLoc());
10361|      0|        } else if (type.sameCoopMatShape(node->getType()) && !type.sameCoopMatUse(node->getType()) &&
  ------------------
  |  Branch (10361:20): [True: 0, False: 0]
  |  Branch (10361:62): [True: 0, False: 0]
  ------------------
10362|      0|                   type.getBasicType() == node->getType().getBasicType()) {
  ------------------
  |  Branch (10362:20): [True: 0, False: 0]
  ------------------
10363|      0|            node = intermediate.setAggregateOperator(node, op, type, node->getLoc());
10364|      0|        } else {
10365|      0|            TOperator op = EOpConvNumeric;
10366|       |
10367|      0|            node = intermediate.addUnaryNode(op, node, node->getLoc(), type);
10368|       |            // If it's a (non-specialization) constant, it must be folded.
10369|      0|            if (node->getAsUnaryNode()->getOperand()->getAsConstantUnion())
  ------------------
  |  Branch (10369:17): [True: 0, False: 0]
  ------------------
10370|      0|                return node->getAsUnaryNode()->getOperand()->getAsConstantUnion()->fold(op, node->getType());
10371|      0|        }
10372|       |
10373|      0|        return node;
10374|       |
10375|      0|    case EOpConstructAccStruct:
  ------------------
  |  Branch (10375:5): [True: 0, False: 906]
  ------------------
10376|      0|        if ((node->getType().isScalar() && node->getType().getBasicType() == EbtUint64)) {
  ------------------
  |  Branch (10376:14): [True: 0, False: 0]
  |  Branch (10376:44): [True: 0, False: 0]
  ------------------
10377|       |            // construct acceleration structure from uint64
10378|      0|            requireExtensions(loc, Num_ray_tracing_EXTs, ray_tracing_EXTs, "uint64_t conversion to acclerationStructureEXT");
10379|      0|            return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToAccStruct, true, node,
10380|      0|                type);
10381|      0|        } else if (node->getType().isVector() && node->getType().getBasicType() == EbtUint && node->getVectorSize() == 2) {
  ------------------
  |  Branch (10381:20): [True: 0, False: 0]
  |  Branch (10381:50): [True: 0, False: 0]
  |  Branch (10381:95): [True: 0, False: 0]
  ------------------
10382|       |            // construct acceleration structure from uint64
10383|      0|            requireExtensions(loc, Num_ray_tracing_EXTs, ray_tracing_EXTs, "uvec2 conversion to accelerationStructureEXT");
10384|      0|            return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUvec2ToAccStruct, true, node,
10385|      0|                type);
10386|      0|        } else
10387|      0|            return nullptr;
10388|       |
10389|      0|    default:
  ------------------
  |  Branch (10389:5): [True: 0, False: 906]
  ------------------
10390|      0|        error(loc, "unsupported construction", "", "");
10391|       |
10392|      0|        return nullptr;
10393|    906|    }
10394|    906|    newNode = intermediate.addUnaryMath(basicOp, node, node->getLoc());
10395|    906|    if (newNode == nullptr) {
  ------------------
  |  Branch (10395:9): [True: 0, False: 906]
  ------------------
10396|      0|        error(loc, "can't convert", "constructor", "");
10397|      0|        return nullptr;
10398|      0|    }
10399|       |
10400|       |    //
10401|       |    // Now, if there still isn't an operation to do the construction, and we need one, add one.
10402|       |    //
10403|       |
10404|       |    // Otherwise, skip out early.
10405|    906|    if (subset || (newNode != node && newNode->getType() == type))
  ------------------
  |  Branch (10405:9): [True: 231, False: 675]
  |  Branch (10405:20): [True: 435, False: 240]
  |  Branch (10405:39): [True: 435, False: 0]
  ------------------
10406|    666|        return newNode;
10407|       |
10408|       |    // setAggregateOperator will insert a new node for the constructor, as needed.
10409|    240|    return intermediate.setAggregateOperator(newNode, op, type, loc);
10410|    906|}
_ZN7glslang13TParseContext12makeVariadicEPNS_9TFunctionERKNS_10TSourceLocE:
10412|    300|void TParseContext::makeVariadic(TFunction *F, const TSourceLoc &loc) {
10413|    300|    if (parsingBuiltins) {
  ------------------
  |  Branch (10413:9): [True: 300, False: 0]
  ------------------
10414|    300|        F->setVariadic();
10415|    300|    } else {
10416|      0|        error(loc, "variadic argument specifier is only available for builtins", "...", "");
10417|      0|    }
10418|    300|}
_ZN7glslang13TParseContext19getParamWithDefaultERKNS_11TPublicTypeEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS_14pool_allocatorIcEEEEPNS_12TIntermTypedERKNS_10TSourceLocE:
10422|    300|{
10423|    300|    if (!parsingBuiltins) {
  ------------------
  |  Branch (10423:9): [True: 0, False: 300]
  ------------------
10424|      0|        error(loc, "default argument values are only available for builtins", "=", "");
10425|      0|        initializer = nullptr;
10426|      0|    }
10427|    300|    if (ty.arraySizes) {
  ------------------
  |  Branch (10427:9): [True: 0, False: 300]
  ------------------
10428|      0|        error(loc, "array arguments cannot be default-initialized", identifier->c_str(), "");
10429|      0|        initializer = nullptr;
10430|      0|    }
10431|    300|    if (ty.basicType == EbtVoid) {
  ------------------
  |  Branch (10431:9): [True: 0, False: 300]
  ------------------
10432|      0|        error(loc, "illegal use of type 'void'", identifier->c_str(), "");
10433|      0|        initializer = nullptr;
10434|      0|    }
10435|    300|    reservedErrorCheck(loc, *identifier);
10436|    300|    TParameter param = {identifier, new TType(ty), initializer};
10437|    300|    return param;
10438|    300|}
_ZN7glslang13TParseContext18constructAggregateEP11TIntermNodeRKNS_5TTypeEiRKNS_10TSourceLocE:
10446|     36|{
10447|     36|    TIntermTyped* converted = intermediate.addConversion(EOpConstructStruct, type, node->getAsTyped());
10448|     36|    if (! converted || converted->getType() != type) {
  ------------------
  |  Branch (10448:9): [True: 0, False: 36]
  |  Branch (10448:24): [True: 0, False: 36]
  ------------------
10449|      0|        bool enhanced = intermediate.getEnhancedMsgs();
10450|      0|        error(loc, "", "constructor", "cannot convert parameter %d from '%s' to '%s'", paramCount,
10451|      0|              node->getAsTyped()->getType().getCompleteString(enhanced).c_str(), type.getCompleteString(enhanced).c_str());
10452|       |
10453|      0|        return nullptr;
10454|      0|    }
10455|       |
10456|     36|    return converted;
10457|     36|}
_ZN7glslang13TParseContext23inheritMemoryQualifiersERKNS_10TQualifierERS1_:
10461|    417|{
10462|    417|    if (from.isReadOnly())
  ------------------
  |  Branch (10462:9): [True: 0, False: 417]
  ------------------
10463|      0|        to.readonly = from.readonly;
10464|    417|    if (from.isWriteOnly())
  ------------------
  |  Branch (10464:9): [True: 0, False: 417]
  ------------------
10465|      0|        to.writeonly = from.writeonly;
10466|    417|    if (from.coherent)
  ------------------
  |  Branch (10466:9): [True: 0, False: 417]
  ------------------
10467|      0|        to.coherent = from.coherent;
10468|    417|    if (from.volatil)
  ------------------
  |  Branch (10468:9): [True: 0, False: 417]
  ------------------
10469|      0|        to.volatil = from.volatil;
10470|    417|    if (from.nontemporal)
  ------------------
  |  Branch (10470:9): [True: 0, False: 417]
  ------------------
10471|      0|        to.nontemporal = from.nontemporal;
10472|    417|    if (from.restrict)
  ------------------
  |  Branch (10472:9): [True: 0, False: 417]
  ------------------
10473|      0|        to.restrict = from.restrict;
10474|    417|}
_ZN7glslang13TParseContext16untypedHeapCheckEPNS_7TSymbolERKNS_5TTypeERKNS_10TSourceLocEPKc:
10524|  13.8k|{
10525|       |    // EXT_descriptor_heap
10526|  13.8k|    bool isHeapStruct =
10527|  13.8k|        (type.getQualifier().storage == EvqSamplerHeap || type.getQualifier().storage == EvqResourceHeap);
  ------------------
  |  Branch (10527:10): [True: 0, False: 13.8k]
  |  Branch (10527:59): [True: 0, False: 13.8k]
  ------------------
10528|       |
10529|  13.8k|    if (intermediate.IsRequestedExtension(E_GL_EXT_descriptor_heap) && spvVersion.vulkan > 0 &&
  ------------------
  |  Branch (10529:9): [True: 0, False: 13.8k]
  |  Branch (10529:72): [True: 0, False: 0]
  ------------------
10530|      0|        !type.getQualifier().hasSet() && !type.getQualifier().hasBinding()) {
  ------------------
  |  Branch (10530:9): [True: 0, False: 0]
  |  Branch (10530:42): [True: 0, False: 0]
  ------------------
10531|      0|        if (type.getQualifier().layoutDescriptorHeap || isHeapStruct) {
  ------------------
  |  Branch (10531:13): [True: 0, False: 0]
  |  Branch (10531:57): [True: 0, False: 0]
  ------------------
10532|      0|            if ((intermediate.isEsProfile() && intermediate.getVersion() < 310) ||
  ------------------
  |  Branch (10532:18): [True: 0, False: 0]
  |  Branch (10532:48): [True: 0, False: 0]
  ------------------
10533|      0|                (!intermediate.isEsProfile() && intermediate.getVersion() < 420)) {
  ------------------
  |  Branch (10533:18): [True: 0, False: 0]
  |  Branch (10533:49): [True: 0, False: 0]
  ------------------
10534|      0|                TString warnMsg = "layout(descriptor_heap) is turned on beyond version/profile limits.";
10535|      0|                infoSink.info.message(EPrefixWarning, warnMsg.c_str());
10536|      0|            }
10537|      0|            if (IsAnonymous(symbol->getName()) &&
  ------------------
  |  Branch (10537:17): [True: 0, False: 0]
  ------------------
10538|      0|                (type.getQualifier().isUniformOrBuffer() || type.getBasicType() == EbtBlock)) {
  ------------------
  |  Branch (10538:18): [True: 0, False: 0]
  |  Branch (10538:61): [True: 0, False: 0]
  ------------------
10539|      0|                error(loc, "layout(descriptor_heap) decorated block should be explicitly "
10540|      0|                    "declared with a run-time sized array type.", name, "");
10541|      0|                return false;
10542|      0|            }
10543|      0|            if (!type.containsHeapArray()) {
  ------------------
  |  Branch (10543:17): [True: 0, False: 0]
  ------------------
10544|      0|                error(loc, "layout(descriptor_heap) decorated variable could only be declared as an array.",
10545|      0|                      name, "");
10546|      0|                return false;
10547|      0|            }
10548|      0|            descHeapBuiltinRemap(&symbol->getWritableType(), isHeapStruct);
10549|      0|        }
10550|      0|    }
10551|  13.8k|    return true;
10552|  13.8k|}
_ZN7glslang13TParseContext12declareBlockERKNS_10TSourceLocERNS_7TVectorINS_8TTypeLocEEEPKNSt3__112basic_stringIcNS8_11char_traitsIcEENS_14pool_allocatorIcEEEEPNS_11TArraySizesE:
10559|     83|{
10560|     83|    if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (10560:9): [True: 83, False: 0]
  |  Branch (10560:34): [True: 0, False: 83]
  ------------------
10561|      0|        blockStorageRemap(loc, blockName, currentBlockQualifier);
10562|     83|    blockStageIoCheck(loc, currentBlockQualifier);
10563|     83|    blockQualifierCheck(loc, currentBlockQualifier, instanceName != nullptr);
10564|     83|    if (arraySizes != nullptr) {
  ------------------
  |  Branch (10564:9): [True: 49, False: 34]
  ------------------
10565|     49|        arraySizesCheck(loc, currentBlockQualifier, arraySizes, nullptr, false);
10566|     49|        arrayOfArrayVersionCheck(loc, arraySizes);
10567|     49|        if (arraySizes->getNumDims() > 1)
  ------------------
  |  Branch (10567:13): [True: 0, False: 49]
  ------------------
10568|      0|            requireProfile(loc, ~EEsProfile, "array-of-array of block");
10569|     49|    }
10570|       |
10571|       |    // Inherit and check member storage qualifiers WRT to the block-level qualifier.
10572|    500|    for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (10572:35): [True: 417, False: 83]
  ------------------
10573|    417|        TType& memberType = *typeList[member].type;
10574|    417|        TQualifier& memberQualifier = memberType.getQualifier();
10575|    417|        const TSourceLoc& memberLoc = typeList[member].loc;
10576|    417|        if (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal && memberQualifier.storage != currentBlockQualifier.storage)
  ------------------
  |  Branch (10576:13): [True: 392, False: 25]
  |  Branch (10576:56): [True: 0, False: 392]
  |  Branch (10576:96): [True: 0, False: 0]
  ------------------
10577|      0|            error(memberLoc, "member storage qualifier cannot contradict block storage qualifier", memberType.getFieldName().c_str(), "");
10578|    417|        memberQualifier.storage = currentBlockQualifier.storage;
10579|    417|        globalQualifierFixCheck(memberLoc, memberQualifier);
10580|    417|        inheritMemoryQualifiers(currentBlockQualifier, memberQualifier);
10581|    417|        if (currentBlockQualifier.perPrimitiveNV)
  ------------------
  |  Branch (10581:13): [True: 55, False: 362]
  ------------------
10582|     55|            memberQualifier.perPrimitiveNV = currentBlockQualifier.perPrimitiveNV;
10583|    417|        if (currentBlockQualifier.perViewNV)
  ------------------
  |  Branch (10583:13): [True: 0, False: 417]
  ------------------
10584|      0|            memberQualifier.perViewNV = currentBlockQualifier.perViewNV;
10585|    417|        if (currentBlockQualifier.perTaskNV)
  ------------------
  |  Branch (10585:13): [True: 0, False: 417]
  ------------------
10586|      0|            memberQualifier.perTaskNV = currentBlockQualifier.perTaskNV;
10587|    417|        if (currentBlockQualifier.storage == EvqtaskPayloadSharedEXT)
  ------------------
  |  Branch (10587:13): [True: 0, False: 417]
  ------------------
10588|      0|            memberQualifier.storage = EvqtaskPayloadSharedEXT;
10589|    417|        if (memberQualifier.storage == EvqSpirvStorageClass)
  ------------------
  |  Branch (10589:13): [True: 0, False: 417]
  ------------------
10590|      0|            error(memberLoc, "member cannot have a spirv_storage_class qualifier", memberType.getFieldName().c_str(), "");
10591|    417|        if (memberQualifier.hasSpirvDecorate() && !memberQualifier.getSpirvDecorate().decorateIds.empty())
  ------------------
  |  Branch (10591:13): [True: 0, False: 417]
  |  Branch (10591:51): [True: 0, False: 0]
  ------------------
10592|      0|            error(memberLoc, "member cannot have a spirv_decorate_id qualifier", memberType.getFieldName().c_str(), "");
10593|    417|        if ((currentBlockQualifier.storage == EvqUniform || currentBlockQualifier.storage == EvqBuffer) && (memberQualifier.isInterpolation() || memberQualifier.isAuxiliary()))
  ------------------
  |  Branch (10593:14): [True: 0, False: 417]
  |  Branch (10593:61): [True: 0, False: 417]
  |  Branch (10593:109): [True: 0, False: 0]
  |  Branch (10593:146): [True: 0, False: 0]
  ------------------
10594|      0|            error(memberLoc, "member of uniform or buffer block cannot have an auxiliary or interpolation qualifier", memberType.getFieldName().c_str(), "");
10595|    417|        if (memberType.isArray())
  ------------------
  |  Branch (10595:13): [True: 210, False: 207]
  ------------------
10596|    210|            arraySizesCheck(memberLoc, currentBlockQualifier, memberType.getArraySizes(), nullptr, member == typeList.size() - 1);
10597|    417|        if (memberQualifier.hasOffset()) {
  ------------------
  |  Branch (10597:13): [True: 0, False: 417]
  ------------------
10598|      0|            if (spvVersion.spv == 0) {
  ------------------
  |  Branch (10598:17): [True: 0, False: 0]
  ------------------
10599|      0|                profileRequires(memberLoc, ~EEsProfile, 440, E_GL_ARB_enhanced_layouts, "\"offset\" on block member");
10600|      0|                profileRequires(memberLoc, EEsProfile, 300, E_GL_ARB_enhanced_layouts, "\"offset\" on block member");
10601|      0|            }
10602|      0|        }
10603|       |
10604|       |        // For bindless texture, sampler can be declared as uniform/storage block member,
10605|    417|        if (memberType.containsOpaque() && !extensionTurnedOn(E_GL_EXT_structured_descriptor_heap)) {
  ------------------
  |  Branch (10605:13): [True: 0, False: 417]
  |  Branch (10605:44): [True: 0, False: 0]
  ------------------
10606|      0|            if (memberType.containsSampler() && extensionTurnedOn(E_GL_ARB_bindless_texture))
  ------------------
  |  Branch (10606:17): [True: 0, False: 0]
  |  Branch (10606:49): [True: 0, False: 0]
  ------------------
10607|      0|                updateBindlessQualifier(memberType);
10608|      0|            else
10609|      0|                error(memberLoc, "member of block cannot be or contain a sampler, image, or atomic_uint type", typeList[member].type->getFieldName().c_str(), "");
10610|      0|        }
10611|       |
10612|    417|        if (memberType.containsCoopMat())
  ------------------
  |  Branch (10612:13): [True: 0, False: 417]
  ------------------
10613|      0|            error(memberLoc, "member of block cannot be or contain a cooperative matrix type", typeList[member].type->getFieldName().c_str(), "");
10614|       |
10615|    417|        if (memberType.containsCoopVec())
  ------------------
  |  Branch (10615:13): [True: 0, False: 417]
  ------------------
10616|      0|            error(memberLoc, "member of block cannot be or contain a cooperative vector type", typeList[member].type->getFieldName().c_str(), "");
10617|    417|    }
10618|       |
10619|       |    // This might be a redeclaration of a built-in block.  If so, redeclareBuiltinBlock() will
10620|       |    // do all the rest.
10621|     83|    if (! symbolTable.atBuiltInLevel() && builtInName(*blockName)) {
  ------------------
  |  Branch (10621:9): [True: 0, False: 83]
  |  Branch (10621:43): [True: 0, False: 0]
  ------------------
10622|      0|        redeclareBuiltinBlock(loc, typeList, *blockName, instanceName, arraySizes);
10623|      0|        return nullptr;
10624|      0|    }
10625|       |
10626|       |    // Not a redeclaration of a built-in; check that all names are user names.
10627|     83|    reservedErrorCheck(loc, *blockName);
10628|     83|    if (instanceName)
  ------------------
  |  Branch (10628:9): [True: 49, False: 34]
  ------------------
10629|     49|        reservedErrorCheck(loc, *instanceName);
10630|    500|    for (unsigned int member = 0; member < typeList.size(); ++member)
  ------------------
  |  Branch (10630:35): [True: 417, False: 83]
  ------------------
10631|    417|        reservedErrorCheck(typeList[member].loc, typeList[member].type->getFieldName());
10632|       |
10633|       |    // Make default block qualification, and adjust the member qualifications
10634|       |
10635|     83|    TQualifier defaultQualification;
10636|     83|    switch (currentBlockQualifier.storage) {
10637|      0|    case EvqUniform:    defaultQualification = globalUniformDefaults;    break;
  ------------------
  |  Branch (10637:5): [True: 0, False: 83]
  ------------------
10638|      0|    case EvqBuffer:     defaultQualification = globalBufferDefaults;     break;
  ------------------
  |  Branch (10638:5): [True: 0, False: 83]
  ------------------
10639|     16|    case EvqVaryingIn:  defaultQualification = globalInputDefaults;      break;
  ------------------
  |  Branch (10639:5): [True: 16, False: 67]
  ------------------
10640|     67|    case EvqVaryingOut: defaultQualification = globalOutputDefaults;     break;
  ------------------
  |  Branch (10640:5): [True: 67, False: 16]
  ------------------
10641|      0|    case EvqShared:     defaultQualification = globalSharedDefaults;     break;
  ------------------
  |  Branch (10641:5): [True: 0, False: 83]
  ------------------
10642|      0|    default:            defaultQualification.clear();                    break;
  ------------------
  |  Branch (10642:5): [True: 0, False: 83]
  ------------------
10643|     83|    }
10644|       |
10645|       |    // Special case for "push_constant uniform", which has a default of std430,
10646|       |    // contrary to normal uniform defaults, and can't have a default tracked for it.
10647|     83|    if ((currentBlockQualifier.isPushConstant() && !currentBlockQualifier.hasPacking()) ||
  ------------------
  |  Branch (10647:10): [True: 0, False: 83]
  |  Branch (10647:52): [True: 0, False: 0]
  ------------------
10648|     83|        (currentBlockQualifier.isShaderRecord() && !currentBlockQualifier.hasPacking()))
  ------------------
  |  Branch (10648:10): [True: 0, False: 83]
  |  Branch (10648:52): [True: 0, False: 0]
  ------------------
10649|      0|        currentBlockQualifier.layoutPacking = ElpStd430;
10650|       |
10651|       |    // Special case for "taskNV in/out", which has a default of std430,
10652|     83|    if (currentBlockQualifier.isTaskMemory() && !currentBlockQualifier.hasPacking())
  ------------------
  |  Branch (10652:9): [True: 0, False: 83]
  |  Branch (10652:49): [True: 0, False: 0]
  ------------------
10653|      0|        currentBlockQualifier.layoutPacking = ElpStd430;
10654|       |
10655|       |    // fix and check for member layout qualifiers
10656|       |
10657|     83|    mergeObjectLayoutQualifiers(defaultQualification, currentBlockQualifier, true);
10658|       |
10659|       |    // "The align qualifier can only be used on blocks or block members, and only for blocks declared with std140 or std430 layouts."
10660|     83|    if (currentBlockQualifier.hasAlign()) {
  ------------------
  |  Branch (10660:9): [True: 0, False: 83]
  ------------------
10661|      0|        if (defaultQualification.layoutPacking != ElpStd140 &&
  ------------------
  |  Branch (10661:13): [True: 0, False: 0]
  ------------------
10662|      0|            defaultQualification.layoutPacking != ElpStd430 &&
  ------------------
  |  Branch (10662:13): [True: 0, False: 0]
  ------------------
10663|      0|            defaultQualification.layoutPacking != ElpScalar) {
  ------------------
  |  Branch (10663:13): [True: 0, False: 0]
  ------------------
10664|      0|            error(loc, "can only be used with std140, std430, or scalar layout packing", "align", "");
10665|      0|            defaultQualification.layoutAlign = -1;
10666|      0|        }
10667|      0|    }
10668|       |
10669|     83|    bool memberWithLocation = false;
10670|     83|    bool memberWithoutLocation = false;
10671|     83|    bool memberWithPerViewQualifier = false;
10672|    500|    for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (10672:35): [True: 417, False: 83]
  ------------------
10673|    417|        TQualifier& memberQualifier = typeList[member].type->getQualifier();
10674|    417|        const TSourceLoc& memberLoc = typeList[member].loc;
10675|    417|        if (memberQualifier.hasStream()) {
  ------------------
  |  Branch (10675:13): [True: 0, False: 417]
  ------------------
10676|      0|            if (defaultQualification.layoutStream != memberQualifier.layoutStream)
  ------------------
  |  Branch (10676:17): [True: 0, False: 0]
  ------------------
10677|      0|                error(memberLoc, "member cannot contradict block", "stream", "");
10678|      0|        }
10679|       |
10680|       |        // "This includes a block's inheritance of the
10681|       |        // current global default buffer, a block member's inheritance of the block's
10682|       |        // buffer, and the requirement that any *xfb_buffer* declared on a block
10683|       |        // member must match the buffer inherited from the block."
10684|    417|        if (memberQualifier.hasXfbBuffer()) {
  ------------------
  |  Branch (10684:13): [True: 0, False: 417]
  ------------------
10685|      0|            if (defaultQualification.layoutXfbBuffer != memberQualifier.layoutXfbBuffer)
  ------------------
  |  Branch (10685:17): [True: 0, False: 0]
  ------------------
10686|      0|                error(memberLoc, "member cannot contradict block (or what block inherited from global)", "xfb_buffer", "");
10687|      0|        }
10688|       |
10689|    417|        if (memberQualifier.hasPacking())
  ------------------
  |  Branch (10689:13): [True: 0, False: 417]
  ------------------
10690|      0|            error(memberLoc, "member of block cannot have a packing layout qualifier", typeList[member].type->getFieldName().c_str(), "");
10691|    417|        if (memberQualifier.hasLocation()) {
  ------------------
  |  Branch (10691:13): [True: 0, False: 417]
  ------------------
10692|      0|            const char* feature = "location on block member";
10693|      0|            switch (currentBlockQualifier.storage) {
10694|      0|            case EvqVaryingIn:
  ------------------
  |  Branch (10694:13): [True: 0, False: 0]
  ------------------
10695|      0|            case EvqVaryingOut:
  ------------------
  |  Branch (10695:13): [True: 0, False: 0]
  ------------------
10696|      0|                requireProfile(memberLoc, ECoreProfile | ECompatibilityProfile | EEsProfile, feature);
10697|      0|                profileRequires(memberLoc, ECoreProfile | ECompatibilityProfile, 440, E_GL_ARB_enhanced_layouts, feature);
10698|      0|                profileRequires(memberLoc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, feature);
10699|      0|                memberWithLocation = true;
10700|      0|                break;
10701|      0|            default:
  ------------------
  |  Branch (10701:13): [True: 0, False: 0]
  ------------------
10702|      0|                error(memberLoc, "can only use in an in/out block", feature, "");
10703|      0|                break;
10704|      0|            }
10705|      0|        } else
10706|    417|            memberWithoutLocation = true;
10707|       |
10708|       |        // "The offset qualifier can only be used on block members of blocks declared with std140 or std430 layouts."
10709|       |        // "The align qualifier can only be used on blocks or block members, and only for blocks declared with std140 or std430 layouts."
10710|    417|        if (memberQualifier.hasAlign() || memberQualifier.hasOffset()) {
  ------------------
  |  Branch (10710:13): [True: 0, False: 417]
  |  Branch (10710:43): [True: 0, False: 417]
  ------------------
10711|      0|            if (defaultQualification.layoutPacking != ElpStd140 &&
  ------------------
  |  Branch (10711:17): [True: 0, False: 0]
  ------------------
10712|      0|                defaultQualification.layoutPacking != ElpStd430 &&
  ------------------
  |  Branch (10712:17): [True: 0, False: 0]
  ------------------
10713|      0|                defaultQualification.layoutPacking != ElpScalar)
  ------------------
  |  Branch (10713:17): [True: 0, False: 0]
  ------------------
10714|      0|                error(memberLoc, "can only be used with std140, std430, or scalar layout packing", "offset/align", "");
10715|      0|        }
10716|       |
10717|    417|        if (memberQualifier.isPerView()) {
  ------------------
  |  Branch (10717:13): [True: 25, False: 392]
  ------------------
10718|     25|            memberWithPerViewQualifier = true;
10719|     25|        }
10720|       |
10721|    417|        TQualifier newMemberQualification = defaultQualification;
10722|    417|        mergeQualifiers(memberLoc, newMemberQualification, memberQualifier, false);
10723|    417|        memberQualifier = newMemberQualification;
10724|    417|    }
10725|       |
10726|     83|    layoutMemberLocationArrayCheck(loc, memberWithLocation, arraySizes);
10727|       |
10728|       |    // Ensure that the block has an XfbBuffer assigned. This is needed
10729|       |    // because if the block has a XfbOffset assigned, then it is
10730|       |    // assumed that it has implicitly assigned the current global
10731|       |    // XfbBuffer, and because it's members need to be assigned a
10732|       |    // XfbOffset if they lack it.
10733|     83|    if (currentBlockQualifier.storage == EvqVaryingOut && globalOutputDefaults.hasXfbBuffer()) {
  ------------------
  |  Branch (10733:9): [True: 67, False: 16]
  |  Branch (10733:59): [True: 47, False: 20]
  ------------------
10734|     47|       if (!currentBlockQualifier.hasXfbBuffer() && currentBlockQualifier.hasXfbOffset())
  ------------------
  |  Branch (10734:12): [True: 47, False: 0]
  |  Branch (10734:53): [True: 0, False: 47]
  ------------------
10735|      0|          currentBlockQualifier.layoutXfbBuffer = globalOutputDefaults.layoutXfbBuffer;
10736|     47|    }
10737|       |
10738|       |    // Process the members
10739|     83|    fixBlockLocations(loc, currentBlockQualifier, typeList, memberWithLocation, memberWithoutLocation);
10740|     83|    fixXfbOffsets(currentBlockQualifier, typeList);
10741|     83|    fixBlockUniformOffsets(currentBlockQualifier, typeList);
10742|     83|    fixBlockUniformLayoutMatrix(currentBlockQualifier, &typeList, nullptr);
10743|     83|    fixBlockUniformLayoutPacking(currentBlockQualifier, &typeList, nullptr);
10744|    500|    for (unsigned int member = 0; member < typeList.size(); ++member)
  ------------------
  |  Branch (10744:35): [True: 417, False: 83]
  ------------------
10745|    417|        layoutTypeCheck(typeList[member].loc, *typeList[member].type);
10746|       |
10747|     83|    if (memberWithPerViewQualifier) {
  ------------------
  |  Branch (10747:9): [True: 10, False: 73]
  ------------------
10748|     75|        for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (10748:39): [True: 65, False: 10]
  ------------------
10749|     65|            checkAndResizeMeshViewDim(typeList[member].loc, *typeList[member].type, /*isBlockMember*/ true);
10750|     65|        }
10751|     10|    }
10752|       |
10753|       |    // reverse merge, so that currentBlockQualifier now has all layout information
10754|       |    // (can't use defaultQualification directly, it's missing other non-layout-default-class qualifiers)
10755|     83|    mergeObjectLayoutQualifiers(currentBlockQualifier, defaultQualification, true);
10756|       |
10757|       |    //
10758|       |    // Build and add the interface block as a new type named 'blockName'
10759|       |    //
10760|       |
10761|     83|    TType blockType(&typeList, *blockName, currentBlockQualifier);
10762|     83|    if (arraySizes != nullptr)
  ------------------
  |  Branch (10762:9): [True: 49, False: 34]
  ------------------
10763|     49|        blockType.transferArraySizes(arraySizes);
10764|       |
10765|     83|    if (arraySizes == nullptr)
  ------------------
  |  Branch (10765:9): [True: 34, False: 49]
  ------------------
10766|     34|        ioArrayCheck(loc, blockType, instanceName ? *instanceName : *blockName);
  ------------------
  |  Branch (10766:38): [True: 0, False: 34]
  ------------------
10767|     83|    if (currentBlockQualifier.hasBufferReference()) {
  ------------------
  |  Branch (10767:9): [True: 0, False: 83]
  ------------------
10768|       |
10769|      0|        if (currentBlockQualifier.storage != EvqBuffer)
  ------------------
  |  Branch (10769:13): [True: 0, False: 0]
  ------------------
10770|      0|            error(loc, "can only be used with buffer", "buffer_reference", "");
10771|       |
10772|       |        // Create the block reference type. If it was forward-declared, detect that
10773|       |        // as a referent struct type with no members. Replace the referent type with
10774|       |        // blockType.
10775|      0|        TType blockNameType(EbtReference, blockType, *blockName);
10776|      0|        TVariable* blockNameVar = new TVariable(blockName, blockNameType, true);
10777|      0|        if (! symbolTable.insert(*blockNameVar)) {
  ------------------
  |  Branch (10777:13): [True: 0, False: 0]
  ------------------
10778|      0|            TSymbol* existingName = symbolTable.find(*blockName);
10779|      0|            if (existingName->getType().isReference() &&
  ------------------
  |  Branch (10779:17): [True: 0, False: 0]
  ------------------
10780|      0|                existingName->getType().getReferentType()->getStruct() &&
  ------------------
  |  Branch (10780:17): [True: 0, False: 0]
  ------------------
10781|      0|                existingName->getType().getReferentType()->getStruct()->size() == 0 &&
  ------------------
  |  Branch (10781:17): [True: 0, False: 0]
  ------------------
10782|      0|                existingName->getType().getQualifier().storage == blockType.getQualifier().storage) {
  ------------------
  |  Branch (10782:17): [True: 0, False: 0]
  ------------------
10783|      0|                existingName->getType().getReferentType()->deepCopy(blockType);
10784|      0|            } else {
10785|      0|                error(loc, "block name cannot be redefined", blockName->c_str(), "");
10786|      0|            }
10787|      0|        }
10788|      0|        if (!instanceName) {
  ------------------
  |  Branch (10788:13): [True: 0, False: 0]
  ------------------
10789|      0|            return nullptr;
10790|      0|        }
10791|     83|    } else {
10792|       |        //
10793|       |        // Don't make a user-defined type out of block name; that will cause an error
10794|       |        // if the same block name gets reused in a different interface.
10795|       |        //
10796|       |        // "Block names have no other use within a shader
10797|       |        // beyond interface matching; it is a compile-time error to use a block name at global scope for anything
10798|       |        // other than as a block name (e.g., use of a block name for a global variable name or function name is
10799|       |        // currently reserved)."
10800|       |        //
10801|       |        // Use the symbol table to prevent normal reuse of the block's name, as a variable entry,
10802|       |        // whose type is EbtBlock, but without all the structure; that will come from the type
10803|       |        // the instances point to.
10804|       |        //
10805|     83|        TType blockNameType(EbtBlock, blockType.getQualifier().storage);
10806|     83|        TVariable* blockNameVar = new TVariable(blockName, blockNameType);
10807|     83|        if (! symbolTable.insert(*blockNameVar)) {
  ------------------
  |  Branch (10807:13): [True: 8, False: 75]
  ------------------
10808|      8|            TSymbol* existingName = symbolTable.find(*blockName);
10809|      8|            if (existingName->getType().getBasicType() == EbtBlock) {
  ------------------
  |  Branch (10809:17): [True: 8, False: 0]
  ------------------
10810|      8|                if (existingName->getType().getQualifier().storage == blockType.getQualifier().storage) {
  ------------------
  |  Branch (10810:21): [True: 0, False: 8]
  ------------------
10811|      0|                    error(loc, "Cannot reuse block name within the same interface:", blockName->c_str(), blockType.getStorageQualifierString());
10812|      0|                    return nullptr;
10813|      0|                }
10814|      8|            } else {
10815|      0|                error(loc, "block name cannot redefine a non-block name", blockName->c_str(), "");
10816|      0|                return nullptr;
10817|      0|            }
10818|      8|        }
10819|     83|    }
10820|       |
10821|       |    // Add the variable, as anonymous or named instanceName.
10822|       |    // Make an anonymous variable if no name was provided.
10823|     83|    if (! instanceName)
  ------------------
  |  Branch (10823:9): [True: 34, False: 49]
  ------------------
10824|     34|        instanceName = NewPoolTString("");
10825|       |
10826|     83|    TVariable& variable = *new TVariable(instanceName, blockType);
10827|     83|    if (! symbolTable.insert(variable)) {
  ------------------
  |  Branch (10827:9): [True: 0, False: 83]
  ------------------
10828|      0|        if (*instanceName == "")
  ------------------
  |  Branch (10828:13): [True: 0, False: 0]
  ------------------
10829|      0|            error(loc, "nameless block contains a member that already has a name at global scope", blockName->c_str(), "");
10830|      0|        else
10831|      0|            error(loc, "block instance name redefinition", variable.getName().c_str(), "");
10832|       |
10833|      0|        return nullptr;
10834|      0|    }
10835|       |
10836|       |    // EXT_descriptor_heap
10837|     83|    if (!untypedHeapCheck(&variable, blockType, loc, blockName->c_str())) {
  ------------------
  |  Branch (10837:9): [True: 0, False: 83]
  ------------------
10838|      0|        return nullptr;
10839|      0|    }
10840|       |
10841|       |    // Check for general layout qualifier errors
10842|     83|    layoutObjectCheck(loc, variable);
10843|       |
10844|       |    // fix up
10845|     83|    if (isIoResizeArray(blockType)) {
  ------------------
  |  Branch (10845:9): [True: 41, False: 42]
  ------------------
10846|     41|        ioArraySymbolResizeList.push_back(&variable);
10847|     41|        checkIoArraysConsistency(loc, true);
10848|     41|    } else
10849|     42|        fixIoArraySize(loc, variable.getWritableType());
10850|       |
10851|       |    // Save it in the AST for linker use.
10852|     83|    trackLinkage(variable);
10853|       |
10854|     83|    TIntermAggregate* declNode = nullptr;
10855|     83|    if (intermediate.getDebugInfo()) {
  ------------------
  |  Branch (10855:9): [True: 0, False: 83]
  ------------------
10856|      0|        auto blockDeclNode = new TIntermVariableDecl(intermediate.addSymbol(variable, loc), nullptr);
10857|      0|        blockDeclNode->setLoc(loc);
10858|       |
10859|       |        // We have to wrap the declaration with a sequence to fit the same processing logic with variables.
10860|      0|        declNode = new TIntermAggregate(EOpSequence);
10861|      0|        declNode->getSequence().push_back(blockDeclNode);
10862|      0|    }
10863|     83|    return declNode;
10864|     83|}
_ZN7glslang13TParseContext17blockStageIoCheckERKNS_10TSourceLocERKNS_10TQualifierE:
10880|     83|{
10881|     83|    const char *extsrt[2] = { E_GL_NV_ray_tracing, E_GL_EXT_ray_tracing };
10882|     83|    switch (qualifier.storage) {
10883|      0|    case EvqUniform:
  ------------------
  |  Branch (10883:5): [True: 0, False: 83]
  ------------------
10884|      0|        profileRequires(loc, EEsProfile, 300, nullptr, "uniform block");
10885|      0|        profileRequires(loc, ENoProfile, 140, E_GL_ARB_uniform_buffer_object, "uniform block");
10886|      0|        if (currentBlockQualifier.layoutPacking == ElpStd430 && ! currentBlockQualifier.isPushConstant())
  ------------------
  |  Branch (10886:13): [True: 0, False: 0]
  |  Branch (10886:65): [True: 0, False: 0]
  ------------------
10887|      0|            requireExtensions(loc, 1, &E_GL_EXT_scalar_block_layout, "std430 requires the buffer storage qualifier");
10888|      0|        break;
10889|      0|    case EvqBuffer:
  ------------------
  |  Branch (10889:5): [True: 0, False: 83]
  ------------------
10890|      0|        requireProfile(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, "buffer block");
10891|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_shader_storage_buffer_object, "buffer block");
10892|      0|        profileRequires(loc, EEsProfile, 310, nullptr, "buffer block");
10893|      0|        break;
10894|     16|    case EvqVaryingIn:
  ------------------
  |  Branch (10894:5): [True: 16, False: 67]
  ------------------
10895|     16|        profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "input block");
10896|       |        // It is a compile-time error to have an input block in a vertex shader or an output block in a fragment shader
10897|       |        // "Compute shaders do not permit user-defined input variables..."
10898|     16|        requireStage(loc, (EShLanguageMask)(EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask|
10899|     16|            EShLangFragmentMask|EShLangMeshMask), "input block");
10900|     16|        if (language == EShLangFragment) {
  ------------------
  |  Branch (10900:13): [True: 0, False: 16]
  ------------------
10901|      0|            profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "fragment input block");
10902|     16|        } else if (language == EShLangMesh && ! qualifier.isTaskMemory()) {
  ------------------
  |  Branch (10902:20): [True: 0, False: 16]
  |  Branch (10902:47): [True: 0, False: 0]
  ------------------
10903|      0|            error(loc, "input blocks cannot be used in a mesh shader", "out", "");
10904|      0|        }
10905|     16|        break;
10906|     67|    case EvqVaryingOut:
  ------------------
  |  Branch (10906:5): [True: 67, False: 16]
  ------------------
10907|     67|        profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "output block");
10908|     67|        requireStage(loc, (EShLanguageMask)(EShLangVertexMask|EShLangTessControlMask|EShLangTessEvaluationMask|
10909|     67|            EShLangGeometryMask|EShLangMeshMask|EShLangTaskMask), "output block");
10910|       |        // ES 310 can have a block before shader_io is turned on, so skip this test for built-ins
10911|     67|        if (language == EShLangVertex && ! parsingBuiltins) {
  ------------------
  |  Branch (10911:13): [True: 13, False: 54]
  |  Branch (10911:42): [True: 0, False: 13]
  ------------------
10912|      0|            profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "vertex output block");
10913|     67|        } else if (language == EShLangMesh && qualifier.isTaskMemory()) {
  ------------------
  |  Branch (10913:20): [True: 20, False: 47]
  |  Branch (10913:47): [True: 0, False: 20]
  ------------------
10914|      0|            error(loc, "can only use on input blocks in mesh shader", "taskNV", "");
10915|     67|        } else if (language == EShLangTask && ! qualifier.isTaskMemory()) {
  ------------------
  |  Branch (10915:20): [True: 0, False: 67]
  |  Branch (10915:47): [True: 0, False: 0]
  ------------------
10916|      0|            error(loc, "output blocks cannot be used in a task shader", "out", "");
10917|      0|        }
10918|     67|        break;
10919|      0|    case EvqShared:
  ------------------
  |  Branch (10919:5): [True: 0, False: 83]
  ------------------
10920|      0|        if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_4) {
  ------------------
  |  Branch (10920:13): [True: 0, False: 0]
  |  Branch (10920:35): [True: 0, False: 0]
  ------------------
10921|      0|            error(loc, "shared block requires at least SPIR-V 1.4", "shared block", "");
10922|      0|        }
10923|      0|        profileRequires(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shared_memory_block, "shared block");
10924|      0|        break;
10925|      0|    case EvqPayload:
  ------------------
  |  Branch (10925:5): [True: 0, False: 83]
  ------------------
10926|      0|        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "rayPayloadNV block");
10927|      0|        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangAnyHitMask | EShLangClosestHitMask | EShLangMissMask),
10928|      0|            "rayPayloadNV block");
10929|      0|        break;
10930|      0|    case EvqPayloadIn:
  ------------------
  |  Branch (10930:5): [True: 0, False: 83]
  ------------------
10931|      0|        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "rayPayloadInNV block");
10932|      0|        requireStage(loc, (EShLanguageMask)(EShLangAnyHitMask | EShLangClosestHitMask | EShLangMissMask),
10933|      0|            "rayPayloadInNV block");
10934|      0|        break;
10935|      0|    case EvqHitAttr:
  ------------------
  |  Branch (10935:5): [True: 0, False: 83]
  ------------------
10936|      0|        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "hitAttributeNV block");
10937|      0|        requireStage(loc, (EShLanguageMask)(EShLangIntersectMask | EShLangAnyHitMask | EShLangClosestHitMask), "hitAttributeNV block");
10938|      0|        break;
10939|      0|    case EvqCallableData:
  ------------------
  |  Branch (10939:5): [True: 0, False: 83]
  ------------------
10940|      0|        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "callableDataNV block");
10941|      0|        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask),
10942|      0|            "callableDataNV block");
10943|      0|        break;
10944|      0|    case EvqCallableDataIn:
  ------------------
  |  Branch (10944:5): [True: 0, False: 83]
  ------------------
10945|      0|        profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "callableDataInNV block");
10946|      0|        requireStage(loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV block");
10947|      0|        break;
10948|      0|    case EvqHitObjectAttrNV:
  ------------------
  |  Branch (10948:5): [True: 0, False: 83]
  ------------------
10949|      0|        profileRequires(loc, ~EEsProfile, 460, E_GL_NV_shader_invocation_reorder, "hitObjectAttributeNV block");
10950|      0|        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangMissMask), "hitObjectAttributeNV block");
10951|      0|        break;
10952|      0|    case EvqHitObjectAttrEXT:
  ------------------
  |  Branch (10952:5): [True: 0, False: 83]
  ------------------
10953|      0|        profileRequires(loc, ~EEsProfile, 460, E_GL_EXT_shader_invocation_reorder, "hitObjectAttributeEXT block");
10954|      0|        requireStage(loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangMissMask), "hitObjectAttributeEXT block");
10955|      0|        break;
10956|      0|    case EvqResourceHeap:
  ------------------
  |  Branch (10956:5): [True: 0, False: 83]
  ------------------
10957|      0|        profileRequires(loc, ~EEsProfile, 460, E_GL_EXT_structured_descriptor_heap, "resourceheap block");
10958|      0|        profileRequires(loc, ~EEsProfile, 460, E_GL_EXT_descriptor_heap, "resourceheap block");
10959|      0|        break;
10960|      0|    case EvqSamplerHeap:
  ------------------
  |  Branch (10960:5): [True: 0, False: 83]
  ------------------
10961|      0|        profileRequires(loc, ~EEsProfile, 460, E_GL_EXT_structured_descriptor_heap, "samplerheap block");
10962|      0|        profileRequires(loc, ~EEsProfile, 460, E_GL_EXT_descriptor_heap, "samplerheap block");
10963|      0|        break;
10964|      0|    default:
  ------------------
  |  Branch (10964:5): [True: 0, False: 83]
  ------------------
10965|      0|        error(loc, "only uniform, buffer, in, or out blocks are supported", blockName->c_str(), "");
10966|      0|        break;
10967|     83|    }
10968|     83|}
_ZN7glslang13TParseContext19blockQualifierCheckERKNS_10TSourceLocERKNS_10TQualifierEb:
10972|     83|{
10973|       |    // The 4.5 specification says:
10974|       |    //
10975|       |    // interface-block :
10976|       |    //    layout-qualifieropt interface-qualifier  block-name { member-list } instance-nameopt ;
10977|       |    //
10978|       |    // interface-qualifier :
10979|       |    //    in
10980|       |    //    out
10981|       |    //    patch in
10982|       |    //    patch out
10983|       |    //    uniform
10984|       |    //    buffer
10985|       |    //
10986|       |    // Note however memory qualifiers aren't included, yet the specification also says
10987|       |    //
10988|       |    // "...memory qualifiers may also be used in the declaration of shader storage blocks..."
10989|       |
10990|     83|    if (qualifier.isInterpolation())
  ------------------
  |  Branch (10990:9): [True: 0, False: 83]
  ------------------
10991|      0|        error(loc, "cannot use interpolation qualifiers on an interface block", "flat/smooth/noperspective", "");
10992|     83|    if (qualifier.centroid)
  ------------------
  |  Branch (10992:9): [True: 0, False: 83]
  ------------------
10993|      0|        error(loc, "cannot use centroid qualifier on an interface block", "centroid", "");
10994|     83|    if (qualifier.isSample())
  ------------------
  |  Branch (10994:9): [True: 0, False: 83]
  ------------------
10995|      0|        error(loc, "cannot use sample qualifier on an interface block", "sample", "");
10996|     83|    if (qualifier.invariant)
  ------------------
  |  Branch (10996:9): [True: 0, False: 83]
  ------------------
10997|      0|        error(loc, "cannot use invariant qualifier on an interface block", "invariant", "");
10998|     83|    if (qualifier.isPushConstant())
  ------------------
  |  Branch (10998:9): [True: 0, False: 83]
  ------------------
10999|      0|        intermediate.addPushConstantCount();
11000|     83|    if (qualifier.isShaderRecord())
  ------------------
  |  Branch (11000:9): [True: 0, False: 83]
  ------------------
11001|      0|        intermediate.addShaderRecordCount();
11002|     83|    if (qualifier.isTaskMemory())
  ------------------
  |  Branch (11002:9): [True: 0, False: 83]
  ------------------
11003|      0|        intermediate.addTaskNVCount();
11004|     83|}
_ZN7glslang13TParseContext17fixBlockLocationsERKNS_10TSourceLocERNS_10TQualifierERNS_7TVectorINS_8TTypeLocEEEbb:
11014|     83|{
11015|       |    // "If a block has no block-level location layout qualifier, it is required that either all or none of its members
11016|       |    // have a location layout qualifier, or a compile-time error results."
11017|     83|    if (! qualifier.hasLocation() && memberWithLocation && memberWithoutLocation)
  ------------------
  |  Branch (11017:9): [True: 83, False: 0]
  |  Branch (11017:38): [True: 0, False: 83]
  |  Branch (11017:60): [True: 0, False: 0]
  ------------------
11018|      0|        error(loc, "either the block needs a location, or all members need a location, or no members have a location", "location", "");
11019|     83|    else {
11020|     83|        if (memberWithLocation) {
  ------------------
  |  Branch (11020:13): [True: 0, False: 83]
  ------------------
11021|       |            // remove any block-level location and make it per *every* member
11022|      0|            int nextLocation = 0;  // by the rule above, initial value is not relevant
11023|      0|            if (qualifier.hasAnyLocation()) {
  ------------------
  |  Branch (11023:17): [True: 0, False: 0]
  ------------------
11024|      0|                nextLocation = qualifier.layoutLocation;
11025|      0|                qualifier.layoutLocation = TQualifier::layoutLocationEnd;
11026|      0|                if (qualifier.hasComponent()) {
  ------------------
  |  Branch (11026:21): [True: 0, False: 0]
  ------------------
11027|       |                    // "It is a compile-time error to apply the *component* qualifier to a ... block"
11028|      0|                    error(loc, "cannot apply to a block", "component", "");
11029|      0|                }
11030|      0|                if (qualifier.hasIndex()) {
  ------------------
  |  Branch (11030:21): [True: 0, False: 0]
  ------------------
11031|      0|                    error(loc, "cannot apply to a block", "index", "");
11032|      0|                }
11033|      0|            }
11034|      0|            for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (11034:43): [True: 0, False: 0]
  ------------------
11035|      0|                TQualifier& memberQualifier = typeList[member].type->getQualifier();
11036|      0|                const TSourceLoc& memberLoc = typeList[member].loc;
11037|      0|                if (! memberQualifier.hasLocation()) {
  ------------------
  |  Branch (11037:21): [True: 0, False: 0]
  ------------------
11038|      0|                    if (nextLocation >= (int)TQualifier::layoutLocationEnd)
  ------------------
  |  Branch (11038:25): [True: 0, False: 0]
  ------------------
11039|      0|                        error(memberLoc, "location is too large", "location", "");
11040|      0|                    memberQualifier.layoutLocation = nextLocation;
11041|      0|                    memberQualifier.layoutComponent = TQualifier::layoutComponentEnd;
11042|      0|                }
11043|      0|                nextLocation = memberQualifier.layoutLocation + intermediate.computeTypeLocationSize(
11044|      0|                                    *typeList[member].type, language);
11045|      0|            }
11046|      0|        }
11047|     83|    }
11048|     83|}
_ZN7glslang13TParseContext13fixXfbOffsetsERNS_10TQualifierERNS_7TVectorINS_8TTypeLocEEE:
11051|     83|{
11052|       |    // "If a block is qualified with xfb_offset, all its
11053|       |    // members are assigned transform feedback buffer offsets. If a block is not qualified with xfb_offset, any
11054|       |    // members of that block not qualified with an xfb_offset will not be assigned transform feedback buffer
11055|       |    // offsets."
11056|       |
11057|     83|    if (! qualifier.hasXfbBuffer() || ! qualifier.hasXfbOffset())
  ------------------
  |  Branch (11057:9): [True: 83, False: 0]
  |  Branch (11057:39): [True: 0, False: 0]
  ------------------
11058|     83|        return;
11059|       |
11060|      0|    int nextOffset = qualifier.layoutXfbOffset;
11061|      0|    for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (11061:35): [True: 0, False: 0]
  ------------------
11062|      0|        TQualifier& memberQualifier = typeList[member].type->getQualifier();
11063|      0|        bool contains64BitType = false;
11064|      0|        bool contains32BitType = false;
11065|      0|        bool contains16BitType = false;
11066|      0|        int memberSize = intermediate.computeTypeXfbSize(*typeList[member].type, contains64BitType, contains32BitType, contains16BitType);
11067|       |        // see if we need to auto-assign an offset to this member
11068|      0|        if (! memberQualifier.hasXfbOffset()) {
  ------------------
  |  Branch (11068:13): [True: 0, False: 0]
  ------------------
11069|       |            // "if applied to an aggregate containing a double or 64-bit integer, the offset must also be a multiple of 8"
11070|      0|            if (contains64BitType)
  ------------------
  |  Branch (11070:17): [True: 0, False: 0]
  ------------------
11071|      0|                RoundToPow2(nextOffset, 8);
11072|      0|            else if (contains32BitType)
  ------------------
  |  Branch (11072:22): [True: 0, False: 0]
  ------------------
11073|      0|                RoundToPow2(nextOffset, 4);
11074|      0|            else if (contains16BitType)
  ------------------
  |  Branch (11074:22): [True: 0, False: 0]
  ------------------
11075|      0|                RoundToPow2(nextOffset, 2);
11076|      0|            memberQualifier.layoutXfbOffset = nextOffset;
11077|      0|        } else
11078|      0|            nextOffset = memberQualifier.layoutXfbOffset;
11079|      0|        nextOffset += memberSize;
11080|      0|    }
11081|       |
11082|       |    // The above gave all block members an offset, so we can take it off the block now,
11083|       |    // which will avoid double counting the offset usage.
11084|      0|    qualifier.layoutXfbOffset = TQualifier::layoutXfbOffsetEnd;
11085|      0|}
_ZN7glslang13TParseContext22fixBlockUniformOffsetsERNS_10TQualifierERNS_7TVectorINS_8TTypeLocEEE:
11094|     83|{
11095|     83|    if (!storageCanHaveLayoutInBlock(qualifier.storage) && !qualifier.isTaskMemory())
  ------------------
  |  Branch (11095:9): [True: 83, False: 0]
  |  Branch (11095:60): [True: 83, False: 0]
  ------------------
11096|     83|        return;
11097|      0|    if (qualifier.layoutPacking != ElpStd140 && qualifier.layoutPacking != ElpStd430 && qualifier.layoutPacking != ElpScalar)
  ------------------
  |  Branch (11097:9): [True: 0, False: 0]
  |  Branch (11097:49): [True: 0, False: 0]
  |  Branch (11097:89): [True: 0, False: 0]
  ------------------
11098|      0|        return;
11099|       |
11100|      0|    int offset = 0;
11101|      0|    int memberSize;
11102|      0|    for (unsigned int member = 0; member < typeList.size(); ++member) {
  ------------------
  |  Branch (11102:35): [True: 0, False: 0]
  ------------------
11103|      0|        TQualifier& memberQualifier = typeList[member].type->getQualifier();
11104|      0|        const TSourceLoc& memberLoc = typeList[member].loc;
11105|       |
11106|       |        // "When align is applied to an array, it effects only the start of the array, not the array's internal stride."
11107|       |
11108|       |        // modify just the children's view of matrix layout, if there is one for this member
11109|      0|        TLayoutMatrix subMatrixLayout = typeList[member].type->getQualifier().layoutMatrix;
11110|      0|        int dummyStride;
11111|      0|        int memberAlignment = intermediate.getMemberAlignment(*typeList[member].type, memberSize, dummyStride, qualifier.layoutPacking,
11112|      0|                                                              subMatrixLayout != ElmNone ? subMatrixLayout == ElmRowMajor : qualifier.layoutMatrix == ElmRowMajor);
  ------------------
  |  Branch (11112:63): [True: 0, False: 0]
  ------------------
11113|      0|        if (memberQualifier.hasOffset()) {
  ------------------
  |  Branch (11113:13): [True: 0, False: 0]
  ------------------
11114|       |            // "The specified offset must be a multiple
11115|       |            // of the base alignment of the type of the block member it qualifies, or a compile-time error results."
11116|      0|            if (! IsMultipleOfPow2(memberQualifier.layoutOffset, memberAlignment))
  ------------------
  |  Branch (11116:17): [True: 0, False: 0]
  ------------------
11117|      0|                error(memberLoc, "must be a multiple of the member's alignment", "offset",
11118|      0|                    "(layout offset = %d | member alignment = %d)", memberQualifier.layoutOffset, memberAlignment);
11119|       |
11120|       |            // GLSL: "It is a compile-time error to specify an offset that is smaller than the offset of the previous
11121|       |            // member in the block or that lies within the previous member of the block"
11122|      0|            if (spvVersion.spv == 0) {
  ------------------
  |  Branch (11122:17): [True: 0, False: 0]
  ------------------
11123|      0|                if (memberQualifier.layoutOffset < offset)
  ------------------
  |  Branch (11123:21): [True: 0, False: 0]
  ------------------
11124|      0|                    error(memberLoc, "cannot lie in previous members", "offset", "");
11125|       |
11126|       |                // "The offset qualifier forces the qualified member to start at or after the specified
11127|       |                // integral-constant expression, which will be its byte offset from the beginning of the buffer.
11128|       |                // "The actual offset of a member is computed as
11129|       |                // follows: If offset was declared, start with that offset, otherwise start with the next available offset."
11130|      0|                offset = std::max(offset, memberQualifier.layoutOffset);
11131|      0|            } else {
11132|       |                // TODO: Vulkan: "It is a compile-time error to have any offset, explicit or assigned,
11133|       |                // that lies within another member of the block."
11134|       |
11135|      0|                offset = memberQualifier.layoutOffset;
11136|      0|            }
11137|      0|        }
11138|       |
11139|       |        // "The actual alignment of a member will be the greater of the specified align alignment and the standard
11140|       |        // (e.g., std140) base alignment for the member's type."
11141|      0|        if (memberQualifier.hasAlign())
  ------------------
  |  Branch (11141:13): [True: 0, False: 0]
  ------------------
11142|      0|            memberAlignment = std::max(memberAlignment, memberQualifier.layoutAlign);
11143|       |
11144|       |        // "If the resulting offset is not a multiple of the actual alignment,
11145|       |        // increase it to the first offset that is a multiple of
11146|       |        // the actual alignment."
11147|      0|        RoundToPow2(offset, memberAlignment);
11148|      0|        typeList[member].type->getQualifier().layoutOffset = offset;
11149|      0|        offset += memberSize;
11150|      0|    }
11151|      0|}
_ZN7glslang13TParseContext27fixBlockUniformLayoutMatrixERNS_10TQualifierEPNS_7TVectorINS_8TTypeLocEEES6_:
11159|     83|{
11160|     83|    assert(tmpTypeList == nullptr || originTypeList->size() == tmpTypeList->size());
11161|    500|    for (unsigned int member = 0; member < originTypeList->size(); ++member) {
  ------------------
  |  Branch (11161:35): [True: 417, False: 83]
  ------------------
11162|    417|        if (qualifier.layoutPacking != ElpNone) {
  ------------------
  |  Branch (11162:13): [True: 0, False: 417]
  ------------------
11163|      0|            if (tmpTypeList == nullptr) {
  ------------------
  |  Branch (11163:17): [True: 0, False: 0]
  ------------------
11164|      0|                if (((*originTypeList)[member].type->isMatrix() ||
  ------------------
  |  Branch (11164:22): [True: 0, False: 0]
  ------------------
11165|      0|                     (*originTypeList)[member].type->getBasicType() == EbtStruct) &&
  ------------------
  |  Branch (11165:22): [True: 0, False: 0]
  ------------------
11166|      0|                    (*originTypeList)[member].type->getQualifier().layoutMatrix == ElmNone) {
  ------------------
  |  Branch (11166:21): [True: 0, False: 0]
  ------------------
11167|      0|                    (*originTypeList)[member].type->getQualifier().layoutMatrix = qualifier.layoutMatrix;
11168|      0|                }
11169|      0|            } else {
11170|      0|                if (((*tmpTypeList)[member].type->isMatrix() ||
  ------------------
  |  Branch (11170:22): [True: 0, False: 0]
  ------------------
11171|      0|                     (*tmpTypeList)[member].type->getBasicType() == EbtStruct) &&
  ------------------
  |  Branch (11171:22): [True: 0, False: 0]
  ------------------
11172|      0|                    (*tmpTypeList)[member].type->getQualifier().layoutMatrix == ElmNone) {
  ------------------
  |  Branch (11172:21): [True: 0, False: 0]
  ------------------
11173|      0|                    (*tmpTypeList)[member].type->getQualifier().layoutMatrix = qualifier.layoutMatrix;
11174|      0|                }
11175|      0|            }
11176|      0|        }
11177|       |
11178|    417|        if ((*originTypeList)[member].type->getBasicType() == EbtStruct) {
  ------------------
  |  Branch (11178:13): [True: 0, False: 417]
  ------------------
11179|      0|            TQualifier* memberQualifier = nullptr;
11180|       |            // block member can be declare a matrix style, so it should be update to the member's style
11181|      0|            if ((*originTypeList)[member].type->getQualifier().layoutMatrix == ElmNone) {
  ------------------
  |  Branch (11181:17): [True: 0, False: 0]
  ------------------
11182|      0|                memberQualifier = &qualifier;
11183|      0|            } else {
11184|      0|                memberQualifier = &((*originTypeList)[member].type->getQualifier());
11185|      0|            }
11186|       |
11187|      0|            const TType* tmpType = tmpTypeList == nullptr ?
  ------------------
  |  Branch (11187:36): [True: 0, False: 0]
  ------------------
11188|      0|                (*originTypeList)[member].type->clone() : (*tmpTypeList)[member].type;
11189|       |
11190|      0|            fixBlockUniformLayoutMatrix(*memberQualifier, (*originTypeList)[member].type->getWritableStruct(),
11191|      0|                                        tmpType->getWritableStruct());
11192|       |
11193|      0|            const TTypeList* structure = recordStructCopy(matrixFixRecord, (*originTypeList)[member].type, tmpType);
11194|       |
11195|      0|            if (tmpTypeList == nullptr) {
  ------------------
  |  Branch (11195:17): [True: 0, False: 0]
  ------------------
11196|      0|                (*originTypeList)[member].type->setStruct(const_cast<TTypeList*>(structure));
11197|      0|            }
11198|      0|            if (tmpTypeList != nullptr) {
  ------------------
  |  Branch (11198:17): [True: 0, False: 0]
  ------------------
11199|      0|                (*tmpTypeList)[member].type->setStruct(const_cast<TTypeList*>(structure));
11200|      0|            }
11201|      0|        }
11202|    417|    }
11203|     83|}
_ZN7glslang13TParseContext28fixBlockUniformLayoutPackingERNS_10TQualifierEPNS_7TVectorINS_8TTypeLocEEES6_:
11211|     83|{
11212|     83|    assert(tmpTypeList == nullptr || originTypeList->size() == tmpTypeList->size());
11213|    500|    for (unsigned int member = 0; member < originTypeList->size(); ++member) {
  ------------------
  |  Branch (11213:35): [True: 417, False: 83]
  ------------------
11214|    417|        if (qualifier.layoutPacking != ElpNone) {
  ------------------
  |  Branch (11214:13): [True: 0, False: 417]
  ------------------
11215|      0|            if (tmpTypeList == nullptr) {
  ------------------
  |  Branch (11215:17): [True: 0, False: 0]
  ------------------
11216|      0|                if ((*originTypeList)[member].type->getQualifier().layoutPacking == ElpNone &&
  ------------------
  |  Branch (11216:21): [True: 0, False: 0]
  ------------------
11217|      0|                    !(*originTypeList)[member].type->isScalarOrVector()) {
  ------------------
  |  Branch (11217:21): [True: 0, False: 0]
  ------------------
11218|      0|                    (*originTypeList)[member].type->getQualifier().layoutPacking = qualifier.layoutPacking;
11219|      0|                }
11220|      0|            } else {
11221|      0|                if ((*tmpTypeList)[member].type->getQualifier().layoutPacking == ElpNone &&
  ------------------
  |  Branch (11221:21): [True: 0, False: 0]
  ------------------
11222|      0|                    !(*tmpTypeList)[member].type->isScalarOrVector()) {
  ------------------
  |  Branch (11222:21): [True: 0, False: 0]
  ------------------
11223|      0|                    (*tmpTypeList)[member].type->getQualifier().layoutPacking = qualifier.layoutPacking;
11224|      0|                }
11225|      0|            }
11226|      0|        }
11227|       |
11228|    417|        if ((*originTypeList)[member].type->getBasicType() == EbtStruct) {
  ------------------
  |  Branch (11228:13): [True: 0, False: 417]
  ------------------
11229|       |            // Deep copy the type in pool.
11230|       |            // Because, struct use in different block may have different layout qualifier.
11231|       |            // We have to new a object to distinguish between them.
11232|      0|            const TType* tmpType = tmpTypeList == nullptr ?
  ------------------
  |  Branch (11232:36): [True: 0, False: 0]
  ------------------
11233|      0|                (*originTypeList)[member].type->clone() : (*tmpTypeList)[member].type;
11234|       |
11235|      0|            fixBlockUniformLayoutPacking(qualifier, (*originTypeList)[member].type->getWritableStruct(),
11236|      0|                                         tmpType->getWritableStruct());
11237|       |
11238|      0|            const TTypeList* structure = recordStructCopy(packingFixRecord, (*originTypeList)[member].type, tmpType);
11239|       |
11240|      0|            if (tmpTypeList == nullptr) {
  ------------------
  |  Branch (11240:17): [True: 0, False: 0]
  ------------------
11241|      0|                (*originTypeList)[member].type->setStruct(const_cast<TTypeList*>(structure));
11242|      0|            }
11243|      0|            if (tmpTypeList != nullptr) {
  ------------------
  |  Branch (11243:17): [True: 0, False: 0]
  ------------------
11244|      0|                (*tmpTypeList)[member].type->setStruct(const_cast<TTypeList*>(structure));
11245|      0|            }
11246|      0|        }
11247|    417|    }
11248|     83|}
_ZN7glslang13TParseContext14invariantCheckERKNS_10TSourceLocERKNS_10TQualifierE:
11328|  50.7k|{
11329|  50.7k|    if (! qualifier.invariant)
  ------------------
  |  Branch (11329:9): [True: 50.7k, False: 0]
  ------------------
11330|  50.7k|        return;
11331|       |
11332|      0|    bool pipeOut = qualifier.isPipeOutput();
11333|      0|    bool pipeIn = qualifier.isPipeInput();
11334|      0|    if ((version >= 300 && isEsProfile()) || (!isEsProfile() && version >= 420)) {
  ------------------
  |  Branch (11334:10): [True: 0, False: 0]
  |  Branch (11334:28): [True: 0, False: 0]
  |  Branch (11334:47): [True: 0, False: 0]
  |  Branch (11334:65): [True: 0, False: 0]
  ------------------
11335|      0|        if (! pipeOut)
  ------------------
  |  Branch (11335:13): [True: 0, False: 0]
  ------------------
11336|      0|            error(loc, "can only apply to an output", "invariant", "");
11337|      0|    } else {
11338|      0|        if ((language == EShLangVertex && pipeIn) || (! pipeOut && ! pipeIn))
  ------------------
  |  Branch (11338:14): [True: 0, False: 0]
  |  Branch (11338:43): [True: 0, False: 0]
  |  Branch (11338:55): [True: 0, False: 0]
  |  Branch (11338:68): [True: 0, False: 0]
  ------------------
11339|      0|            error(loc, "can only apply to an output, or to an input in a non-vertex stage\n", "invariant", "");
11340|      0|    }
11341|      0|}
ParseHelper.cpp:_ZN7glslangL27storageCanHaveLayoutInBlockENS_17TStorageQualifierE:
 8099|    347|{
 8100|    347|    switch (storage) {
 8101|    264|    case EvqUniform:
  ------------------
  |  Branch (8101:5): [True: 264, False: 83]
  ------------------
 8102|    264|    case EvqBuffer:
  ------------------
  |  Branch (8102:5): [True: 0, False: 347]
  ------------------
 8103|    264|    case EvqShared:
  ------------------
  |  Branch (8103:5): [True: 0, False: 347]
  ------------------
 8104|    264|    case EvqSamplerHeap:
  ------------------
  |  Branch (8104:5): [True: 0, False: 347]
  ------------------
 8105|    264|    case EvqResourceHeap:
  ------------------
  |  Branch (8105:5): [True: 0, False: 347]
  ------------------
 8106|    264|        return true;
 8107|     83|    default:
  ------------------
  |  Branch (8107:5): [True: 83, False: 264]
  ------------------
 8108|     83|        return false;
 8109|    347|    }
 8110|    347|}

_ZN7glslang22GetThreadPoolAllocatorEv:
   59|  29.0M|{
   60|  29.0M|    return *(threadPoolAllocator ? threadPoolAllocator : GetDefaultThreadPoolAllocator());
  ------------------
  |  Branch (60:14): [True: 29.0M, False: 0]
  ------------------
   61|  29.0M|}
_ZN7glslang22SetThreadPoolAllocatorEPNS_14TPoolAllocatorE:
   65|    659|{
   66|    659|    threadPoolAllocator = poolAllocator;
   67|    659|}
_ZN7glslang14TPoolAllocatorC2Eii:
   74|    713|    pageSize(growthIncrement),
   75|    713|    alignment(allocationAlignment),
   76|    713|    freeList(nullptr),
   77|    713|    inUseList(nullptr),
   78|    713|    numCalls(0)
   79|    713|{
   80|       |    //
   81|       |    // Don't allow page sizes we know are smaller than all common
   82|       |    // OS page sizes.
   83|       |    //
   84|    713|    if (pageSize < 4*1024)
  ------------------
  |  Branch (84:9): [True: 0, False: 713]
  ------------------
   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|    713|    currentPageOffset = pageSize;
   92|       |
   93|       |    //
   94|       |    // Adjust alignment to be at least pointer aligned and
   95|       |    // power of 2.
   96|       |    //
   97|    713|    size_t minAlign = sizeof(void*);
   98|    713|    alignment &= ~(minAlign - 1);
   99|    713|    if (alignment < minAlign)
  ------------------
  |  Branch (99:9): [True: 0, False: 713]
  ------------------
  100|      0|        alignment = minAlign;
  101|    713|    size_t a = 1;
  102|  3.56k|    while (a < alignment)
  ------------------
  |  Branch (102:12): [True: 2.85k, False: 713]
  ------------------
  103|  2.85k|        a <<= 1;
  104|    713|    alignment = a;
  105|    713|    alignmentMask = a - 1;
  106|       |
  107|       |    //
  108|       |    // Align header skip
  109|       |    //
  110|    713|    headerSkip = minAlign;
  111|    713|    if (headerSkip < sizeof(tHeader)) {
  ------------------
  |  Branch (111:9): [True: 713, False: 0]
  ------------------
  112|    713|        headerSkip = (sizeof(tHeader) + alignmentMask) & ~alignmentMask;
  113|    713|    }
  114|       |
  115|    713|    push();
  116|    713|}
_ZN7glslang14TPoolAllocatorD2Ev:
  119|    713|{
  120|   198k|    while (inUseList) {
  ------------------
  |  Branch (120:12): [True: 198k, False: 713]
  ------------------
  121|   198k|        tHeader* next = inUseList->nextPage;
  122|   198k|        inUseList->~tHeader();
  123|   198k|        delete [] reinterpret_cast<char*>(inUseList);
  124|   198k|        inUseList = next;
  125|   198k|    }
  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|    713|    while (freeList) {
  ------------------
  |  Branch (134:12): [True: 0, False: 713]
  ------------------
  135|      0|        tHeader* next = freeList->nextPage;
  136|      0|        delete [] reinterpret_cast<char*>(freeList);
  137|      0|        freeList = next;
  138|      0|    }
  139|    713|}
_ZN7glslang14TPoolAllocator4pushEv:
  168|    933|{
  169|    933|    tAllocState state = { currentPageOffset, inUseList };
  170|       |
  171|    933|    stack.push_back(state);
  172|       |
  173|       |    //
  174|       |    // Indicate there is no current page to allocate from.
  175|       |    //
  176|    933|    currentPageOffset = pageSize;
  177|    933|}
_ZN7glslang14TPoolAllocator8allocateEm:
  225|  16.0M|{
  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|  16.0M|    size_t allocationSize = TAllocation::allocationSize(numBytes);
  232|       |
  233|       |    //
  234|       |    // Just keep some interesting statistics.
  235|       |    //
  236|  16.0M|    ++numCalls;
  237|  16.0M|    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|  16.0M|    if (currentPageOffset + allocationSize <= pageSize) {
  ------------------
  |  Branch (243:9): [True: 15.8M, False: 198k]
  ------------------
  244|       |        //
  245|       |        // Safe to allocate from currentPageOffset.
  246|       |        //
  247|  15.8M|        unsigned char* memory = reinterpret_cast<unsigned char*>(inUseList) + currentPageOffset;
  248|  15.8M|        currentPageOffset += allocationSize;
  249|  15.8M|        currentPageOffset = (currentPageOffset + alignmentMask) & ~alignmentMask;
  250|       |
  251|  15.8M|        return initializeAllocation(inUseList, memory, numBytes);
  252|  15.8M|    }
  253|       |
  254|   198k|    if (allocationSize + headerSkip > pageSize) {
  ------------------
  |  Branch (254:9): [True: 955, False: 197k]
  ------------------
  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|    955|        size_t numBytesToAlloc = allocationSize + headerSkip;
  260|    955|        tHeader* memory = reinterpret_cast<tHeader*>(::new char[numBytesToAlloc]);
  261|    955|        if (memory == nullptr)
  ------------------
  |  Branch (261:13): [True: 0, False: 955]
  ------------------
  262|      0|            return nullptr;
  263|       |
  264|       |        // Use placement-new to initialize header
  265|    955|        new(memory) tHeader(inUseList, (numBytesToAlloc + pageSize - 1) / pageSize);
  266|    955|        inUseList = memory;
  267|       |
  268|    955|        currentPageOffset = pageSize;  // make next allocation come from a new page
  269|       |
  270|       |        // No guard blocks for multi-page allocations (yet)
  271|    955|        return reinterpret_cast<void*>(reinterpret_cast<UINT_PTR>(memory) + headerSkip);
  272|    955|    }
  273|       |
  274|       |    //
  275|       |    // Need a simple page to allocate from.
  276|       |    //
  277|   197k|    tHeader* memory;
  278|   197k|    if (freeList) {
  ------------------
  |  Branch (278:9): [True: 0, False: 197k]
  ------------------
  279|      0|        memory = freeList;
  280|      0|        freeList = freeList->nextPage;
  281|   197k|    } else {
  282|   197k|        memory = reinterpret_cast<tHeader*>(::new char[pageSize]);
  283|   197k|        if (memory == nullptr)
  ------------------
  |  Branch (283:13): [True: 0, False: 197k]
  ------------------
  284|      0|            return nullptr;
  285|   197k|    }
  286|       |
  287|       |    // Use placement-new to initialize header
  288|   197k|    new(memory) tHeader(inUseList, 1);
  289|   197k|    inUseList = memory;
  290|       |
  291|   197k|    unsigned char* ret = reinterpret_cast<unsigned char*>(inUseList) + headerSkip;
  292|   197k|    currentPageOffset = (headerSkip + allocationSize + alignmentMask) & ~alignmentMask;
  293|       |
  294|   197k|    return initializeAllocation(inUseList, ret, numBytes);
  295|   197k|}

_ZN7glslang13TInputScanner17consumeWhiteSpaceERb:
   67|  2.07M|{
   68|  2.07M|    int c = peek();  // don't accidentally consume anything other than whitespace
   69|  2.73M|    while (c == ' ' || c == '\t' || c == '\r' || c == '\n') {
  ------------------
  |  Branch (69:12): [True: 17.2k, False: 2.72M]
  |  Branch (69:24): [True: 46.9k, False: 2.67M]
  |  Branch (69:37): [True: 487k, False: 2.18M]
  |  Branch (69:50): [True: 115k, False: 2.07M]
  ------------------
   70|   666k|        if (c == '\r' || c == '\n')
  ------------------
  |  Branch (70:13): [True: 487k, False: 179k]
  |  Branch (70:26): [True: 115k, False: 64.2k]
  ------------------
   71|   602k|            foundNonSpaceTab = true;
   72|   666k|        get();
   73|   666k|        c = peek();
   74|   666k|    }
   75|  2.07M|}
_ZN7glslang13TInputScanner14consumeCommentEv:
   79|  13.3k|{
   80|  13.3k|    if (peek() != '/')
  ------------------
  |  Branch (80:9): [True: 0, False: 13.3k]
  ------------------
   81|      0|        return false;
   82|       |
   83|  13.3k|    get();  // consume the '/'
   84|  13.3k|    int c = peek();
   85|  13.3k|    if (c == '/') {
  ------------------
  |  Branch (85:9): [True: 65, False: 13.3k]
  ------------------
   86|       |
   87|       |        // a '//' style comment
   88|     65|        get();  // consume the second '/'
   89|     65|        c = get();
   90|    321|        do {
   91|  60.6k|            while (c != EndOfInput && c != '\\' && c != '\r' && c != '\n')
  ------------------
  |  Branch (91:20): [True: 60.6k, False: 1]
  |  Branch (91:39): [True: 60.4k, False: 256]
  |  Branch (91:52): [True: 60.4k, False: 0]
  |  Branch (91:65): [True: 60.3k, False: 64]
  ------------------
   92|  60.3k|                c = get();
   93|       |
   94|    321|            if (c == EndOfInput || c == '\r' || c == '\n') {
  ------------------
  |  Branch (94:17): [True: 1, False: 320]
  |  Branch (94:36): [True: 0, False: 320]
  |  Branch (94:49): [True: 64, False: 256]
  ------------------
   95|    129|                while (c == '\r' || c == '\n')
  ------------------
  |  Branch (95:24): [True: 0, False: 129]
  |  Branch (95:37): [True: 64, False: 65]
  ------------------
   96|     64|                    c = get();
   97|       |
   98|       |                // we reached the end of the comment
   99|     65|                break;
  100|    256|            } else {
  101|       |                // it's a '\', so we need to keep going, after skipping what's escaped
  102|       |
  103|       |                // read the skipped character
  104|    256|                c = get();
  105|       |
  106|       |                // if it's a two-character newline, skip both characters
  107|    256|                if (c == '\r' && peek() == '\n')
  ------------------
  |  Branch (107:21): [True: 0, False: 256]
  |  Branch (107:34): [True: 0, False: 0]
  ------------------
  108|      0|                    get();
  109|    256|                c = get();
  110|    256|            }
  111|    321|        } while (true);
  ------------------
  |  Branch (111:18): [True: 256, Folded]
  ------------------
  112|       |
  113|       |        // put back the last non-comment character
  114|     65|        if (c != EndOfInput)
  ------------------
  |  Branch (114:13): [True: 64, False: 1]
  ------------------
  115|     64|            unget();
  116|       |
  117|     65|        return true;
  118|  13.3k|    } else if (c == '*') {
  ------------------
  |  Branch (118:16): [True: 0, False: 13.3k]
  ------------------
  119|       |
  120|       |        // a '/*' style comment
  121|      0|        get();  // consume the '*'
  122|      0|        c = get();
  123|      0|        do {
  124|      0|            while (c != EndOfInput && c != '*')
  ------------------
  |  Branch (124:20): [True: 0, False: 0]
  |  Branch (124:39): [True: 0, False: 0]
  ------------------
  125|      0|                c = get();
  126|      0|            if (c == '*') {
  ------------------
  |  Branch (126:17): [True: 0, False: 0]
  ------------------
  127|      0|                c = get();
  128|      0|                if (c == '/')
  ------------------
  |  Branch (128:21): [True: 0, False: 0]
  ------------------
  129|      0|                    break;  // end of comment
  130|       |                // not end of comment
  131|      0|            } else // end of input
  132|      0|                break;
  133|      0|        } while (true);
  ------------------
  |  Branch (133:18): [True: 0, Folded]
  ------------------
  134|       |
  135|      0|        return true;
  136|  13.3k|    } else {
  137|       |        // it's not a comment, put the '/' back
  138|  13.3k|        unget();
  139|       |
  140|  13.3k|        return false;
  141|  13.3k|    }
  142|  13.3k|}
_ZN7glslang13TInputScanner24consumeWhitespaceCommentERb:
  146|  2.07M|{
  147|  2.07M|    do {
  148|  2.07M|        consumeWhiteSpace(foundNonSpaceTab);
  149|       |
  150|       |        // if not starting a comment now, then done
  151|  2.07M|        int c = peek();
  152|  2.07M|        if (c != '/' || c == EndOfInput)
  ------------------
  |  Branch (152:13): [True: 2.05M, False: 13.3k]
  |  Branch (152:25): [True: 0, False: 13.3k]
  ------------------
  153|  2.05M|            return;
  154|       |
  155|       |        // skip potential comment
  156|  13.3k|        foundNonSpaceTab = true;
  157|  13.3k|        if (! consumeComment())
  ------------------
  |  Branch (157:13): [True: 13.3k, False: 65]
  ------------------
  158|  13.3k|            return;
  159|       |
  160|  13.3k|    } while (true);
  ------------------
  |  Branch (160:14): [True: 65, Folded]
  ------------------
  161|  2.07M|}
_ZN7glslang13TInputScanner11scanVersionERiR8EProfileRb:
  175|    105|{
  176|       |    // This function doesn't have to get all the semantics correct,
  177|       |    // just find the #version if there is a correct one present.
  178|       |    // The preprocessor will have the responsibility of getting all the semantics right.
  179|       |
  180|    105|    bool versionNotFirst = false;  // means not first WRT comments and white space, nothing more
  181|    105|    notFirstToken = false;         // means not first WRT to real tokens
  182|    105|    version = 0;                   // means not found
  183|    105|    profile = ENoProfile;
  184|       |
  185|    105|    bool foundNonSpaceTab = false;
  186|    105|    bool lookingInMiddle = false;
  187|    105|    int c;
  188|  2.07M|    do {
  189|  2.07M|        if (lookingInMiddle) {
  ------------------
  |  Branch (189:13): [True: 2.07M, False: 105]
  ------------------
  190|  2.07M|            notFirstToken = true;
  191|       |            // make forward progress by finishing off the current line plus extra new lines
  192|  2.07M|            if (peek() != '\n' && peek() != '\r') {
  ------------------
  |  Branch (192:17): [True: 323k, False: 1.74M]
  |  Branch (192:35): [True: 316k, False: 6.71k]
  ------------------
  193|  25.2M|                do {
  194|  25.2M|                    c = get();
  195|  25.2M|                } while (c != EndOfInput && c != '\n' && c != '\r');
  ------------------
  |  Branch (195:26): [True: 25.2M, False: 84]
  |  Branch (195:45): [True: 24.9M, False: 299k]
  |  Branch (195:58): [True: 24.8M, False: 17.4k]
  ------------------
  196|   316k|            }
  197|  8.15M|            while (peek() == '\n' || peek() == '\r')
  ------------------
  |  Branch (197:20): [True: 4.83M, False: 3.31M]
  |  Branch (197:38): [True: 1.24M, False: 2.07M]
  ------------------
  198|  6.08M|                get();
  199|  2.07M|            if (peek() == EndOfInput)
  ------------------
  |  Branch (199:17): [True: 94, False: 2.07M]
  ------------------
  200|     94|                return true;
  201|  2.07M|        }
  202|  2.07M|        lookingInMiddle = true;
  203|       |
  204|       |        // Nominal start, skipping the desktop allowed comments and white space, but tracking if
  205|       |        // something else was found for ES:
  206|  2.07M|        consumeWhitespaceComment(foundNonSpaceTab);
  207|  2.07M|        if (foundNonSpaceTab)
  ------------------
  |  Branch (207:13): [True: 253k, False: 1.81M]
  ------------------
  208|   253k|            versionNotFirst = true;
  209|       |
  210|       |        // "#"
  211|  2.07M|        if (get() != '#') {
  ------------------
  |  Branch (211:13): [True: 2.00M, False: 64.9k]
  ------------------
  212|  2.00M|            versionNotFirst = true;
  213|  2.00M|            continue;
  214|  2.00M|        }
  215|       |
  216|       |        // whitespace
  217|  64.9k|        do {
  218|  64.9k|            c = get();
  219|  64.9k|        } while (c == ' ' || c == '\t');
  ------------------
  |  Branch (219:18): [True: 3, False: 64.9k]
  |  Branch (219:30): [True: 0, False: 64.9k]
  ------------------
  220|       |
  221|       |        // "version"
  222|  64.9k|        if (    c != 'v' ||
  ------------------
  |  Branch (222:17): [True: 64.9k, False: 12]
  ------------------
  223|     12|            get() != 'e' ||
  ------------------
  |  Branch (223:13): [True: 1, False: 11]
  ------------------
  224|     11|            get() != 'r' ||
  ------------------
  |  Branch (224:13): [True: 0, False: 11]
  ------------------
  225|     11|            get() != 's' ||
  ------------------
  |  Branch (225:13): [True: 0, False: 11]
  ------------------
  226|     11|            get() != 'i' ||
  ------------------
  |  Branch (226:13): [True: 0, False: 11]
  ------------------
  227|     11|            get() != 'o' ||
  ------------------
  |  Branch (227:13): [True: 0, False: 11]
  ------------------
  228|  64.9k|            get() != 'n') {
  ------------------
  |  Branch (228:13): [True: 0, False: 11]
  ------------------
  229|  64.9k|            versionNotFirst = true;
  230|  64.9k|            continue;
  231|  64.9k|        }
  232|       |
  233|       |        // whitespace
  234|     22|        do {
  235|     22|            c = get();
  236|     22|        } while (c == ' ' || c == '\t');
  ------------------
  |  Branch (236:18): [True: 11, False: 11]
  |  Branch (236:30): [True: 0, False: 11]
  ------------------
  237|       |
  238|       |        // version number
  239|     44|        while (c >= '0' && c <= '9') {
  ------------------
  |  Branch (239:16): [True: 33, False: 11]
  |  Branch (239:28): [True: 33, False: 0]
  ------------------
  240|     33|            version = 10 * version + (c - '0');
  241|     33|            c = get();
  242|     33|        }
  243|     11|        if (version == 0) {
  ------------------
  |  Branch (243:13): [True: 0, False: 11]
  ------------------
  244|      0|            versionNotFirst = true;
  245|      0|            continue;
  246|      0|        }
  247|       |
  248|       |        // whitespace
  249|     19|        while (c == ' ' || c == '\t')
  ------------------
  |  Branch (249:16): [True: 8, False: 11]
  |  Branch (249:28): [True: 0, False: 11]
  ------------------
  250|      8|            c = get();
  251|       |
  252|       |        // profile
  253|     11|        const int maxProfileLength = 13;  // not including any 0
  254|     11|        char profileString[maxProfileLength];
  255|     11|        int profileLength;
  256|     43|        for (profileLength = 0; profileLength < maxProfileLength; ++profileLength) {
  ------------------
  |  Branch (256:33): [True: 43, False: 0]
  ------------------
  257|     43|            if (c == EndOfInput || c == ' ' || c == '\t' || c == '\n' || c == '\r')
  ------------------
  |  Branch (257:17): [True: 0, False: 43]
  |  Branch (257:36): [True: 0, False: 43]
  |  Branch (257:48): [True: 0, False: 43]
  |  Branch (257:61): [True: 9, False: 34]
  |  Branch (257:74): [True: 2, False: 32]
  ------------------
  258|     11|                break;
  259|     32|            profileString[profileLength] = (char)c;
  260|     32|            c = get();
  261|     32|        }
  262|     11|        if (c != EndOfInput && c != ' ' && c != '\t' && c != '\n' && c != '\r') {
  ------------------
  |  Branch (262:13): [True: 11, False: 0]
  |  Branch (262:32): [True: 11, False: 0]
  |  Branch (262:44): [True: 11, False: 0]
  |  Branch (262:57): [True: 2, False: 9]
  |  Branch (262:70): [True: 0, False: 2]
  ------------------
  263|      0|            versionNotFirst = true;
  264|      0|            continue;
  265|      0|        }
  266|       |
  267|     11|        if (profileLength == 2 && strncmp(profileString, "es", profileLength) == 0)
  ------------------
  |  Branch (267:13): [True: 0, False: 11]
  |  Branch (267:35): [True: 0, False: 0]
  ------------------
  268|      0|            profile = EEsProfile;
  269|     11|        else if (profileLength == 4 && strncmp(profileString, "core", profileLength) == 0)
  ------------------
  |  Branch (269:18): [True: 8, False: 3]
  |  Branch (269:40): [True: 8, False: 0]
  ------------------
  270|      8|            profile = ECoreProfile;
  271|      3|        else if (profileLength == 13 && strncmp(profileString, "compatibility", profileLength) == 0)
  ------------------
  |  Branch (271:18): [True: 0, False: 3]
  |  Branch (271:41): [True: 0, False: 0]
  ------------------
  272|      0|            profile = ECompatibilityProfile;
  273|       |
  274|     11|        return versionNotFirst;
  275|  2.07M|    } while (true);
  ------------------
  |  Branch (275:14): [True: 2.07M, Folded]
  ------------------
  276|    105|}
_Z5yylexP7YYSTYPERN7glslang13TParseContextE:
  293|  4.56M|{
  294|  4.56M|    glslang::TParserToken token(*glslangTokenDesc);
  295|       |
  296|  4.56M|    return parseContext.getScanContext()->tokenize(parseContext.getPpContext(), token);
  297|  4.56M|}
_ZN7glslang12TScanContext8tokenizeEPNS_10TPpContextERNS_12TParserTokenE:
  833|  4.56M|{
  834|  4.88M|    do {
  835|  4.88M|        parserToken = &token;
  836|  4.88M|        TPpToken ppToken;
  837|  4.88M|        int token = pp->tokenize(ppToken);
  838|  4.88M|        if (token == EndOfInput)
  ------------------
  |  Branch (838:13): [True: 528, False: 4.88M]
  ------------------
  839|    528|            return 0;
  840|       |
  841|  4.88M|        tokenText = ppToken.name;
  842|  4.88M|        loc = ppToken.loc;
  843|  4.88M|        parserToken->sType.lex.loc = loc;
  844|  4.88M|        switch (token) {
  845|   483k|        case ';':  afterType = false; afterBuffer = false; inDeclaratorList = false; afterDeclarator = false; angleBracketDepth = 0; squareBracketDepth = 0; parenDepth = 0; return SEMICOLON;
  ------------------
  |  Branch (845:9): [True: 483k, False: 4.39M]
  ------------------
  846|   631k|        case ',':
  ------------------
  |  Branch (846:9): [True: 631k, False: 4.24M]
  ------------------
  847|       |            // If we just processed a declarator (identifier after a type), this comma
  848|       |            // indicates that we're in a declarator list. Note that 'afterDeclarator' is
  849|       |            // only set when we are not inside a template parameter list, array expression,
  850|       |            // or function parameter list.
  851|   631k|            if (afterDeclarator) {
  ------------------
  |  Branch (851:17): [True: 0, False: 631k]
  ------------------
  852|      0|                inDeclaratorList = true;
  853|      0|            }
  854|   631k|            afterType = false;
  855|   631k|            afterDeclarator = false;
  856|   631k|            return COMMA;
  857|      0|        case ':':                       return COLON;
  ------------------
  |  Branch (857:9): [True: 0, False: 4.88M]
  ------------------
  858|  5.30k|        case '=':  afterType = false; inDeclaratorList = false; afterDeclarator = false; return EQUAL;
  ------------------
  |  Branch (858:9): [True: 5.30k, False: 4.87M]
  ------------------
  859|   470k|        case '(':  afterType = false; inDeclaratorList = false; afterDeclarator = false; parenDepth++; return LEFT_PAREN;
  ------------------
  |  Branch (859:9): [True: 470k, False: 4.41M]
  ------------------
  860|   470k|        case ')':  afterType = false; inDeclaratorList = false; afterDeclarator = false; if (parenDepth > 0) parenDepth--; return RIGHT_PAREN;
  ------------------
  |  Branch (860:9): [True: 470k, False: 4.41M]
  |  Branch (860:94): [True: 470k, False: 0]
  ------------------
  861|  1.48k|        case '.':  field = true;        return DOT;
  ------------------
  |  Branch (861:9): [True: 1.48k, False: 4.87M]
  ------------------
  862|      0|        case '!':                       return BANG;
  ------------------
  |  Branch (862:9): [True: 0, False: 4.88M]
  ------------------
  863|    103|        case '-':                       return DASH;
  ------------------
  |  Branch (863:9): [True: 103, False: 4.88M]
  ------------------
  864|      0|        case '~':                       return TILDE;
  ------------------
  |  Branch (864:9): [True: 0, False: 4.88M]
  ------------------
  865|      3|        case '+':                       return PLUS;
  ------------------
  |  Branch (865:9): [True: 3, False: 4.88M]
  ------------------
  866|      0|        case '*':                       return STAR;
  ------------------
  |  Branch (866:9): [True: 0, False: 4.88M]
  ------------------
  867|      0|        case '/':                       return SLASH;
  ------------------
  |  Branch (867:9): [True: 0, False: 4.88M]
  ------------------
  868|      0|        case '%':                       return PERCENT;
  ------------------
  |  Branch (868:9): [True: 0, False: 4.88M]
  ------------------
  869|      0|        case '<':                       angleBracketDepth++; return LEFT_ANGLE;
  ------------------
  |  Branch (869:9): [True: 0, False: 4.88M]
  ------------------
  870|      1|        case '>':                       if (angleBracketDepth > 0) angleBracketDepth--; return RIGHT_ANGLE;
  ------------------
  |  Branch (870:9): [True: 1, False: 4.88M]
  |  Branch (870:45): [True: 0, False: 1]
  ------------------
  871|      0|        case '|':                       return VERTICAL_BAR;
  ------------------
  |  Branch (871:9): [True: 0, False: 4.88M]
  ------------------
  872|      0|        case '^':                       return CARET;
  ------------------
  |  Branch (872:9): [True: 0, False: 4.88M]
  ------------------
  873|      0|        case '&':                       return AMPERSAND;
  ------------------
  |  Branch (873:9): [True: 0, False: 4.88M]
  ------------------
  874|      0|        case '?':                       return QUESTION;
  ------------------
  |  Branch (874:9): [True: 0, False: 4.88M]
  ------------------
  875|  10.2k|        case '[':                       squareBracketDepth++; return LEFT_BRACKET;
  ------------------
  |  Branch (875:9): [True: 10.2k, False: 4.87M]
  ------------------
  876|  10.2k|        case ']':                       if (squareBracketDepth > 0) squareBracketDepth--; return RIGHT_BRACKET;
  ------------------
  |  Branch (876:9): [True: 10.2k, False: 4.87M]
  |  Branch (876:45): [True: 10.2k, False: 0]
  ------------------
  877|    350|        case '{':  afterStruct = false; afterBuffer = false; inDeclaratorList = false; afterDeclarator = false; angleBracketDepth = 0; squareBracketDepth = 0; parenDepth = 0; return LEFT_BRACE;
  ------------------
  |  Branch (877:9): [True: 350, False: 4.88M]
  ------------------
  878|    339|        case '}':  inDeclaratorList = false; afterDeclarator = false; angleBracketDepth = 0; squareBracketDepth = 0; parenDepth = 0; return RIGHT_BRACE;
  ------------------
  |  Branch (878:9): [True: 339, False: 4.88M]
  ------------------
  879|      0|        case '\\':
  ------------------
  |  Branch (879:9): [True: 0, False: 4.88M]
  ------------------
  880|      0|            parseContext.error(loc, "illegal use of escape character", "\\", "");
  881|      0|            break;
  882|       |
  883|  1.62k|        case PPAtomAddAssign:          return ADD_ASSIGN;
  ------------------
  |  Branch (883:9): [True: 1.62k, False: 4.87M]
  ------------------
  884|      0|        case PPAtomSubAssign:          return SUB_ASSIGN;
  ------------------
  |  Branch (884:9): [True: 0, False: 4.88M]
  ------------------
  885|      0|        case PPAtomMulAssign:          return MUL_ASSIGN;
  ------------------
  |  Branch (885:9): [True: 0, False: 4.88M]
  ------------------
  886|      0|        case PPAtomDivAssign:          return DIV_ASSIGN;
  ------------------
  |  Branch (886:9): [True: 0, False: 4.88M]
  ------------------
  887|      0|        case PPAtomModAssign:          return MOD_ASSIGN;
  ------------------
  |  Branch (887:9): [True: 0, False: 4.88M]
  ------------------
  888|       |
  889|      0|        case PpAtomRight:              return RIGHT_OP;
  ------------------
  |  Branch (889:9): [True: 0, False: 4.88M]
  ------------------
  890|      0|        case PpAtomLeft:               return LEFT_OP;
  ------------------
  |  Branch (890:9): [True: 0, False: 4.88M]
  ------------------
  891|       |
  892|      0|        case PpAtomRightAssign:        return RIGHT_ASSIGN;
  ------------------
  |  Branch (892:9): [True: 0, False: 4.88M]
  ------------------
  893|      0|        case PpAtomLeftAssign:         return LEFT_ASSIGN;
  ------------------
  |  Branch (893:9): [True: 0, False: 4.88M]
  ------------------
  894|      0|        case PpAtomAndAssign:          return AND_ASSIGN;
  ------------------
  |  Branch (894:9): [True: 0, False: 4.88M]
  ------------------
  895|      0|        case PpAtomOrAssign:           return OR_ASSIGN;
  ------------------
  |  Branch (895:9): [True: 0, False: 4.88M]
  ------------------
  896|      0|        case PpAtomXorAssign:          return XOR_ASSIGN;
  ------------------
  |  Branch (896:9): [True: 0, False: 4.88M]
  ------------------
  897|       |
  898|      0|        case PpAtomAnd:                return AND_OP;
  ------------------
  |  Branch (898:9): [True: 0, False: 4.88M]
  ------------------
  899|      0|        case PpAtomOr:                 return OR_OP;
  ------------------
  |  Branch (899:9): [True: 0, False: 4.88M]
  ------------------
  900|      0|        case PpAtomXor:                return XOR_OP;
  ------------------
  |  Branch (900:9): [True: 0, False: 4.88M]
  ------------------
  901|       |
  902|      0|        case PpAtomEQ:                 return EQ_OP;
  ------------------
  |  Branch (902:9): [True: 0, False: 4.88M]
  ------------------
  903|      0|        case PpAtomGE:                 return GE_OP;
  ------------------
  |  Branch (903:9): [True: 0, False: 4.88M]
  ------------------
  904|      0|        case PpAtomNE:                 return NE_OP;
  ------------------
  |  Branch (904:9): [True: 0, False: 4.88M]
  ------------------
  905|      0|        case PpAtomLE:                 return LE_OP;
  ------------------
  |  Branch (905:9): [True: 0, False: 4.88M]
  ------------------
  906|       |
  907|      0|        case PpAtomDecrement:          return DEC_OP;
  ------------------
  |  Branch (907:9): [True: 0, False: 4.88M]
  ------------------
  908|      0|        case PpAtomIncrement:          return INC_OP;
  ------------------
  |  Branch (908:9): [True: 0, False: 4.88M]
  ------------------
  909|       |
  910|      6|        case PpAtomColonColon:
  ------------------
  |  Branch (910:9): [True: 6, False: 4.88M]
  ------------------
  911|      6|            parseContext.error(loc, "not supported", "::", "");
  912|      6|            break;
  913|       |
  914|      0|        case PpAtomConstString:        parserToken->sType.lex.string = NewPoolTString(tokenText);     return STRING_LITERAL;
  ------------------
  |  Branch (914:9): [True: 0, False: 4.88M]
  ------------------
  915|  8.37k|        case PpAtomConstInt:           parserToken->sType.lex.i    = ppToken.ival;       return INTCONSTANT;
  ------------------
  |  Branch (915:9): [True: 8.37k, False: 4.87M]
  ------------------
  916|    322|        case PpAtomConstUint:          parserToken->sType.lex.i    = ppToken.ival;       return UINTCONSTANT;
  ------------------
  |  Branch (916:9): [True: 322, False: 4.88M]
  ------------------
  917|    219|        case PpAtomConstFloat:         parserToken->sType.lex.d    = ppToken.dval;       return FLOATCONSTANT;
  ------------------
  |  Branch (917:9): [True: 219, False: 4.88M]
  ------------------
  918|      0|        case PpAtomConstInt16:         parserToken->sType.lex.i    = ppToken.ival;       return INT16CONSTANT;
  ------------------
  |  Branch (918:9): [True: 0, False: 4.88M]
  ------------------
  919|      0|        case PpAtomConstUint16:        parserToken->sType.lex.i    = ppToken.ival;       return UINT16CONSTANT;
  ------------------
  |  Branch (919:9): [True: 0, False: 4.88M]
  ------------------
  920|      0|        case PpAtomConstInt64:         parserToken->sType.lex.i64  = ppToken.i64val;     return INT64CONSTANT;
  ------------------
  |  Branch (920:9): [True: 0, False: 4.88M]
  ------------------
  921|      0|        case PpAtomConstUint64:        parserToken->sType.lex.i64  = ppToken.i64val;     return UINT64CONSTANT;
  ------------------
  |  Branch (921:9): [True: 0, False: 4.88M]
  ------------------
  922|      0|        case PpAtomConstDouble:        parserToken->sType.lex.d    = ppToken.dval;       return DOUBLECONSTANT;
  ------------------
  |  Branch (922:9): [True: 0, False: 4.88M]
  ------------------
  923|      0|        case PpAtomConstFloat16:       parserToken->sType.lex.d    = ppToken.dval;       return FLOAT16CONSTANT;
  ------------------
  |  Branch (923:9): [True: 0, False: 4.88M]
  ------------------
  924|  2.47M|        case PpAtomIdentifier:
  ------------------
  |  Branch (924:9): [True: 2.47M, False: 2.40M]
  ------------------
  925|  2.47M|        {
  926|  2.47M|            int token = tokenizeIdentifier();
  927|  2.47M|            field = false;
  928|  2.47M|            return token;
  929|      0|        }
  930|       |
  931|      0|        case EndOfInput:               return 0;
  ------------------
  |  Branch (931:9): [True: 0, False: 4.88M]
  ------------------
  932|       |
  933|   312k|        default:
  ------------------
  |  Branch (933:9): [True: 312k, False: 4.56M]
  ------------------
  934|   312k|            char buf[2];
  935|   312k|            buf[0] = (char)token;
  936|   312k|            buf[1] = 0;
  937|   312k|            parseContext.error(loc, "unexpected token", buf, "");
  938|   312k|            break;
  939|  4.88M|        }
  940|  4.88M|    } while (true);
  ------------------
  |  Branch (940:14): [True: 312k, Folded]
  ------------------
  941|  4.56M|}
_ZN7glslang12TScanContext18tokenizeIdentifierEv:
  944|  2.47M|{
  945|  2.47M|    if (ReservedSet.find(tokenText) != ReservedSet.end())
  ------------------
  |  Branch (945:9): [True: 0, False: 2.47M]
  ------------------
  946|      0|        return reservedWord();
  947|       |
  948|  2.47M|    auto it = KeywordMap.find(tokenText);
  949|  2.47M|    if (it == KeywordMap.end()) {
  ------------------
  |  Branch (949:9): [True: 620k, False: 1.85M]
  ------------------
  950|       |        // Should have an identifier of some sort
  951|   620k|        return identifierOrType();
  952|   620k|    }
  953|  1.85M|    keyword = it->second;
  954|       |
  955|  1.85M|    switch (keyword) {
  956|  4.15k|    case CONST:
  ------------------
  |  Branch (956:5): [True: 4.15k, False: 1.84M]
  ------------------
  957|  4.55k|    case UNIFORM:
  ------------------
  |  Branch (957:5): [True: 399, False: 1.85M]
  ------------------
  958|  4.55k|    case TILEIMAGEEXT:
  ------------------
  |  Branch (958:5): [True: 0, False: 1.85M]
  ------------------
  959|  12.3k|    case IN:
  ------------------
  |  Branch (959:5): [True: 7.77k, False: 1.84M]
  ------------------
  960|  24.9k|    case OUT:
  ------------------
  |  Branch (960:5): [True: 12.5k, False: 1.84M]
  ------------------
  961|  25.5k|    case INOUT:
  ------------------
  |  Branch (961:5): [True: 652, False: 1.85M]
  ------------------
  962|  25.5k|    case BREAK:
  ------------------
  |  Branch (962:5): [True: 0, False: 1.85M]
  ------------------
  963|  25.5k|    case CONTINUE:
  ------------------
  |  Branch (963:5): [True: 0, False: 1.85M]
  ------------------
  964|  25.5k|    case DO:
  ------------------
  |  Branch (964:5): [True: 0, False: 1.85M]
  ------------------
  965|  25.5k|    case FOR:
  ------------------
  |  Branch (965:5): [True: 0, False: 1.85M]
  ------------------
  966|  25.5k|    case WHILE:
  ------------------
  |  Branch (966:5): [True: 0, False: 1.85M]
  ------------------
  967|  25.5k|    case IF:
  ------------------
  |  Branch (967:5): [True: 0, False: 1.85M]
  ------------------
  968|  25.5k|    case ELSE:
  ------------------
  |  Branch (968:5): [True: 0, False: 1.85M]
  ------------------
  969|  25.5k|    case DISCARD:
  ------------------
  |  Branch (969:5): [True: 0, False: 1.85M]
  ------------------
  970|  25.8k|    case RETURN:
  ------------------
  |  Branch (970:5): [True: 234, False: 1.85M]
  ------------------
  971|  25.8k|    case CASE:
  ------------------
  |  Branch (971:5): [True: 0, False: 1.85M]
  ------------------
  972|  25.8k|        return keyword;
  973|       |
  974|      0|    case TERMINATE_INVOCATION:
  ------------------
  |  Branch (974:5): [True: 0, False: 1.85M]
  ------------------
  975|      0|        if (!parseContext.extensionTurnedOn(E_GL_EXT_terminate_invocation))
  ------------------
  |  Branch (975:13): [True: 0, False: 0]
  ------------------
  976|      0|            return identifierOrType();
  977|      0|        return keyword;
  978|       |
  979|      0|    case TERMINATE_RAY:
  ------------------
  |  Branch (979:5): [True: 0, False: 1.85M]
  ------------------
  980|      0|    case IGNORE_INTERSECTION:
  ------------------
  |  Branch (980:5): [True: 0, False: 1.85M]
  ------------------
  981|      0|        if (!parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing))
  ------------------
  |  Branch (981:13): [True: 0, False: 0]
  ------------------
  982|      0|            return identifierOrType();
  983|      0|        return keyword;
  984|       |
  985|      0|    case BUFFER:
  ------------------
  |  Branch (985:5): [True: 0, False: 1.85M]
  ------------------
  986|      0|        afterBuffer = true;
  987|      0|        if ((parseContext.isEsProfile() && parseContext.version < 310) ||
  ------------------
  |  Branch (987:14): [True: 0, False: 0]
  |  Branch (987:44): [True: 0, False: 0]
  ------------------
  988|      0|            (!parseContext.isEsProfile() && (parseContext.version < 430 &&
  ------------------
  |  Branch (988:14): [True: 0, False: 0]
  |  Branch (988:46): [True: 0, False: 0]
  ------------------
  989|      0|            !parseContext.extensionTurnedOn(E_GL_ARB_shader_storage_buffer_object))))
  ------------------
  |  Branch (989:13): [True: 0, False: 0]
  ------------------
  990|      0|            return identifierOrType();
  991|      0|        return keyword;
  992|       |
  993|     10|    case STRUCT:
  ------------------
  |  Branch (993:5): [True: 10, False: 1.85M]
  ------------------
  994|     10|        afterStruct = true;
  995|     10|        return keyword;
  996|       |
  997|      0|    case SWITCH:
  ------------------
  |  Branch (997:5): [True: 0, False: 1.85M]
  ------------------
  998|      0|    case DEFAULT:
  ------------------
  |  Branch (998:5): [True: 0, False: 1.85M]
  ------------------
  999|      0|        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (999:14): [True: 0, False: 0]
  |  Branch (999:44): [True: 0, False: 0]
  ------------------
 1000|      0|            (!parseContext.isEsProfile() && parseContext.version < 130))
  ------------------
  |  Branch (1000:14): [True: 0, False: 0]
  |  Branch (1000:45): [True: 0, False: 0]
  ------------------
 1001|      0|            reservedWord();
 1002|      0|        return keyword;
 1003|       |
 1004|  12.1k|    case VOID:
  ------------------
  |  Branch (1004:5): [True: 12.1k, False: 1.84M]
  ------------------
 1005|  27.9k|    case BOOL:
  ------------------
  |  Branch (1005:5): [True: 15.8k, False: 1.83M]
  ------------------
 1006|   108k|    case FLOAT:
  ------------------
  |  Branch (1006:5): [True: 80.7k, False: 1.77M]
  ------------------
 1007|   316k|    case INT:
  ------------------
  |  Branch (1007:5): [True: 208k, False: 1.64M]
  ------------------
 1008|   327k|    case BVEC2:
  ------------------
  |  Branch (1008:5): [True: 10.2k, False: 1.84M]
  ------------------
 1009|   337k|    case BVEC3:
  ------------------
  |  Branch (1009:5): [True: 10.2k, False: 1.84M]
  ------------------
 1010|   347k|    case BVEC4:
  ------------------
  |  Branch (1010:5): [True: 10.2k, False: 1.84M]
  ------------------
 1011|   408k|    case VEC2:
  ------------------
  |  Branch (1011:5): [True: 61.4k, False: 1.79M]
  ------------------
 1012|   461k|    case VEC3:
  ------------------
  |  Branch (1012:5): [True: 52.0k, False: 1.80M]
  ------------------
 1013|   528k|    case VEC4:
  ------------------
  |  Branch (1013:5): [True: 67.5k, False: 1.78M]
  ------------------
 1014|   595k|    case IVEC2:
  ------------------
  |  Branch (1014:5): [True: 66.7k, False: 1.78M]
  ------------------
 1015|   648k|    case IVEC3:
  ------------------
  |  Branch (1015:5): [True: 52.9k, False: 1.80M]
  ------------------
 1016|   689k|    case IVEC4:
  ------------------
  |  Branch (1016:5): [True: 40.8k, False: 1.81M]
  ------------------
 1017|   689k|    case MAT2:
  ------------------
  |  Branch (1017:5): [True: 588, False: 1.85M]
  ------------------
 1018|   690k|    case MAT3:
  ------------------
  |  Branch (1018:5): [True: 588, False: 1.85M]
  ------------------
 1019|   690k|    case MAT4:
  ------------------
  |  Branch (1019:5): [True: 588, False: 1.85M]
  ------------------
 1020|   696k|    case SAMPLER2D:
  ------------------
  |  Branch (1020:5): [True: 6.04k, False: 1.84M]
  ------------------
 1021|   697k|    case SAMPLERCUBE:
  ------------------
  |  Branch (1021:5): [True: 988, False: 1.85M]
  ------------------
 1022|   697k|        afterType = true;
 1023|   697k|        return keyword;
 1024|       |
 1025|      0|    case BOOLCONSTANT:
  ------------------
  |  Branch (1025:5): [True: 0, False: 1.85M]
  ------------------
 1026|      0|        if (strcmp("true", tokenText) == 0)
  ------------------
  |  Branch (1026:13): [True: 0, False: 0]
  ------------------
 1027|      0|            parserToken->sType.lex.b = true;
 1028|      0|        else
 1029|      0|            parserToken->sType.lex.b = false;
 1030|      0|        return keyword;
 1031|       |
 1032|      0|    case SMOOTH:
  ------------------
  |  Branch (1032:5): [True: 0, False: 1.85M]
  ------------------
 1033|      0|        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (1033:14): [True: 0, False: 0]
  |  Branch (1033:44): [True: 0, False: 0]
  ------------------
 1034|      0|            (!parseContext.isEsProfile() && parseContext.version < 130))
  ------------------
  |  Branch (1034:14): [True: 0, False: 0]
  |  Branch (1034:45): [True: 0, False: 0]
  ------------------
 1035|      0|            return identifierOrType();
 1036|      0|        return keyword;
 1037|  2.04k|    case FLAT:
  ------------------
  |  Branch (1037:5): [True: 2.04k, False: 1.85M]
  ------------------
 1038|  2.04k|        if (parseContext.isEsProfile() && parseContext.version < 300)
  ------------------
  |  Branch (1038:13): [True: 0, False: 2.04k]
  |  Branch (1038:43): [True: 0, False: 0]
  ------------------
 1039|      0|            reservedWord();
 1040|  2.04k|        else if (!parseContext.isEsProfile() && parseContext.version < 130)
  ------------------
  |  Branch (1040:18): [True: 2.04k, False: 0]
  |  Branch (1040:49): [True: 0, False: 2.04k]
  ------------------
 1041|      0|            return identifierOrType();
 1042|  2.04k|        return keyword;
 1043|      0|    case CENTROID:
  ------------------
  |  Branch (1043:5): [True: 0, False: 1.85M]
  ------------------
 1044|      0|        if (parseContext.version < 120)
  ------------------
  |  Branch (1044:13): [True: 0, False: 0]
  ------------------
 1045|      0|            return identifierOrType();
 1046|      0|        return keyword;
 1047|      0|    case INVARIANT:
  ------------------
  |  Branch (1047:5): [True: 0, False: 1.85M]
  ------------------
 1048|      0|        if (!parseContext.isEsProfile() && parseContext.version < 120)
  ------------------
  |  Branch (1048:13): [True: 0, False: 0]
  |  Branch (1048:44): [True: 0, False: 0]
  ------------------
 1049|      0|            return identifierOrType();
 1050|      0|        return keyword;
 1051|      0|    case PACKED:
  ------------------
  |  Branch (1051:5): [True: 0, False: 1.85M]
  ------------------
 1052|      0|        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (1052:14): [True: 0, False: 0]
  |  Branch (1052:44): [True: 0, False: 0]
  ------------------
 1053|      0|            (!parseContext.isEsProfile() && parseContext.version < 140))
  ------------------
  |  Branch (1053:14): [True: 0, False: 0]
  |  Branch (1053:45): [True: 0, False: 0]
  ------------------
 1054|      0|            return reservedWord();
 1055|      0|        return identifierOrType();
 1056|       |
 1057|      0|    case RESOURCE:
  ------------------
  |  Branch (1057:5): [True: 0, False: 1.85M]
  ------------------
 1058|      0|    {
 1059|      0|        bool reserved = (parseContext.isEsProfile() && parseContext.version >= 300) ||
  ------------------
  |  Branch (1059:26): [True: 0, False: 0]
  |  Branch (1059:56): [True: 0, False: 0]
  ------------------
 1060|      0|                        (!parseContext.isEsProfile() && parseContext.version >= 420);
  ------------------
  |  Branch (1060:26): [True: 0, False: 0]
  |  Branch (1060:57): [True: 0, False: 0]
  ------------------
 1061|      0|        return identifierOrReserved(reserved);
 1062|      0|    }
 1063|      0|    case SUPERP:
  ------------------
  |  Branch (1063:5): [True: 0, False: 1.85M]
  ------------------
 1064|      0|    {
 1065|      0|        bool reserved = parseContext.isEsProfile() || parseContext.version >= 130;
  ------------------
  |  Branch (1065:25): [True: 0, False: 0]
  |  Branch (1065:55): [True: 0, False: 0]
  ------------------
 1066|      0|        return identifierOrReserved(reserved);
 1067|      0|    }
 1068|       |
 1069|      0|    case NOPERSPECTIVE:
  ------------------
  |  Branch (1069:5): [True: 0, False: 1.85M]
  ------------------
 1070|      0|        if (parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation))
  ------------------
  |  Branch (1070:13): [True: 0, False: 0]
  ------------------
 1071|      0|            return keyword;
 1072|      0|        return es30ReservedFromGLSL(130);
 1073|       |
 1074|      0|    case NONUNIFORM:
  ------------------
  |  Branch (1074:5): [True: 0, False: 1.85M]
  ------------------
 1075|      0|        if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
  ------------------
  |  Branch (1075:13): [True: 0, False: 0]
  ------------------
 1076|      0|            return keyword;
 1077|      0|        else
 1078|      0|            return identifierOrType();
 1079|      0|    case ATTRIBUTE:
  ------------------
  |  Branch (1079:5): [True: 0, False: 1.85M]
  ------------------
 1080|      0|    case VARYING:
  ------------------
  |  Branch (1080:5): [True: 0, False: 1.85M]
  ------------------
 1081|      0|        if (parseContext.isEsProfile() && parseContext.version >= 300)
  ------------------
  |  Branch (1081:13): [True: 0, False: 0]
  |  Branch (1081:43): [True: 0, False: 0]
  ------------------
 1082|      0|            reservedWord();
 1083|      0|        return keyword;
 1084|      0|    case PAYLOADNV:
  ------------------
  |  Branch (1084:5): [True: 0, False: 1.85M]
  ------------------
 1085|      0|    case PAYLOADINNV:
  ------------------
  |  Branch (1085:5): [True: 0, False: 1.85M]
  ------------------
 1086|      0|    case HITATTRNV:
  ------------------
  |  Branch (1086:5): [True: 0, False: 1.85M]
  ------------------
 1087|      0|    case CALLDATANV:
  ------------------
  |  Branch (1087:5): [True: 0, False: 1.85M]
  ------------------
 1088|      0|    case CALLDATAINNV:
  ------------------
  |  Branch (1088:5): [True: 0, False: 1.85M]
  ------------------
 1089|      0|    case ACCSTRUCTNV:
  ------------------
  |  Branch (1089:5): [True: 0, False: 1.85M]
  ------------------
 1090|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1090:13): [True: 0, False: 0]
  ------------------
 1091|      0|            parseContext.extensionTurnedOn(E_GL_NV_ray_tracing))
  ------------------
  |  Branch (1091:13): [True: 0, False: 0]
  ------------------
 1092|      0|            return keyword;
 1093|      0|        return identifierOrType();
 1094|      0|    case ACCSTRUCTEXT:
  ------------------
  |  Branch (1094:5): [True: 0, False: 1.85M]
  ------------------
 1095|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1095:13): [True: 0, False: 0]
  ------------------
 1096|      0|            parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing) ||
  ------------------
  |  Branch (1096:13): [True: 0, False: 0]
  ------------------
 1097|      0|            parseContext.extensionTurnedOn(E_GL_EXT_ray_query) ||
  ------------------
  |  Branch (1097:13): [True: 0, False: 0]
  ------------------
 1098|      0|            parseContext.extensionTurnedOn(E_GL_NV_displacement_micromap))
  ------------------
  |  Branch (1098:13): [True: 0, False: 0]
  ------------------
 1099|      0|            return keyword;
 1100|      0|        return identifierOrType();
 1101|      0|    case PAYLOADEXT:
  ------------------
  |  Branch (1101:5): [True: 0, False: 1.85M]
  ------------------
 1102|      0|    case PAYLOADINEXT:
  ------------------
  |  Branch (1102:5): [True: 0, False: 1.85M]
  ------------------
 1103|      0|    case HITATTREXT:
  ------------------
  |  Branch (1103:5): [True: 0, False: 1.85M]
  ------------------
 1104|      0|    case CALLDATAEXT:
  ------------------
  |  Branch (1104:5): [True: 0, False: 1.85M]
  ------------------
 1105|      0|    case CALLDATAINEXT:
  ------------------
  |  Branch (1105:5): [True: 0, False: 1.85M]
  ------------------
 1106|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1106:13): [True: 0, False: 0]
  ------------------
 1107|      0|            parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing) ||
  ------------------
  |  Branch (1107:13): [True: 0, False: 0]
  ------------------
 1108|      0|            parseContext.extensionTurnedOn(E_GL_EXT_ray_query))
  ------------------
  |  Branch (1108:13): [True: 0, False: 0]
  ------------------
 1109|      0|            return keyword;
 1110|      0|        return identifierOrType();
 1111|      0|    case RAYQUERYEXT:
  ------------------
  |  Branch (1111:5): [True: 0, False: 1.85M]
  ------------------
 1112|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1112:13): [True: 0, False: 0]
  ------------------
 1113|      0|            (!parseContext.isEsProfile() && parseContext.version >= 460
  ------------------
  |  Branch (1113:14): [True: 0, False: 0]
  |  Branch (1113:45): [True: 0, False: 0]
  ------------------
 1114|      0|                 && parseContext.extensionTurnedOn(E_GL_EXT_ray_query)))
  ------------------
  |  Branch (1114:21): [True: 0, False: 0]
  ------------------
 1115|      0|            return keyword;
 1116|      0|        return identifierOrType();
 1117|      0|    case ATOMIC_UINT:
  ------------------
  |  Branch (1117:5): [True: 0, False: 1.85M]
  ------------------
 1118|      0|        if ((parseContext.isEsProfile() && parseContext.version >= 310) ||
  ------------------
  |  Branch (1118:14): [True: 0, False: 0]
  |  Branch (1118:44): [True: 0, False: 0]
  ------------------
 1119|      0|            parseContext.extensionTurnedOn(E_GL_ARB_shader_atomic_counters))
  ------------------
  |  Branch (1119:13): [True: 0, False: 0]
  ------------------
 1120|      0|            return keyword;
 1121|      0|        return es30ReservedFromGLSL(420);
 1122|       |
 1123|  52.0k|    case COHERENT:
  ------------------
  |  Branch (1123:5): [True: 52.0k, False: 1.80M]
  ------------------
 1124|  52.0k|    case DEVICECOHERENT:
  ------------------
  |  Branch (1124:5): [True: 0, False: 1.85M]
  ------------------
 1125|  52.0k|    case QUEUEFAMILYCOHERENT:
  ------------------
  |  Branch (1125:5): [True: 0, False: 1.85M]
  ------------------
 1126|  52.0k|    case WORKGROUPCOHERENT:
  ------------------
  |  Branch (1126:5): [True: 0, False: 1.85M]
  ------------------
 1127|  52.0k|    case SUBGROUPCOHERENT:
  ------------------
  |  Branch (1127:5): [True: 0, False: 1.85M]
  ------------------
 1128|  52.0k|    case SHADERCALLCOHERENT:
  ------------------
  |  Branch (1128:5): [True: 0, False: 1.85M]
  ------------------
 1129|  52.0k|    case NONPRIVATE:
  ------------------
  |  Branch (1129:5): [True: 0, False: 1.85M]
  ------------------
 1130|  52.0k|    case RESTRICT:
  ------------------
  |  Branch (1130:5): [True: 0, False: 1.85M]
  ------------------
 1131|  56.5k|    case READONLY:
  ------------------
  |  Branch (1131:5): [True: 4.52k, False: 1.84M]
  ------------------
 1132|  60.6k|    case WRITEONLY:
  ------------------
  |  Branch (1132:5): [True: 4.13k, False: 1.84M]
  ------------------
 1133|  60.6k|        if (parseContext.isEsProfile() && parseContext.version >= 310)
  ------------------
  |  Branch (1133:13): [True: 0, False: 60.6k]
  |  Branch (1133:43): [True: 0, False: 0]
  ------------------
 1134|      0|            return keyword;
 1135|  60.6k|        return es30ReservedFromGLSL(parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store) ? 130 : 420);
  ------------------
  |  Branch (1135:37): [True: 0, False: 60.6k]
  ------------------
 1136|  52.8k|    case VOLATILE:
  ------------------
  |  Branch (1136:5): [True: 52.8k, False: 1.80M]
  ------------------
 1137|  52.8k|        if (parseContext.isEsProfile() && parseContext.version >= 310)
  ------------------
  |  Branch (1137:13): [True: 0, False: 52.8k]
  |  Branch (1137:43): [True: 0, False: 0]
  ------------------
 1138|      0|            return keyword;
 1139|  52.8k|        if (! parseContext.symbolTable.atBuiltInLevel() && (parseContext.isEsProfile() ||
  ------------------
  |  Branch (1139:13): [True: 0, False: 52.8k]
  |  Branch (1139:61): [True: 0, False: 0]
  ------------------
 1140|      0|            (parseContext.version < 420 && ! parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
  ------------------
  |  Branch (1140:14): [True: 0, False: 0]
  |  Branch (1140:44): [True: 0, False: 0]
  ------------------
 1141|      0|            reservedWord();
 1142|  52.8k|        return keyword;
 1143|  51.1k|    case NONTEMPORAL:
  ------------------
  |  Branch (1143:5): [True: 51.1k, False: 1.80M]
  ------------------
 1144|  51.1k|        if (parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (1144:13): [True: 51.1k, False: 0]
  ------------------
 1145|  51.1k|            return keyword;
 1146|      0|        if (parseContext.extensionTurnedOn(E_GL_EXT_nontemporal_keyword)) {
  ------------------
  |  Branch (1146:13): [True: 0, False: 0]
  ------------------
 1147|      0|            if (!parseContext.intermediate.usingVulkanMemoryModel())
  ------------------
  |  Branch (1147:17): [True: 0, False: 0]
  ------------------
 1148|      0|                parseContext.warn(loc, "Nontemporal without the Vulkan Memory Model is ignored", tokenText, "");
 1149|      0|            return keyword;
 1150|      0|        }
 1151|      0|        return identifierOrType();
 1152|     52|    case PATCH:
  ------------------
  |  Branch (1152:5): [True: 52, False: 1.85M]
  ------------------
 1153|     52|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1153:13): [True: 52, False: 0]
  ------------------
 1154|      0|            (parseContext.isEsProfile() &&
  ------------------
  |  Branch (1154:14): [True: 0, False: 0]
  ------------------
 1155|      0|             (parseContext.version >= 320 ||
  ------------------
  |  Branch (1155:15): [True: 0, False: 0]
  ------------------
 1156|      0|              parseContext.extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))) ||
  ------------------
  |  Branch (1156:15): [True: 0, False: 0]
  ------------------
 1157|      0|            (!parseContext.isEsProfile() && parseContext.extensionTurnedOn(E_GL_ARB_tessellation_shader)))
  ------------------
  |  Branch (1157:14): [True: 0, False: 0]
  |  Branch (1157:45): [True: 0, False: 0]
  ------------------
 1158|     52|            return keyword;
 1159|       |
 1160|      0|        return es30ReservedFromGLSL(400);
 1161|       |
 1162|      0|    case SAMPLE: 
  ------------------
  |  Branch (1162:5): [True: 0, False: 1.85M]
  ------------------
 1163|      0|    {
 1164|      0|        const int numLayoutExts = 3;
 1165|      0|        const char* layoutExts[numLayoutExts] = {E_GL_OES_shader_multisample_interpolation, E_GL_ARB_gpu_shader5,
 1166|      0|                                                 E_GL_NV_gpu_shader5};
 1167|      0|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1167:14): [True: 0, False: 0]
  |  Branch (1167:44): [True: 0, False: 0]
  ------------------
 1168|      0|            parseContext.extensionsTurnedOn(numLayoutExts, layoutExts))
  ------------------
  |  Branch (1168:13): [True: 0, False: 0]
  ------------------
 1169|      0|            return keyword;
 1170|      0|        return es30ReservedFromGLSL(400);
 1171|      0|    }
 1172|      0|    case SUBROUTINE:
  ------------------
  |  Branch (1172:5): [True: 0, False: 1.85M]
  ------------------
 1173|      0|        return es30ReservedFromGLSL(400);
 1174|       |
 1175|      0|    case SHARED:
  ------------------
  |  Branch (1175:5): [True: 0, False: 1.85M]
  ------------------
 1176|      0|        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (1176:14): [True: 0, False: 0]
  |  Branch (1176:44): [True: 0, False: 0]
  ------------------
 1177|      0|            (!parseContext.isEsProfile() && parseContext.version < 140))
  ------------------
  |  Branch (1177:14): [True: 0, False: 0]
  |  Branch (1177:45): [True: 0, False: 0]
  ------------------
 1178|      0|            return identifierOrType();
 1179|      0|        return keyword;
 1180|    402|    case LAYOUT:
  ------------------
  |  Branch (1180:5): [True: 402, False: 1.85M]
  ------------------
 1181|    402|    {
 1182|    402|        const int numLayoutExts = 2;
 1183|    402|        const char* layoutExts[numLayoutExts] = { E_GL_ARB_shading_language_420pack,
 1184|    402|                                                  E_GL_ARB_explicit_attrib_location };
 1185|    402|        if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (1185:14): [True: 0, False: 402]
  |  Branch (1185:44): [True: 0, False: 0]
  ------------------
 1186|    402|            (!parseContext.isEsProfile() && parseContext.version < 140 &&
  ------------------
  |  Branch (1186:14): [True: 402, False: 0]
  |  Branch (1186:45): [True: 0, False: 402]
  ------------------
 1187|      0|            ! parseContext.extensionsTurnedOn(numLayoutExts, layoutExts)))
  ------------------
  |  Branch (1187:13): [True: 0, False: 0]
  ------------------
 1188|      0|            return identifierOrType();
 1189|    402|        return keyword;
 1190|    402|    }
 1191|       |
 1192|  85.4k|    case HIGH_PRECISION:
  ------------------
  |  Branch (1192:5): [True: 85.4k, False: 1.76M]
  ------------------
 1193|  86.2k|    case MEDIUM_PRECISION:
  ------------------
  |  Branch (1193:5): [True: 844, False: 1.85M]
  ------------------
 1194|  86.5k|    case LOW_PRECISION:
  ------------------
  |  Branch (1194:5): [True: 272, False: 1.85M]
  ------------------
 1195|  86.5k|    case PRECISION:
  ------------------
  |  Branch (1195:5): [True: 0, False: 1.85M]
  ------------------
 1196|  86.5k|        return precisionKeyword();
 1197|       |
 1198|      0|    case MAT2X2:
  ------------------
  |  Branch (1198:5): [True: 0, False: 1.85M]
  ------------------
 1199|    564|    case MAT2X3:
  ------------------
  |  Branch (1199:5): [True: 564, False: 1.85M]
  ------------------
 1200|  1.12k|    case MAT2X4:
  ------------------
  |  Branch (1200:5): [True: 564, False: 1.85M]
  ------------------
 1201|  1.69k|    case MAT3X2:
  ------------------
  |  Branch (1201:5): [True: 564, False: 1.85M]
  ------------------
 1202|  1.69k|    case MAT3X3:
  ------------------
  |  Branch (1202:5): [True: 0, False: 1.85M]
  ------------------
 1203|  2.25k|    case MAT3X4:
  ------------------
  |  Branch (1203:5): [True: 564, False: 1.85M]
  ------------------
 1204|  2.82k|    case MAT4X2:
  ------------------
  |  Branch (1204:5): [True: 564, False: 1.85M]
  ------------------
 1205|  3.38k|    case MAT4X3:
  ------------------
  |  Branch (1205:5): [True: 564, False: 1.85M]
  ------------------
 1206|  3.38k|    case MAT4X4:
  ------------------
  |  Branch (1206:5): [True: 0, False: 1.85M]
  ------------------
 1207|  3.38k|        return matNxM();
 1208|       |
 1209|     72|    case DMAT2:
  ------------------
  |  Branch (1209:5): [True: 72, False: 1.85M]
  ------------------
 1210|    144|    case DMAT3:
  ------------------
  |  Branch (1210:5): [True: 72, False: 1.85M]
  ------------------
 1211|    216|    case DMAT4:
  ------------------
  |  Branch (1211:5): [True: 72, False: 1.85M]
  ------------------
 1212|    216|    case DMAT2X2:
  ------------------
  |  Branch (1212:5): [True: 0, False: 1.85M]
  ------------------
 1213|    264|    case DMAT2X3:
  ------------------
  |  Branch (1213:5): [True: 48, False: 1.85M]
  ------------------
 1214|    312|    case DMAT2X4:
  ------------------
  |  Branch (1214:5): [True: 48, False: 1.85M]
  ------------------
 1215|    360|    case DMAT3X2:
  ------------------
  |  Branch (1215:5): [True: 48, False: 1.85M]
  ------------------
 1216|    360|    case DMAT3X3:
  ------------------
  |  Branch (1216:5): [True: 0, False: 1.85M]
  ------------------
 1217|    408|    case DMAT3X4:
  ------------------
  |  Branch (1217:5): [True: 48, False: 1.85M]
  ------------------
 1218|    456|    case DMAT4X2:
  ------------------
  |  Branch (1218:5): [True: 48, False: 1.85M]
  ------------------
 1219|    504|    case DMAT4X3:
  ------------------
  |  Branch (1219:5): [True: 48, False: 1.85M]
  ------------------
 1220|    504|    case DMAT4X4:
  ------------------
  |  Branch (1220:5): [True: 0, False: 1.85M]
  ------------------
 1221|    504|        return dMat();
 1222|       |
 1223|    299|    case IMAGE1D:
  ------------------
  |  Branch (1223:5): [True: 299, False: 1.85M]
  ------------------
 1224|  2.19k|    case IIMAGE1D:
  ------------------
  |  Branch (1224:5): [True: 1.89k, False: 1.85M]
  ------------------
 1225|  4.08k|    case UIMAGE1D:
  ------------------
  |  Branch (1225:5): [True: 1.89k, False: 1.85M]
  ------------------
 1226|  4.38k|    case IMAGE1DARRAY:
  ------------------
  |  Branch (1226:5): [True: 299, False: 1.85M]
  ------------------
 1227|  6.28k|    case IIMAGE1DARRAY:
  ------------------
  |  Branch (1227:5): [True: 1.89k, False: 1.85M]
  ------------------
 1228|  8.17k|    case UIMAGE1DARRAY:
  ------------------
  |  Branch (1228:5): [True: 1.89k, False: 1.85M]
  ------------------
 1229|  8.47k|    case IMAGE2DRECT:
  ------------------
  |  Branch (1229:5): [True: 294, False: 1.85M]
  ------------------
 1230|  10.3k|    case IIMAGE2DRECT:
  ------------------
  |  Branch (1230:5): [True: 1.89k, False: 1.85M]
  ------------------
 1231|  12.2k|    case UIMAGE2DRECT:
  ------------------
  |  Branch (1231:5): [True: 1.89k, False: 1.85M]
  ------------------
 1232|  12.2k|        afterType = true;
 1233|  12.2k|        return firstGenerationImage(false);
 1234|       |
 1235|    115|    case I64IMAGE1D:
  ------------------
  |  Branch (1235:5): [True: 115, False: 1.85M]
  ------------------
 1236|    230|    case U64IMAGE1D:
  ------------------
  |  Branch (1236:5): [True: 115, False: 1.85M]
  ------------------
 1237|    345|    case I64IMAGE1DARRAY:
  ------------------
  |  Branch (1237:5): [True: 115, False: 1.85M]
  ------------------
 1238|    460|    case U64IMAGE1DARRAY:
  ------------------
  |  Branch (1238:5): [True: 115, False: 1.85M]
  ------------------
 1239|    570|    case I64IMAGE2DRECT:
  ------------------
  |  Branch (1239:5): [True: 110, False: 1.85M]
  ------------------
 1240|    680|    case U64IMAGE2DRECT:
  ------------------
  |  Branch (1240:5): [True: 110, False: 1.85M]
  ------------------
 1241|    680|        afterType = true;
 1242|    680|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1242:13): [True: 680, False: 0]
  ------------------
 1243|    680|            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
  ------------------
  |  Branch (1243:13): [True: 0, False: 0]
  ------------------
 1244|    680|            return firstGenerationImage(false);
 1245|    680|        }
 1246|      0|        return identifierOrType();
 1247|       |
 1248|    289|    case IMAGEBUFFER:
  ------------------
  |  Branch (1248:5): [True: 289, False: 1.85M]
  ------------------
 1249|  2.17k|    case IIMAGEBUFFER:
  ------------------
  |  Branch (1249:5): [True: 1.88k, False: 1.85M]
  ------------------
 1250|  4.05k|    case UIMAGEBUFFER:
  ------------------
  |  Branch (1250:5): [True: 1.88k, False: 1.85M]
  ------------------
 1251|  4.05k|        afterType = true;
 1252|  4.05k|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1252:14): [True: 0, False: 4.05k]
  |  Branch (1252:44): [True: 0, False: 0]
  ------------------
 1253|  4.05k|            parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
  ------------------
  |  Branch (1253:13): [True: 0, False: 4.05k]
  ------------------
 1254|      0|            return keyword;
 1255|  4.05k|        return firstGenerationImage(false);
 1256|       |        
 1257|    105|    case I64IMAGEBUFFER:
  ------------------
  |  Branch (1257:5): [True: 105, False: 1.85M]
  ------------------
 1258|    210|    case U64IMAGEBUFFER:
  ------------------
  |  Branch (1258:5): [True: 105, False: 1.85M]
  ------------------
 1259|    210|        afterType = true;        
 1260|    210|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1260:13): [True: 210, False: 0]
  ------------------
 1261|    210|            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
  ------------------
  |  Branch (1261:13): [True: 0, False: 0]
  ------------------
 1262|    210|            if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1262:18): [True: 0, False: 210]
  |  Branch (1262:48): [True: 0, False: 0]
  ------------------
 1263|    210|                parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
  ------------------
  |  Branch (1263:17): [True: 0, False: 210]
  ------------------
 1264|      0|                return keyword;
 1265|    210|            return firstGenerationImage(false);
 1266|    210|        }
 1267|      0|        return identifierOrType();
 1268|       |
 1269|    309|    case IMAGE2D:
  ------------------
  |  Branch (1269:5): [True: 309, False: 1.85M]
  ------------------
 1270|  2.21k|    case IIMAGE2D:
  ------------------
  |  Branch (1270:5): [True: 1.90k, False: 1.85M]
  ------------------
 1271|  4.11k|    case UIMAGE2D:
  ------------------
  |  Branch (1271:5): [True: 1.90k, False: 1.85M]
  ------------------
 1272|  4.42k|    case IMAGE3D:
  ------------------
  |  Branch (1272:5): [True: 309, False: 1.85M]
  ------------------
 1273|  6.33k|    case IIMAGE3D:
  ------------------
  |  Branch (1273:5): [True: 1.90k, False: 1.85M]
  ------------------
 1274|  8.23k|    case UIMAGE3D:
  ------------------
  |  Branch (1274:5): [True: 1.90k, False: 1.85M]
  ------------------
 1275|  8.54k|    case IMAGECUBE:
  ------------------
  |  Branch (1275:5): [True: 309, False: 1.85M]
  ------------------
 1276|  10.4k|    case IIMAGECUBE:
  ------------------
  |  Branch (1276:5): [True: 1.90k, False: 1.85M]
  ------------------
 1277|  12.3k|    case UIMAGECUBE:
  ------------------
  |  Branch (1277:5): [True: 1.90k, False: 1.85M]
  ------------------
 1278|  12.6k|    case IMAGE2DARRAY:
  ------------------
  |  Branch (1278:5): [True: 309, False: 1.85M]
  ------------------
 1279|  14.5k|    case IIMAGE2DARRAY:
  ------------------
  |  Branch (1279:5): [True: 1.90k, False: 1.85M]
  ------------------
 1280|  16.4k|    case UIMAGE2DARRAY:
  ------------------
  |  Branch (1280:5): [True: 1.90k, False: 1.85M]
  ------------------
 1281|  16.4k|        afterType = true;
 1282|  16.4k|        return firstGenerationImage(true);
 1283|       |
 1284|    125|    case I64IMAGE2D:
  ------------------
  |  Branch (1284:5): [True: 125, False: 1.85M]
  ------------------
 1285|    250|    case U64IMAGE2D:
  ------------------
  |  Branch (1285:5): [True: 125, False: 1.85M]
  ------------------
 1286|    375|    case I64IMAGE3D:
  ------------------
  |  Branch (1286:5): [True: 125, False: 1.85M]
  ------------------
 1287|    500|    case U64IMAGE3D:
  ------------------
  |  Branch (1287:5): [True: 125, False: 1.85M]
  ------------------
 1288|    625|    case I64IMAGECUBE:
  ------------------
  |  Branch (1288:5): [True: 125, False: 1.85M]
  ------------------
 1289|    750|    case U64IMAGECUBE:
  ------------------
  |  Branch (1289:5): [True: 125, False: 1.85M]
  ------------------
 1290|    875|    case I64IMAGE2DARRAY:
  ------------------
  |  Branch (1290:5): [True: 125, False: 1.85M]
  ------------------
 1291|  1.00k|    case U64IMAGE2DARRAY:
  ------------------
  |  Branch (1291:5): [True: 125, False: 1.85M]
  ------------------
 1292|  1.00k|        afterType = true;
 1293|  1.00k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1293:13): [True: 1.00k, False: 0]
  ------------------
 1294|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64))
  ------------------
  |  Branch (1294:13): [True: 0, False: 0]
  ------------------
 1295|  1.00k|            return firstGenerationImage(true);
 1296|      0|        return identifierOrType();
 1297|       |        
 1298|    309|    case IMAGECUBEARRAY:
  ------------------
  |  Branch (1298:5): [True: 309, False: 1.85M]
  ------------------
 1299|  2.21k|    case IIMAGECUBEARRAY:
  ------------------
  |  Branch (1299:5): [True: 1.90k, False: 1.85M]
  ------------------
 1300|  4.11k|    case UIMAGECUBEARRAY:
  ------------------
  |  Branch (1300:5): [True: 1.90k, False: 1.85M]
  ------------------
 1301|  4.11k|        afterType = true;
 1302|  4.11k|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1302:14): [True: 0, False: 4.11k]
  |  Branch (1302:44): [True: 0, False: 0]
  ------------------
 1303|  4.11k|            parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
  ------------------
  |  Branch (1303:13): [True: 0, False: 4.11k]
  ------------------
 1304|      0|            return keyword;
 1305|  4.11k|        return secondGenerationImage();
 1306|       |        
 1307|    125|    case I64IMAGECUBEARRAY:
  ------------------
  |  Branch (1307:5): [True: 125, False: 1.85M]
  ------------------
 1308|    250|    case U64IMAGECUBEARRAY:
  ------------------
  |  Branch (1308:5): [True: 125, False: 1.85M]
  ------------------
 1309|    250|        afterType = true;
 1310|    250|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1310:13): [True: 250, False: 0]
  ------------------
 1311|    250|            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
  ------------------
  |  Branch (1311:13): [True: 0, False: 0]
  ------------------
 1312|    250|            if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1312:18): [True: 0, False: 250]
  |  Branch (1312:48): [True: 0, False: 0]
  ------------------
 1313|    250|                parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
  ------------------
  |  Branch (1313:17): [True: 0, False: 250]
  ------------------
 1314|      0|                return keyword;
 1315|    250|            return secondGenerationImage();
 1316|    250|        }
 1317|      0|        return identifierOrType();
 1318|       |
 1319|    299|    case IMAGE2DMS:
  ------------------
  |  Branch (1319:5): [True: 299, False: 1.85M]
  ------------------
 1320|  2.19k|    case IIMAGE2DMS:
  ------------------
  |  Branch (1320:5): [True: 1.89k, False: 1.85M]
  ------------------
 1321|  4.08k|    case UIMAGE2DMS:
  ------------------
  |  Branch (1321:5): [True: 1.89k, False: 1.85M]
  ------------------
 1322|  4.38k|    case IMAGE2DMSARRAY:
  ------------------
  |  Branch (1322:5): [True: 299, False: 1.85M]
  ------------------
 1323|  6.28k|    case IIMAGE2DMSARRAY:
  ------------------
  |  Branch (1323:5): [True: 1.89k, False: 1.85M]
  ------------------
 1324|  8.17k|    case UIMAGE2DMSARRAY:
  ------------------
  |  Branch (1324:5): [True: 1.89k, False: 1.85M]
  ------------------
 1325|  8.17k|        afterType = true;
 1326|  8.17k|        return secondGenerationImage();
 1327|       |        
 1328|    115|    case I64IMAGE2DMS:
  ------------------
  |  Branch (1328:5): [True: 115, False: 1.85M]
  ------------------
 1329|    230|    case U64IMAGE2DMS:
  ------------------
  |  Branch (1329:5): [True: 115, False: 1.85M]
  ------------------
 1330|    345|    case I64IMAGE2DMSARRAY:
  ------------------
  |  Branch (1330:5): [True: 115, False: 1.85M]
  ------------------
 1331|    460|    case U64IMAGE2DMSARRAY:
  ------------------
  |  Branch (1331:5): [True: 115, False: 1.85M]
  ------------------
 1332|    460|        afterType = true;
 1333|    460|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1333:13): [True: 460, False: 0]
  ------------------
 1334|    460|            parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
  ------------------
  |  Branch (1334:13): [True: 0, False: 0]
  ------------------
 1335|    460|            return secondGenerationImage();
 1336|    460|        }
 1337|      0|        return identifierOrType();
 1338|       |
 1339|  1.98k|    case DOUBLE:
  ------------------
  |  Branch (1339:5): [True: 1.98k, False: 1.85M]
  ------------------
 1340|  3.68k|    case DVEC2:
  ------------------
  |  Branch (1340:5): [True: 1.70k, False: 1.85M]
  ------------------
 1341|  5.38k|    case DVEC3:
  ------------------
  |  Branch (1341:5): [True: 1.70k, False: 1.85M]
  ------------------
 1342|  7.09k|    case DVEC4:
  ------------------
  |  Branch (1342:5): [True: 1.70k, False: 1.85M]
  ------------------
 1343|  7.09k|        afterType = true;
 1344|  7.09k|        if (parseContext.isEsProfile() || parseContext.version < 150 ||
  ------------------
  |  Branch (1344:13): [True: 0, False: 7.09k]
  |  Branch (1344:43): [True: 0, False: 7.09k]
  ------------------
 1345|  7.09k|            (!parseContext.symbolTable.atBuiltInLevel() &&
  ------------------
  |  Branch (1345:14): [True: 0, False: 7.09k]
  ------------------
 1346|      0|              (parseContext.version < 400 && !parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) &&
  ------------------
  |  Branch (1346:16): [True: 0, False: 0]
  |  Branch (1346:46): [True: 0, False: 0]
  ------------------
 1347|      0|              (parseContext.version < 410 && !parseContext.extensionTurnedOn(E_GL_ARB_vertex_attrib_64bit)))))
  ------------------
  |  Branch (1347:16): [True: 0, False: 0]
  |  Branch (1347:46): [True: 0, False: 0]
  ------------------
 1348|      0|            reservedWord();
 1349|  7.09k|        return keyword;
 1350|       |
 1351|  16.1k|    case INT64_T:
  ------------------
  |  Branch (1351:5): [True: 16.1k, False: 1.83M]
  ------------------
 1352|  35.4k|    case UINT64_T:
  ------------------
  |  Branch (1352:5): [True: 19.2k, False: 1.83M]
  ------------------
 1353|  48.9k|    case I64VEC2:
  ------------------
  |  Branch (1353:5): [True: 13.5k, False: 1.83M]
  ------------------
 1354|  62.4k|    case I64VEC3:
  ------------------
  |  Branch (1354:5): [True: 13.4k, False: 1.83M]
  ------------------
 1355|  76.1k|    case I64VEC4:
  ------------------
  |  Branch (1355:5): [True: 13.7k, False: 1.83M]
  ------------------
 1356|  89.8k|    case U64VEC2:
  ------------------
  |  Branch (1356:5): [True: 13.6k, False: 1.83M]
  ------------------
 1357|   103k|    case U64VEC3:
  ------------------
  |  Branch (1357:5): [True: 13.6k, False: 1.83M]
  ------------------
 1358|   117k|    case U64VEC4:
  ------------------
  |  Branch (1358:5): [True: 13.9k, False: 1.83M]
  ------------------
 1359|   117k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1359:13): [True: 117k, False: 0]
  ------------------
 1360|      0|            parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) ||
  ------------------
  |  Branch (1360:13): [True: 0, False: 0]
  ------------------
 1361|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1361:13): [True: 0, False: 0]
  ------------------
 1362|      0|            parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
  ------------------
  |  Branch (1362:13): [True: 0, False: 0]
  ------------------
 1363|   117k|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int64)) {
  ------------------
  |  Branch (1363:13): [True: 0, False: 0]
  ------------------
 1364|   117k|            afterType = true;
 1365|   117k|            return keyword;
 1366|   117k|        }
 1367|      0|        return identifierOrType();
 1368|       |
 1369|  12.4k|    case INT8_T:
  ------------------
  |  Branch (1369:5): [True: 12.4k, False: 1.84M]
  ------------------
 1370|  24.8k|    case UINT8_T:
  ------------------
  |  Branch (1370:5): [True: 12.3k, False: 1.84M]
  ------------------
 1371|  36.8k|    case I8VEC2:
  ------------------
  |  Branch (1371:5): [True: 12.0k, False: 1.84M]
  ------------------
 1372|  48.8k|    case I8VEC3:
  ------------------
  |  Branch (1372:5): [True: 12.0k, False: 1.84M]
  ------------------
 1373|  60.8k|    case I8VEC4:
  ------------------
  |  Branch (1373:5): [True: 12.0k, False: 1.84M]
  ------------------
 1374|  72.8k|    case U8VEC2:
  ------------------
  |  Branch (1374:5): [True: 11.9k, False: 1.84M]
  ------------------
 1375|  84.8k|    case U8VEC3:
  ------------------
  |  Branch (1375:5): [True: 11.9k, False: 1.84M]
  ------------------
 1376|  96.8k|    case U8VEC4:
  ------------------
  |  Branch (1376:5): [True: 11.9k, False: 1.84M]
  ------------------
 1377|  96.8k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1377:13): [True: 96.8k, False: 0]
  ------------------
 1378|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1378:13): [True: 0, False: 0]
  ------------------
 1379|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_8bit_storage) ||
  ------------------
  |  Branch (1379:13): [True: 0, False: 0]
  ------------------
 1380|      0|            parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
  ------------------
  |  Branch (1380:13): [True: 0, False: 0]
  ------------------
 1381|  96.8k|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8)) {
  ------------------
  |  Branch (1381:13): [True: 0, False: 0]
  ------------------
 1382|  96.8k|            afterType = true;
 1383|  96.8k|            return keyword;
 1384|  96.8k|        }
 1385|      0|        return identifierOrType();
 1386|       |
 1387|  14.0k|    case INT16_T:
  ------------------
  |  Branch (1387:5): [True: 14.0k, False: 1.83M]
  ------------------
 1388|  28.0k|    case UINT16_T:
  ------------------
  |  Branch (1388:5): [True: 14.0k, False: 1.83M]
  ------------------
 1389|  41.6k|    case I16VEC2:
  ------------------
  |  Branch (1389:5): [True: 13.6k, False: 1.83M]
  ------------------
 1390|  55.2k|    case I16VEC3:
  ------------------
  |  Branch (1390:5): [True: 13.5k, False: 1.83M]
  ------------------
 1391|  68.8k|    case I16VEC4:
  ------------------
  |  Branch (1391:5): [True: 13.6k, False: 1.83M]
  ------------------
 1392|  82.6k|    case U16VEC2:
  ------------------
  |  Branch (1392:5): [True: 13.7k, False: 1.83M]
  ------------------
 1393|  96.3k|    case U16VEC3:
  ------------------
  |  Branch (1393:5): [True: 13.7k, False: 1.83M]
  ------------------
 1394|   110k|    case U16VEC4:
  ------------------
  |  Branch (1394:5): [True: 13.7k, False: 1.83M]
  ------------------
 1395|   110k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1395:13): [True: 110k, False: 0]
  ------------------
 1396|      0|            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
  ------------------
  |  Branch (1396:13): [True: 0, False: 0]
  ------------------
 1397|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
  ------------------
  |  Branch (1397:13): [True: 0, False: 0]
  ------------------
 1398|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1398:13): [True: 0, False: 0]
  ------------------
 1399|      0|            parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
  ------------------
  |  Branch (1399:13): [True: 0, False: 0]
  ------------------
 1400|   110k|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16)) {
  ------------------
  |  Branch (1400:13): [True: 0, False: 0]
  ------------------
 1401|   110k|            afterType = true;
 1402|   110k|            return keyword;
 1403|   110k|        }
 1404|      0|        return identifierOrType();
 1405|    400|    case INT32_T:
  ------------------
  |  Branch (1405:5): [True: 400, False: 1.85M]
  ------------------
 1406|    800|    case UINT32_T:
  ------------------
  |  Branch (1406:5): [True: 400, False: 1.85M]
  ------------------
 1407|    830|    case I32VEC2:
  ------------------
  |  Branch (1407:5): [True: 30, False: 1.85M]
  ------------------
 1408|    850|    case I32VEC3:
  ------------------
  |  Branch (1408:5): [True: 20, False: 1.85M]
  ------------------
 1409|    870|    case I32VEC4:
  ------------------
  |  Branch (1409:5): [True: 20, False: 1.85M]
  ------------------
 1410|    900|    case U32VEC2:
  ------------------
  |  Branch (1410:5): [True: 30, False: 1.85M]
  ------------------
 1411|    920|    case U32VEC3:
  ------------------
  |  Branch (1411:5): [True: 20, False: 1.85M]
  ------------------
 1412|    940|    case U32VEC4:
  ------------------
  |  Branch (1412:5): [True: 20, False: 1.85M]
  ------------------
 1413|    940|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1413:13): [True: 940, False: 0]
  ------------------
 1414|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1414:13): [True: 0, False: 0]
  ------------------
 1415|      0|            parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
  ------------------
  |  Branch (1415:13): [True: 0, False: 0]
  ------------------
 1416|    940|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int32)) {
  ------------------
  |  Branch (1416:13): [True: 0, False: 0]
  ------------------
 1417|    940|            afterType = true;
 1418|    940|            return keyword;
 1419|    940|        }
 1420|      0|        return identifierOrType();
 1421|    380|    case FLOAT32_T:
  ------------------
  |  Branch (1421:5): [True: 380, False: 1.85M]
  ------------------
 1422|    400|    case F32VEC2:
  ------------------
  |  Branch (1422:5): [True: 20, False: 1.85M]
  ------------------
 1423|    420|    case F32VEC3:
  ------------------
  |  Branch (1423:5): [True: 20, False: 1.85M]
  ------------------
 1424|    440|    case F32VEC4:
  ------------------
  |  Branch (1424:5): [True: 20, False: 1.85M]
  ------------------
 1425|    440|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1425:13): [True: 440, False: 0]
  ------------------
 1426|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1426:13): [True: 0, False: 0]
  ------------------
 1427|      0|            parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
  ------------------
  |  Branch (1427:13): [True: 0, False: 0]
  ------------------
 1428|    440|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32)) {
  ------------------
  |  Branch (1428:13): [True: 0, False: 0]
  ------------------
 1429|    440|            afterType = true;
 1430|    440|            return keyword;
 1431|    440|        }
 1432|      0|        return identifierOrType();
 1433|      0|    case F32MAT2:
  ------------------
  |  Branch (1433:5): [True: 0, False: 1.85M]
  ------------------
 1434|      0|    case F32MAT3:
  ------------------
  |  Branch (1434:5): [True: 0, False: 1.85M]
  ------------------
 1435|      0|    case F32MAT4:
  ------------------
  |  Branch (1435:5): [True: 0, False: 1.85M]
  ------------------
 1436|      0|    case F32MAT2X2:
  ------------------
  |  Branch (1436:5): [True: 0, False: 1.85M]
  ------------------
 1437|      0|    case F32MAT2X3:
  ------------------
  |  Branch (1437:5): [True: 0, False: 1.85M]
  ------------------
 1438|      0|    case F32MAT2X4:
  ------------------
  |  Branch (1438:5): [True: 0, False: 1.85M]
  ------------------
 1439|      0|    case F32MAT3X2:
  ------------------
  |  Branch (1439:5): [True: 0, False: 1.85M]
  ------------------
 1440|      0|    case F32MAT3X3:
  ------------------
  |  Branch (1440:5): [True: 0, False: 1.85M]
  ------------------
 1441|      0|    case F32MAT3X4:
  ------------------
  |  Branch (1441:5): [True: 0, False: 1.85M]
  ------------------
 1442|      0|    case F32MAT4X2:
  ------------------
  |  Branch (1442:5): [True: 0, False: 1.85M]
  ------------------
 1443|      0|    case F32MAT4X3:
  ------------------
  |  Branch (1443:5): [True: 0, False: 1.85M]
  ------------------
 1444|      0|    case F32MAT4X4:
  ------------------
  |  Branch (1444:5): [True: 0, False: 1.85M]
  ------------------
 1445|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1445:13): [True: 0, False: 0]
  ------------------
 1446|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1446:13): [True: 0, False: 0]
  ------------------
 1447|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32)) {
  ------------------
  |  Branch (1447:13): [True: 0, False: 0]
  ------------------
 1448|      0|            afterType = true;
 1449|      0|            return keyword;
 1450|      0|        }
 1451|      0|        return identifierOrType();
 1452|       |
 1453|  1.10k|    case FLOAT64_T:
  ------------------
  |  Branch (1453:5): [True: 1.10k, False: 1.85M]
  ------------------
 1454|  1.96k|    case F64VEC2:
  ------------------
  |  Branch (1454:5): [True: 860, False: 1.85M]
  ------------------
 1455|  2.78k|    case F64VEC3:
  ------------------
  |  Branch (1455:5): [True: 820, False: 1.85M]
  ------------------
 1456|  3.60k|    case F64VEC4:
  ------------------
  |  Branch (1456:5): [True: 820, False: 1.85M]
  ------------------
 1457|  3.60k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1457:13): [True: 3.60k, False: 0]
  ------------------
 1458|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1458:13): [True: 0, False: 0]
  ------------------
 1459|      0|            (parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) && 
  ------------------
  |  Branch (1459:14): [True: 0, False: 0]
  ------------------
 1460|      0|             parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64)) ||
  ------------------
  |  Branch (1460:14): [True: 0, False: 0]
  ------------------
 1461|  3.60k|             parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64)) {
  ------------------
  |  Branch (1461:14): [True: 0, False: 0]
  ------------------
 1462|  3.60k|            afterType = true;
 1463|  3.60k|            return keyword;
 1464|  3.60k|        }
 1465|      0|        return identifierOrType();
 1466|      0|    case F64MAT2:
  ------------------
  |  Branch (1466:5): [True: 0, False: 1.85M]
  ------------------
 1467|      0|    case F64MAT3:
  ------------------
  |  Branch (1467:5): [True: 0, False: 1.85M]
  ------------------
 1468|      0|    case F64MAT4:
  ------------------
  |  Branch (1468:5): [True: 0, False: 1.85M]
  ------------------
 1469|      0|    case F64MAT2X2:
  ------------------
  |  Branch (1469:5): [True: 0, False: 1.85M]
  ------------------
 1470|      0|    case F64MAT2X3:
  ------------------
  |  Branch (1470:5): [True: 0, False: 1.85M]
  ------------------
 1471|      0|    case F64MAT2X4:
  ------------------
  |  Branch (1471:5): [True: 0, False: 1.85M]
  ------------------
 1472|      0|    case F64MAT3X2:
  ------------------
  |  Branch (1472:5): [True: 0, False: 1.85M]
  ------------------
 1473|      0|    case F64MAT3X3:
  ------------------
  |  Branch (1473:5): [True: 0, False: 1.85M]
  ------------------
 1474|      0|    case F64MAT3X4:
  ------------------
  |  Branch (1474:5): [True: 0, False: 1.85M]
  ------------------
 1475|      0|    case F64MAT4X2:
  ------------------
  |  Branch (1475:5): [True: 0, False: 1.85M]
  ------------------
 1476|      0|    case F64MAT4X3:
  ------------------
  |  Branch (1476:5): [True: 0, False: 1.85M]
  ------------------
 1477|      0|    case F64MAT4X4:
  ------------------
  |  Branch (1477:5): [True: 0, False: 1.85M]
  ------------------
 1478|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1478:13): [True: 0, False: 0]
  ------------------
 1479|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1479:13): [True: 0, False: 0]
  ------------------
 1480|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64)) {
  ------------------
  |  Branch (1480:13): [True: 0, False: 0]
  ------------------
 1481|      0|            afterType = true;
 1482|      0|            return keyword;
 1483|      0|        }
 1484|      0|        return identifierOrType();
 1485|       |
 1486|  17.4k|    case FLOAT16_T:
  ------------------
  |  Branch (1486:5): [True: 17.4k, False: 1.83M]
  ------------------
 1487|  30.8k|    case F16VEC2:
  ------------------
  |  Branch (1487:5): [True: 13.4k, False: 1.83M]
  ------------------
 1488|  42.7k|    case F16VEC3:
  ------------------
  |  Branch (1488:5): [True: 11.8k, False: 1.84M]
  ------------------
 1489|  61.4k|    case F16VEC4:
  ------------------
  |  Branch (1489:5): [True: 18.7k, False: 1.83M]
  ------------------
 1490|  61.4k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1490:13): [True: 61.4k, False: 0]
  ------------------
 1491|      0|            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
  ------------------
  |  Branch (1491:13): [True: 0, False: 0]
  ------------------
 1492|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
  ------------------
  |  Branch (1492:13): [True: 0, False: 0]
  ------------------
 1493|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1493:13): [True: 0, False: 0]
  ------------------
 1494|      0|            parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) ||
  ------------------
  |  Branch (1494:13): [True: 0, False: 0]
  ------------------
 1495|  61.4k|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16)) {
  ------------------
  |  Branch (1495:13): [True: 0, False: 0]
  ------------------
 1496|  61.4k|            afterType = true;
 1497|  61.4k|            return keyword;
 1498|  61.4k|        }
 1499|      0|        return identifierOrType();
 1500|       |
 1501|     45|    case F16MAT2:
  ------------------
  |  Branch (1501:5): [True: 45, False: 1.85M]
  ------------------
 1502|     90|    case F16MAT3:
  ------------------
  |  Branch (1502:5): [True: 45, False: 1.85M]
  ------------------
 1503|    135|    case F16MAT4:
  ------------------
  |  Branch (1503:5): [True: 45, False: 1.85M]
  ------------------
 1504|    135|    case F16MAT2X2:
  ------------------
  |  Branch (1504:5): [True: 0, False: 1.85M]
  ------------------
 1505|    165|    case F16MAT2X3:
  ------------------
  |  Branch (1505:5): [True: 30, False: 1.85M]
  ------------------
 1506|    195|    case F16MAT2X4:
  ------------------
  |  Branch (1506:5): [True: 30, False: 1.85M]
  ------------------
 1507|    225|    case F16MAT3X2:
  ------------------
  |  Branch (1507:5): [True: 30, False: 1.85M]
  ------------------
 1508|    225|    case F16MAT3X3:
  ------------------
  |  Branch (1508:5): [True: 0, False: 1.85M]
  ------------------
 1509|    255|    case F16MAT3X4:
  ------------------
  |  Branch (1509:5): [True: 30, False: 1.85M]
  ------------------
 1510|    285|    case F16MAT4X2:
  ------------------
  |  Branch (1510:5): [True: 30, False: 1.85M]
  ------------------
 1511|    315|    case F16MAT4X3:
  ------------------
  |  Branch (1511:5): [True: 30, False: 1.85M]
  ------------------
 1512|    315|    case F16MAT4X4:
  ------------------
  |  Branch (1512:5): [True: 0, False: 1.85M]
  ------------------
 1513|    315|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1513:13): [True: 315, False: 0]
  ------------------
 1514|      0|            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
  ------------------
  |  Branch (1514:13): [True: 0, False: 0]
  ------------------
 1515|      0|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
  ------------------
  |  Branch (1515:13): [True: 0, False: 0]
  ------------------
 1516|    315|            parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16)) {
  ------------------
  |  Branch (1516:13): [True: 0, False: 0]
  ------------------
 1517|    315|            afterType = true;
 1518|    315|            return keyword;
 1519|    315|        }
 1520|       |
 1521|      0|        return identifierOrType();
 1522|       |
 1523|     90|    case BFLOAT16_T:
  ------------------
  |  Branch (1523:5): [True: 90, False: 1.85M]
  ------------------
 1524|    140|    case BF16VEC2:
  ------------------
  |  Branch (1524:5): [True: 50, False: 1.85M]
  ------------------
 1525|    170|    case BF16VEC3:
  ------------------
  |  Branch (1525:5): [True: 30, False: 1.85M]
  ------------------
 1526|    220|    case BF16VEC4:
  ------------------
  |  Branch (1526:5): [True: 50, False: 1.85M]
  ------------------
 1527|    220|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1527:13): [True: 220, False: 0]
  ------------------
 1528|    220|            parseContext.extensionTurnedOn(E_GL_EXT_bfloat16)) {
  ------------------
  |  Branch (1528:13): [True: 0, False: 0]
  ------------------
 1529|    220|            afterType = true;
 1530|    220|            return keyword;
 1531|    220|        }
 1532|       |
 1533|      0|        return identifierOrType();
 1534|       |
 1535|     60|    case FLOATE5M2_T:
  ------------------
  |  Branch (1535:5): [True: 60, False: 1.85M]
  ------------------
 1536|    100|    case FE5M2VEC2:
  ------------------
  |  Branch (1536:5): [True: 40, False: 1.85M]
  ------------------
 1537|    120|    case FE5M2VEC3:
  ------------------
  |  Branch (1537:5): [True: 20, False: 1.85M]
  ------------------
 1538|    160|    case FE5M2VEC4:
  ------------------
  |  Branch (1538:5): [True: 40, False: 1.85M]
  ------------------
 1539|    160|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1539:13): [True: 160, False: 0]
  ------------------
 1540|    160|            parseContext.extensionTurnedOn(E_GL_EXT_float_e5m2)) {
  ------------------
  |  Branch (1540:13): [True: 0, False: 0]
  ------------------
 1541|    160|            afterType = true;
 1542|    160|            return keyword;
 1543|    160|        }
 1544|       |
 1545|      0|        return identifierOrType();
 1546|       |
 1547|     60|    case FLOATE4M3_T:
  ------------------
  |  Branch (1547:5): [True: 60, False: 1.85M]
  ------------------
 1548|    100|    case FE4M3VEC2:
  ------------------
  |  Branch (1548:5): [True: 40, False: 1.85M]
  ------------------
 1549|    120|    case FE4M3VEC3:
  ------------------
  |  Branch (1549:5): [True: 20, False: 1.85M]
  ------------------
 1550|    160|    case FE4M3VEC4:
  ------------------
  |  Branch (1550:5): [True: 40, False: 1.85M]
  ------------------
 1551|    160|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1551:13): [True: 160, False: 0]
  ------------------
 1552|    160|            parseContext.extensionTurnedOn(E_GL_EXT_float_e4m3)) {
  ------------------
  |  Branch (1552:13): [True: 0, False: 0]
  ------------------
 1553|    160|            afterType = true;
 1554|    160|            return keyword;
 1555|    160|        }
 1556|       |
 1557|      0|        return identifierOrType();
 1558|       |
 1559|    988|    case SAMPLERCUBEARRAY:
  ------------------
  |  Branch (1559:5): [True: 988, False: 1.85M]
  ------------------
 1560|  1.70k|    case SAMPLERCUBEARRAYSHADOW:
  ------------------
  |  Branch (1560:5): [True: 719, False: 1.85M]
  ------------------
 1561|  2.68k|    case ISAMPLERCUBEARRAY:
  ------------------
  |  Branch (1561:5): [True: 979, False: 1.85M]
  ------------------
 1562|  3.66k|    case USAMPLERCUBEARRAY:
  ------------------
  |  Branch (1562:5): [True: 979, False: 1.85M]
  ------------------
 1563|  3.66k|        afterType = true;
 1564|  3.66k|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1564:14): [True: 0, False: 3.66k]
  |  Branch (1564:44): [True: 0, False: 0]
  ------------------
 1565|  3.66k|            parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
  ------------------
  |  Branch (1565:13): [True: 0, False: 3.66k]
  ------------------
 1566|      0|            return keyword;
 1567|  3.66k|        if (parseContext.isEsProfile() || (parseContext.version < 400 &&
  ------------------
  |  Branch (1567:13): [True: 0, False: 3.66k]
  |  Branch (1567:44): [True: 2.35k, False: 1.30k]
  ------------------
 1568|  2.35k|            ! parseContext.extensionTurnedOn(E_GL_ARB_texture_cube_map_array)
  ------------------
  |  Branch (1568:13): [True: 2.35k, False: 0]
  ------------------
 1569|  2.35k|            && ! parseContext.extensionsTurnedOn(Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5)))
  ------------------
  |  Branch (1569:16): [True: 2.35k, False: 0]
  ------------------
 1570|  2.35k|            reservedWord();
 1571|  3.66k|        return keyword;
 1572|       |
 1573|    105|    case TEXTURECUBEARRAY:
  ------------------
  |  Branch (1573:5): [True: 105, False: 1.85M]
  ------------------
 1574|    204|    case ITEXTURECUBEARRAY:
  ------------------
  |  Branch (1574:5): [True: 99, False: 1.85M]
  ------------------
 1575|    303|    case UTEXTURECUBEARRAY:
  ------------------
  |  Branch (1575:5): [True: 99, False: 1.85M]
  ------------------
 1576|    303|        if (parseContext.spvVersion.vulkan > 0)
  ------------------
  |  Branch (1576:13): [True: 303, False: 0]
  ------------------
 1577|    303|            return keyword;
 1578|      0|        else
 1579|      0|            return identifierOrType();
 1580|       |
 1581|   134k|    case UINT:
  ------------------
  |  Branch (1581:5): [True: 134k, False: 1.71M]
  ------------------
 1582|   153k|    case UVEC2:
  ------------------
  |  Branch (1582:5): [True: 19.2k, False: 1.83M]
  ------------------
 1583|   171k|    case UVEC3:
  ------------------
  |  Branch (1583:5): [True: 17.6k, False: 1.83M]
  ------------------
 1584|   296k|    case UVEC4:
  ------------------
  |  Branch (1584:5): [True: 124k, False: 1.72M]
  ------------------
 1585|   297k|    case SAMPLERCUBESHADOW:
  ------------------
  |  Branch (1585:5): [True: 794, False: 1.85M]
  ------------------
 1586|   299k|    case SAMPLER2DARRAY:
  ------------------
  |  Branch (1586:5): [True: 2.57k, False: 1.85M]
  ------------------
 1587|   301k|    case SAMPLER2DARRAYSHADOW:
  ------------------
  |  Branch (1587:5): [True: 1.35k, False: 1.85M]
  ------------------
 1588|   305k|    case ISAMPLER2D:
  ------------------
  |  Branch (1588:5): [True: 4.59k, False: 1.84M]
  ------------------
 1589|   308k|    case ISAMPLER3D:
  ------------------
  |  Branch (1589:5): [True: 2.66k, False: 1.85M]
  ------------------
 1590|   309k|    case ISAMPLERCUBE:
  ------------------
  |  Branch (1590:5): [True: 979, False: 1.85M]
  ------------------
 1591|   311k|    case ISAMPLER2DARRAY:
  ------------------
  |  Branch (1591:5): [True: 2.46k, False: 1.85M]
  ------------------
 1592|   316k|    case USAMPLER2D:
  ------------------
  |  Branch (1592:5): [True: 4.59k, False: 1.84M]
  ------------------
 1593|   319k|    case USAMPLER3D:
  ------------------
  |  Branch (1593:5): [True: 2.66k, False: 1.85M]
  ------------------
 1594|   320k|    case USAMPLERCUBE:
  ------------------
  |  Branch (1594:5): [True: 979, False: 1.85M]
  ------------------
 1595|   322k|    case USAMPLER2DARRAY:
  ------------------
  |  Branch (1595:5): [True: 2.46k, False: 1.85M]
  ------------------
 1596|   322k|        afterType = true;
 1597|   322k|        if (keyword == SAMPLER2DARRAY || keyword == SAMPLER2DARRAYSHADOW) {
  ------------------
  |  Branch (1597:13): [True: 2.57k, False: 319k]
  |  Branch (1597:42): [True: 1.35k, False: 318k]
  ------------------
 1598|  3.92k|            if (!parseContext.isEsProfile() &&
  ------------------
  |  Branch (1598:17): [True: 3.92k, False: 0]
  ------------------
 1599|  3.92k|                (parseContext.extensionTurnedOn(E_GL_EXT_texture_array) || parseContext.symbolTable.atBuiltInLevel())) {
  ------------------
  |  Branch (1599:18): [True: 0, False: 3.92k]
  |  Branch (1599:76): [True: 3.90k, False: 18]
  ------------------
 1600|  3.90k|                return keyword;
 1601|  3.90k|            }
 1602|  3.92k|        }
 1603|   318k|        return nonreservedKeyword(300, 130);
 1604|       |
 1605|  2.70k|    case SAMPLER3D:
  ------------------
  |  Branch (1605:5): [True: 2.70k, False: 1.85M]
  ------------------
 1606|  2.70k|        afterType = true;
 1607|  2.70k|        if (parseContext.isEsProfile() && parseContext.version < 300) {
  ------------------
  |  Branch (1607:13): [True: 0, False: 2.70k]
  |  Branch (1607:43): [True: 0, False: 0]
  ------------------
 1608|      0|            if (!parseContext.extensionTurnedOn(E_GL_OES_texture_3D))
  ------------------
  |  Branch (1608:17): [True: 0, False: 0]
  ------------------
 1609|      0|                reservedWord();
 1610|      0|        }
 1611|  2.70k|        return keyword;
 1612|       |
 1613|  2.29k|    case SAMPLER2DSHADOW:
  ------------------
  |  Branch (1613:5): [True: 2.29k, False: 1.85M]
  ------------------
 1614|  2.29k|        afterType = true;
 1615|  2.29k|        if (parseContext.isEsProfile() && parseContext.version < 300) {
  ------------------
  |  Branch (1615:13): [True: 0, False: 2.29k]
  |  Branch (1615:43): [True: 0, False: 0]
  ------------------
 1616|      0|            if (!parseContext.extensionTurnedOn(E_GL_EXT_shadow_samplers))
  ------------------
  |  Branch (1616:17): [True: 0, False: 0]
  ------------------
 1617|      0|                reservedWord();
 1618|      0|        }
 1619|  2.29k|        return keyword;
 1620|       |
 1621|    303|    case TEXTURE2D:
  ------------------
  |  Branch (1621:5): [True: 303, False: 1.85M]
  ------------------
 1622|    408|    case TEXTURECUBE:
  ------------------
  |  Branch (1622:5): [True: 105, False: 1.85M]
  ------------------
 1623|    711|    case TEXTURE2DARRAY:
  ------------------
  |  Branch (1623:5): [True: 303, False: 1.85M]
  ------------------
 1624|  1.00k|    case ITEXTURE2D:
  ------------------
  |  Branch (1624:5): [True: 297, False: 1.85M]
  ------------------
 1625|  1.30k|    case ITEXTURE3D:
  ------------------
  |  Branch (1625:5): [True: 297, False: 1.85M]
  ------------------
 1626|  1.40k|    case ITEXTURECUBE:
  ------------------
  |  Branch (1626:5): [True: 99, False: 1.85M]
  ------------------
 1627|  1.70k|    case ITEXTURE2DARRAY:
  ------------------
  |  Branch (1627:5): [True: 297, False: 1.85M]
  ------------------
 1628|  1.99k|    case UTEXTURE2D:
  ------------------
  |  Branch (1628:5): [True: 297, False: 1.85M]
  ------------------
 1629|  2.29k|    case UTEXTURE3D:
  ------------------
  |  Branch (1629:5): [True: 297, False: 1.85M]
  ------------------
 1630|  2.39k|    case UTEXTURECUBE:
  ------------------
  |  Branch (1630:5): [True: 99, False: 1.85M]
  ------------------
 1631|  2.69k|    case UTEXTURE2DARRAY:
  ------------------
  |  Branch (1631:5): [True: 297, False: 1.85M]
  ------------------
 1632|  2.99k|    case TEXTURE3D:
  ------------------
  |  Branch (1632:5): [True: 303, False: 1.85M]
  ------------------
 1633|  3.00k|    case SAMPLER:
  ------------------
  |  Branch (1633:5): [True: 6, False: 1.85M]
  ------------------
 1634|  3.00k|    case SAMPLERSHADOW:
  ------------------
  |  Branch (1634:5): [True: 6, False: 1.85M]
  ------------------
 1635|  3.00k|        if (parseContext.spvVersion.vulkan > 0)
  ------------------
  |  Branch (1635:13): [True: 3.00k, False: 0]
  ------------------
 1636|  3.00k|            return keyword;
 1637|      0|        else
 1638|      0|            return identifierOrType();
 1639|       |
 1640|  3.55k|    case ISAMPLER1D:
  ------------------
  |  Branch (1640:5): [True: 3.55k, False: 1.84M]
  ------------------
 1641|  4.97k|    case ISAMPLER1DARRAY:
  ------------------
  |  Branch (1641:5): [True: 1.42k, False: 1.85M]
  ------------------
 1642|  6.03k|    case SAMPLER1DARRAYSHADOW:
  ------------------
  |  Branch (1642:5): [True: 1.05k, False: 1.85M]
  ------------------
 1643|  9.58k|    case USAMPLER1D:
  ------------------
  |  Branch (1643:5): [True: 3.55k, False: 1.84M]
  ------------------
 1644|  11.0k|    case USAMPLER1DARRAY:
  ------------------
  |  Branch (1644:5): [True: 1.42k, False: 1.85M]
  ------------------
 1645|  11.0k|        afterType = true;
 1646|  11.0k|        if (keyword == SAMPLER1DARRAYSHADOW) {
  ------------------
  |  Branch (1646:13): [True: 1.05k, False: 9.94k]
  ------------------
 1647|  1.05k|            if (!parseContext.isEsProfile() &&
  ------------------
  |  Branch (1647:17): [True: 1.05k, False: 0]
  ------------------
 1648|  1.05k|                (parseContext.extensionTurnedOn(E_GL_EXT_texture_array) || parseContext.symbolTable.atBuiltInLevel())) {
  ------------------
  |  Branch (1648:18): [True: 0, False: 1.05k]
  |  Branch (1648:76): [True: 1.04k, False: 9]
  ------------------
 1649|  1.04k|                return keyword;
 1650|  1.04k|            }
 1651|  1.05k|        }
 1652|  9.95k|        return es30ReservedFromGLSL(130);
 1653|  2.89k|    case ISAMPLER2DRECT:
  ------------------
  |  Branch (1653:5): [True: 2.89k, False: 1.85M]
  ------------------
 1654|  5.79k|    case USAMPLER2DRECT:
  ------------------
  |  Branch (1654:5): [True: 2.89k, False: 1.85M]
  ------------------
 1655|  5.79k|        afterType = true;
 1656|  5.79k|        return es30ReservedFromGLSL(140);
 1657|       |
 1658|    194|    case SAMPLERBUFFER:
  ------------------
  |  Branch (1658:5): [True: 194, False: 1.85M]
  ------------------
 1659|    194|        afterType = true;
 1660|    194|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1660:14): [True: 0, False: 194]
  |  Branch (1660:44): [True: 0, False: 0]
  ------------------
 1661|    194|            parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
  ------------------
  |  Branch (1661:13): [True: 0, False: 194]
  ------------------
 1662|      0|            return keyword;
 1663|    194|        return es30ReservedFromGLSL(130);
 1664|       |
 1665|    188|    case ISAMPLERBUFFER:
  ------------------
  |  Branch (1665:5): [True: 188, False: 1.85M]
  ------------------
 1666|    376|    case USAMPLERBUFFER:
  ------------------
  |  Branch (1666:5): [True: 188, False: 1.85M]
  ------------------
 1667|    376|        afterType = true;
 1668|    376|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1668:14): [True: 0, False: 376]
  |  Branch (1668:44): [True: 0, False: 0]
  ------------------
 1669|    376|            parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
  ------------------
  |  Branch (1669:13): [True: 0, False: 376]
  ------------------
 1670|      0|            return keyword;
 1671|    376|        return es30ReservedFromGLSL(140);
 1672|       |
 1673|    214|    case SAMPLER2DMS:
  ------------------
  |  Branch (1673:5): [True: 214, False: 1.85M]
  ------------------
 1674|    422|    case ISAMPLER2DMS:
  ------------------
  |  Branch (1674:5): [True: 208, False: 1.85M]
  ------------------
 1675|    630|    case USAMPLER2DMS:
  ------------------
  |  Branch (1675:5): [True: 208, False: 1.85M]
  ------------------
 1676|    630|        afterType = true;
 1677|    630|        if (parseContext.isEsProfile() && parseContext.version >= 310)
  ------------------
  |  Branch (1677:13): [True: 0, False: 630]
  |  Branch (1677:43): [True: 0, False: 0]
  ------------------
 1678|      0|            return keyword;
 1679|    630|        if (!parseContext.isEsProfile() && (parseContext.version > 140 ||
  ------------------
  |  Branch (1679:13): [True: 630, False: 0]
  |  Branch (1679:45): [True: 114, False: 516]
  ------------------
 1680|    516|            (parseContext.version == 140 && parseContext.extensionsTurnedOn(1, &E_GL_ARB_texture_multisample))))
  ------------------
  |  Branch (1680:14): [True: 516, False: 0]
  |  Branch (1680:45): [True: 0, False: 516]
  ------------------
 1681|    114|            return keyword;
 1682|    516|        return es30ReservedFromGLSL(150);
 1683|       |
 1684|    214|    case SAMPLER2DMSARRAY:
  ------------------
  |  Branch (1684:5): [True: 214, False: 1.85M]
  ------------------
 1685|    422|    case ISAMPLER2DMSARRAY:
  ------------------
  |  Branch (1685:5): [True: 208, False: 1.85M]
  ------------------
 1686|    630|    case USAMPLER2DMSARRAY:
  ------------------
  |  Branch (1686:5): [True: 208, False: 1.85M]
  ------------------
 1687|    630|        afterType = true;
 1688|    630|        if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
  ------------------
  |  Branch (1688:14): [True: 0, False: 630]
  |  Branch (1688:44): [True: 0, False: 0]
  ------------------
 1689|    630|            parseContext.extensionsTurnedOn(1, &E_GL_OES_texture_storage_multisample_2d_array))
  ------------------
  |  Branch (1689:13): [True: 0, False: 630]
  ------------------
 1690|      0|            return keyword;
 1691|    630|        if (!parseContext.isEsProfile() && (parseContext.version > 140 ||
  ------------------
  |  Branch (1691:13): [True: 630, False: 0]
  |  Branch (1691:45): [True: 114, False: 516]
  ------------------
 1692|    516|            (parseContext.version == 140 && parseContext.extensionsTurnedOn(1, &E_GL_ARB_texture_multisample))))
  ------------------
  |  Branch (1692:14): [True: 516, False: 0]
  |  Branch (1692:45): [True: 0, False: 516]
  ------------------
 1693|    114|            return keyword;
 1694|    516|        return es30ReservedFromGLSL(150);
 1695|       |
 1696|  3.56k|    case SAMPLER1D:
  ------------------
  |  Branch (1696:5): [True: 3.56k, False: 1.84M]
  ------------------
 1697|  5.39k|    case SAMPLER1DSHADOW:
  ------------------
  |  Branch (1697:5): [True: 1.83k, False: 1.85M]
  ------------------
 1698|  5.39k|        afterType = true;
 1699|  5.39k|        if (parseContext.isEsProfile())
  ------------------
  |  Branch (1699:13): [True: 0, False: 5.39k]
  ------------------
 1700|      0|            reservedWord();
 1701|  5.39k|        return keyword;
 1702|       |
 1703|  2.90k|    case SAMPLER2DRECT:
  ------------------
  |  Branch (1703:5): [True: 2.90k, False: 1.85M]
  ------------------
 1704|  4.17k|    case SAMPLER2DRECTSHADOW:
  ------------------
  |  Branch (1704:5): [True: 1.27k, False: 1.85M]
  ------------------
 1705|  4.17k|        afterType = true;
 1706|  4.17k|        if (parseContext.isEsProfile())
  ------------------
  |  Branch (1706:13): [True: 0, False: 4.17k]
  ------------------
 1707|      0|            reservedWord();
 1708|  4.17k|        else if (parseContext.version < 140 && ! parseContext.symbolTable.atBuiltInLevel() && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_rectangle)) {
  ------------------
  |  Branch (1708:18): [True: 0, False: 4.17k]
  |  Branch (1708:48): [True: 0, False: 0]
  |  Branch (1708:95): [True: 0, False: 0]
  ------------------
 1709|      0|            if (parseContext.relaxedErrors())
  ------------------
  |  Branch (1709:17): [True: 0, False: 0]
  ------------------
 1710|      0|                parseContext.requireExtensions(loc, 1, &E_GL_ARB_texture_rectangle, "texture-rectangle sampler keyword");
 1711|      0|            else
 1712|      0|                reservedWord();
 1713|      0|        }
 1714|  4.17k|        return keyword;
 1715|       |
 1716|  1.52k|    case SAMPLER1DARRAY:
  ------------------
  |  Branch (1716:5): [True: 1.52k, False: 1.85M]
  ------------------
 1717|  1.52k|        afterType = true;
 1718|  1.52k|        if (parseContext.isEsProfile() && parseContext.version == 300)
  ------------------
  |  Branch (1718:13): [True: 0, False: 1.52k]
  |  Branch (1718:43): [True: 0, False: 0]
  ------------------
 1719|      0|            reservedWord();
 1720|  1.52k|        else if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (1720:19): [True: 0, False: 1.52k]
  |  Branch (1720:49): [True: 0, False: 0]
  ------------------
 1721|  1.52k|                 ((!parseContext.isEsProfile() && parseContext.version < 130) &&
  ------------------
  |  Branch (1721:20): [True: 1.52k, False: 0]
  |  Branch (1721:51): [True: 0, False: 1.52k]
  ------------------
 1722|      0|                   !parseContext.symbolTable.atBuiltInLevel() &&
  ------------------
  |  Branch (1722:20): [True: 0, False: 0]
  ------------------
 1723|      0|                   !parseContext.extensionTurnedOn(E_GL_EXT_texture_array)))
  ------------------
  |  Branch (1723:20): [True: 0, False: 0]
  ------------------
 1724|      0|            return identifierOrType();
 1725|  1.52k|        return keyword;
 1726|       |
 1727|      0|    case SAMPLEREXTERNALOES:
  ------------------
  |  Branch (1727:5): [True: 0, False: 1.85M]
  ------------------
 1728|      0|        afterType = true;
 1729|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1729:13): [True: 0, False: 0]
  ------------------
 1730|      0|            parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external) ||
  ------------------
  |  Branch (1730:13): [True: 0, False: 0]
  ------------------
 1731|      0|            parseContext.extensionTurnedOn(E_GL_OES_EGL_image_external_essl3))
  ------------------
  |  Branch (1731:13): [True: 0, False: 0]
  ------------------
 1732|      0|            return keyword;
 1733|      0|        return identifierOrType();
 1734|       |
 1735|      0|    case SAMPLEREXTERNAL2DY2YEXT:
  ------------------
  |  Branch (1735:5): [True: 0, False: 1.85M]
  ------------------
 1736|      0|        afterType = true;
 1737|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1737:13): [True: 0, False: 0]
  ------------------
 1738|      0|            parseContext.extensionTurnedOn(E_GL_EXT_YUV_target))
  ------------------
  |  Branch (1738:13): [True: 0, False: 0]
  ------------------
 1739|      0|            return keyword;
 1740|      0|        return identifierOrType();
 1741|       |
 1742|    287|    case ITEXTURE1DARRAY:
  ------------------
  |  Branch (1742:5): [True: 287, False: 1.85M]
  ------------------
 1743|    574|    case UTEXTURE1D:
  ------------------
  |  Branch (1743:5): [True: 287, False: 1.85M]
  ------------------
 1744|    861|    case ITEXTURE1D:
  ------------------
  |  Branch (1744:5): [True: 287, False: 1.85M]
  ------------------
 1745|  1.14k|    case UTEXTURE1DARRAY:
  ------------------
  |  Branch (1745:5): [True: 287, False: 1.85M]
  ------------------
 1746|  1.34k|    case TEXTUREBUFFER:
  ------------------
  |  Branch (1746:5): [True: 194, False: 1.85M]
  ------------------
 1747|  1.63k|    case ITEXTURE2DRECT:
  ------------------
  |  Branch (1747:5): [True: 292, False: 1.85M]
  ------------------
 1748|  1.92k|    case UTEXTURE2DRECT:
  ------------------
  |  Branch (1748:5): [True: 292, False: 1.85M]
  ------------------
 1749|  2.11k|    case ITEXTUREBUFFER:
  ------------------
  |  Branch (1749:5): [True: 188, False: 1.85M]
  ------------------
 1750|  2.30k|    case UTEXTUREBUFFER:
  ------------------
  |  Branch (1750:5): [True: 188, False: 1.85M]
  ------------------
 1751|  2.50k|    case TEXTURE2DMS:
  ------------------
  |  Branch (1751:5): [True: 204, False: 1.85M]
  ------------------
 1752|  2.70k|    case ITEXTURE2DMS:
  ------------------
  |  Branch (1752:5): [True: 198, False: 1.85M]
  ------------------
 1753|  2.90k|    case UTEXTURE2DMS:
  ------------------
  |  Branch (1753:5): [True: 198, False: 1.85M]
  ------------------
 1754|  3.10k|    case TEXTURE2DMSARRAY:
  ------------------
  |  Branch (1754:5): [True: 204, False: 1.85M]
  ------------------
 1755|  3.30k|    case ITEXTURE2DMSARRAY:
  ------------------
  |  Branch (1755:5): [True: 198, False: 1.85M]
  ------------------
 1756|  3.50k|    case UTEXTURE2DMSARRAY:
  ------------------
  |  Branch (1756:5): [True: 198, False: 1.85M]
  ------------------
 1757|  3.79k|    case TEXTURE1D:
  ------------------
  |  Branch (1757:5): [True: 293, False: 1.85M]
  ------------------
 1758|  4.09k|    case TEXTURE2DRECT:
  ------------------
  |  Branch (1758:5): [True: 298, False: 1.85M]
  ------------------
 1759|  4.38k|    case TEXTURE1DARRAY:
  ------------------
  |  Branch (1759:5): [True: 293, False: 1.85M]
  ------------------
 1760|  4.38k|        if (parseContext.spvVersion.vulkan > 0)
  ------------------
  |  Branch (1760:13): [True: 4.38k, False: 0]
  ------------------
 1761|  4.38k|            return keyword;
 1762|      0|        else
 1763|      0|            return identifierOrType();
 1764|       |
 1765|    105|    case SUBPASSINPUT:
  ------------------
  |  Branch (1765:5): [True: 105, False: 1.85M]
  ------------------
 1766|    230|    case SUBPASSINPUTMS:
  ------------------
  |  Branch (1766:5): [True: 125, False: 1.85M]
  ------------------
 1767|    329|    case ISUBPASSINPUT:
  ------------------
  |  Branch (1767:5): [True: 99, False: 1.85M]
  ------------------
 1768|    448|    case ISUBPASSINPUTMS:
  ------------------
  |  Branch (1768:5): [True: 119, False: 1.85M]
  ------------------
 1769|    547|    case USUBPASSINPUT:
  ------------------
  |  Branch (1769:5): [True: 99, False: 1.85M]
  ------------------
 1770|    666|    case USUBPASSINPUTMS:
  ------------------
  |  Branch (1770:5): [True: 119, False: 1.85M]
  ------------------
 1771|    864|    case ATTACHMENTEXT:
  ------------------
  |  Branch (1771:5): [True: 198, False: 1.85M]
  ------------------
 1772|  1.06k|    case IATTACHMENTEXT:
  ------------------
  |  Branch (1772:5): [True: 198, False: 1.85M]
  ------------------
 1773|  1.26k|    case UATTACHMENTEXT:
  ------------------
  |  Branch (1773:5): [True: 198, False: 1.85M]
  ------------------
 1774|  1.26k|        if (parseContext.spvVersion.vulkan > 0)
  ------------------
  |  Branch (1774:13): [True: 1.26k, False: 0]
  ------------------
 1775|  1.26k|            return keyword;
 1776|      0|        else
 1777|      0|            return identifierOrType();
 1778|       |
 1779|    800|    case F16SAMPLER1D:
  ------------------
  |  Branch (1779:5): [True: 800, False: 1.85M]
  ------------------
 1780|  2.62k|    case F16SAMPLER2D:
  ------------------
  |  Branch (1780:5): [True: 1.82k, False: 1.85M]
  ------------------
 1781|  3.61k|    case F16SAMPLER3D:
  ------------------
  |  Branch (1781:5): [True: 990, False: 1.85M]
  ------------------
 1782|  4.23k|    case F16SAMPLER2DRECT:
  ------------------
  |  Branch (1782:5): [True: 625, False: 1.85M]
  ------------------
 1783|  4.87k|    case F16SAMPLERCUBE:
  ------------------
  |  Branch (1783:5): [True: 640, False: 1.85M]
  ------------------
 1784|  5.33k|    case F16SAMPLER1DARRAY:
  ------------------
  |  Branch (1784:5): [True: 460, False: 1.85M]
  ------------------
 1785|  6.81k|    case F16SAMPLER2DARRAY:
  ------------------
  |  Branch (1785:5): [True: 1.48k, False: 1.85M]
  ------------------
 1786|  7.45k|    case F16SAMPLERCUBEARRAY:
  ------------------
  |  Branch (1786:5): [True: 640, False: 1.85M]
  ------------------
 1787|  7.47k|    case F16SAMPLERBUFFER:
  ------------------
  |  Branch (1787:5): [True: 15, False: 1.85M]
  ------------------
 1788|  7.50k|    case F16SAMPLER2DMS:
  ------------------
  |  Branch (1788:5): [True: 30, False: 1.85M]
  ------------------
 1789|  7.53k|    case F16SAMPLER2DMSARRAY:
  ------------------
  |  Branch (1789:5): [True: 30, False: 1.85M]
  ------------------
 1790|  8.09k|    case F16SAMPLER1DSHADOW:
  ------------------
  |  Branch (1790:5): [True: 560, False: 1.85M]
  ------------------
 1791|  9.03k|    case F16SAMPLER2DSHADOW:
  ------------------
  |  Branch (1791:5): [True: 940, False: 1.85M]
  ------------------
 1792|  9.45k|    case F16SAMPLER1DARRAYSHADOW:
  ------------------
  |  Branch (1792:5): [True: 420, False: 1.85M]
  ------------------
 1793|  9.89k|    case F16SAMPLER2DARRAYSHADOW:
  ------------------
  |  Branch (1793:5): [True: 440, False: 1.85M]
  ------------------
 1794|  10.2k|    case F16SAMPLER2DRECTSHADOW:
  ------------------
  |  Branch (1794:5): [True: 385, False: 1.85M]
  ------------------
 1795|  10.6k|    case F16SAMPLERCUBESHADOW:
  ------------------
  |  Branch (1795:5): [True: 420, False: 1.85M]
  ------------------
 1796|  10.9k|    case F16SAMPLERCUBEARRAYSHADOW:
  ------------------
  |  Branch (1796:5): [True: 260, False: 1.85M]
  ------------------
 1797|       |
 1798|  11.0k|    case F16IMAGE1D:
  ------------------
  |  Branch (1798:5): [True: 115, False: 1.85M]
  ------------------
 1799|  11.1k|    case F16IMAGE2D:
  ------------------
  |  Branch (1799:5): [True: 125, False: 1.85M]
  ------------------
 1800|  11.3k|    case F16IMAGE3D:
  ------------------
  |  Branch (1800:5): [True: 125, False: 1.85M]
  ------------------
 1801|  11.4k|    case F16IMAGE2DRECT:
  ------------------
  |  Branch (1801:5): [True: 110, False: 1.85M]
  ------------------
 1802|  11.5k|    case F16IMAGECUBE:
  ------------------
  |  Branch (1802:5): [True: 125, False: 1.85M]
  ------------------
 1803|  11.6k|    case F16IMAGE1DARRAY:
  ------------------
  |  Branch (1803:5): [True: 115, False: 1.85M]
  ------------------
 1804|  11.7k|    case F16IMAGE2DARRAY:
  ------------------
  |  Branch (1804:5): [True: 125, False: 1.85M]
  ------------------
 1805|  11.9k|    case F16IMAGECUBEARRAY:
  ------------------
  |  Branch (1805:5): [True: 125, False: 1.85M]
  ------------------
 1806|  12.0k|    case F16IMAGEBUFFER:
  ------------------
  |  Branch (1806:5): [True: 105, False: 1.85M]
  ------------------
 1807|  12.1k|    case F16IMAGE2DMS:
  ------------------
  |  Branch (1807:5): [True: 115, False: 1.85M]
  ------------------
 1808|  12.2k|    case F16IMAGE2DMSARRAY:
  ------------------
  |  Branch (1808:5): [True: 115, False: 1.85M]
  ------------------
 1809|       |
 1810|  12.2k|    case F16TEXTURE1D:
  ------------------
  |  Branch (1810:5): [True: 30, False: 1.85M]
  ------------------
 1811|  12.3k|    case F16TEXTURE2D:
  ------------------
  |  Branch (1811:5): [True: 50, False: 1.85M]
  ------------------
 1812|  12.3k|    case F16TEXTURE3D:
  ------------------
  |  Branch (1812:5): [True: 50, False: 1.85M]
  ------------------
 1813|  12.4k|    case F16TEXTURE2DRECT:
  ------------------
  |  Branch (1813:5): [True: 45, False: 1.85M]
  ------------------
 1814|  12.4k|    case F16TEXTURECUBE:
  ------------------
  |  Branch (1814:5): [True: 10, False: 1.85M]
  ------------------
 1815|  12.4k|    case F16TEXTURE1DARRAY:
  ------------------
  |  Branch (1815:5): [True: 30, False: 1.85M]
  ------------------
 1816|  12.5k|    case F16TEXTURE2DARRAY:
  ------------------
  |  Branch (1816:5): [True: 50, False: 1.85M]
  ------------------
 1817|  12.5k|    case F16TEXTURECUBEARRAY:
  ------------------
  |  Branch (1817:5): [True: 10, False: 1.85M]
  ------------------
 1818|  12.5k|    case F16TEXTUREBUFFER:
  ------------------
  |  Branch (1818:5): [True: 15, False: 1.85M]
  ------------------
 1819|  12.5k|    case F16TEXTURE2DMS:
  ------------------
  |  Branch (1819:5): [True: 30, False: 1.85M]
  ------------------
 1820|  12.6k|    case F16TEXTURE2DMSARRAY:
  ------------------
  |  Branch (1820:5): [True: 30, False: 1.85M]
  ------------------
 1821|       |
 1822|  12.6k|    case F16SUBPASSINPUT:
  ------------------
  |  Branch (1822:5): [True: 10, False: 1.85M]
  ------------------
 1823|  12.6k|    case F16SUBPASSINPUTMS:
  ------------------
  |  Branch (1823:5): [True: 10, False: 1.85M]
  ------------------
 1824|  12.6k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1824:13): [True: 12.6k, False: 0]
  ------------------
 1825|  12.6k|            parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float_fetch)) {
  ------------------
  |  Branch (1825:13): [True: 0, False: 0]
  ------------------
 1826|  12.6k|            afterType = true;
 1827|  12.6k|            return keyword;
 1828|  12.6k|        }
 1829|      0|        return identifierOrType();
 1830|       |
 1831|      0|    case EXPLICITINTERPAMD:
  ------------------
  |  Branch (1831:5): [True: 0, False: 1.85M]
  ------------------
 1832|      0|        if (parseContext.extensionTurnedOn(E_GL_AMD_shader_explicit_vertex_parameter))
  ------------------
  |  Branch (1832:13): [True: 0, False: 0]
  ------------------
 1833|      0|            return keyword;
 1834|      0|        return identifierOrType();
 1835|       |
 1836|      0|    case PERVERTEXNV:
  ------------------
  |  Branch (1836:5): [True: 0, False: 1.85M]
  ------------------
 1837|      0|        if ((!parseContext.isEsProfile() && parseContext.version >= 450) ||
  ------------------
  |  Branch (1837:14): [True: 0, False: 0]
  |  Branch (1837:45): [True: 0, False: 0]
  ------------------
 1838|      0|            parseContext.extensionTurnedOn(E_GL_NV_fragment_shader_barycentric))
  ------------------
  |  Branch (1838:13): [True: 0, False: 0]
  ------------------
 1839|      0|            return keyword;
 1840|      0|        return identifierOrType();
 1841|       |
 1842|      0|    case PERVERTEXEXT:
  ------------------
  |  Branch (1842:5): [True: 0, False: 1.85M]
  ------------------
 1843|      0|        if ((!parseContext.isEsProfile() && parseContext.version >= 450) ||
  ------------------
  |  Branch (1843:14): [True: 0, False: 0]
  |  Branch (1843:45): [True: 0, False: 0]
  ------------------
 1844|      0|            parseContext.extensionTurnedOn(E_GL_EXT_fragment_shader_barycentric))
  ------------------
  |  Branch (1844:13): [True: 0, False: 0]
  ------------------
 1845|      0|            return keyword;
 1846|      0|        return identifierOrType();
 1847|       |
 1848|      0|    case PRECISE:
  ------------------
  |  Branch (1848:5): [True: 0, False: 1.85M]
  ------------------
 1849|      0|        if ((parseContext.isEsProfile() &&
  ------------------
  |  Branch (1849:14): [True: 0, False: 0]
  ------------------
 1850|      0|             (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) ||
  ------------------
  |  Branch (1850:15): [True: 0, False: 0]
  |  Branch (1850:46): [True: 0, False: 0]
  ------------------
 1851|      0|            (!parseContext.isEsProfile() &&
  ------------------
  |  Branch (1851:14): [True: 0, False: 0]
  ------------------
 1852|      0|             (parseContext.version >= 400 
  ------------------
  |  Branch (1852:15): [True: 0, False: 0]
  ------------------
 1853|      0|             || parseContext.extensionsTurnedOn(Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5))))
  ------------------
  |  Branch (1853:17): [True: 0, False: 0]
  ------------------
 1854|      0|            return keyword;
 1855|      0|        if (parseContext.isEsProfile() && parseContext.version == 310) {
  ------------------
  |  Branch (1855:13): [True: 0, False: 0]
  |  Branch (1855:43): [True: 0, False: 0]
  ------------------
 1856|      0|            reservedWord();
 1857|      0|            return keyword;
 1858|      0|        }
 1859|      0|        return identifierOrType();
 1860|       |
 1861|      5|    case PERPRIMITIVENV:
  ------------------
  |  Branch (1861:5): [True: 5, False: 1.85M]
  ------------------
 1862|     40|    case PERVIEWNV:
  ------------------
  |  Branch (1862:5): [True: 35, False: 1.85M]
  ------------------
 1863|     40|    case PERTASKNV:
  ------------------
  |  Branch (1863:5): [True: 0, False: 1.85M]
  ------------------
 1864|     40|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1864:13): [True: 40, False: 0]
  ------------------
 1865|      0|            parseContext.extensionTurnedOn(E_GL_NV_mesh_shader))
  ------------------
  |  Branch (1865:13): [True: 0, False: 0]
  ------------------
 1866|     40|            return keyword;
 1867|      0|        return identifierOrType();
 1868|       |
 1869|      5|    case PERPRIMITIVEEXT:
  ------------------
  |  Branch (1869:5): [True: 5, False: 1.85M]
  ------------------
 1870|      5|    case TASKPAYLOADWORKGROUPEXT:
  ------------------
  |  Branch (1870:5): [True: 0, False: 1.85M]
  ------------------
 1871|      5|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1871:13): [True: 5, False: 0]
  ------------------
 1872|      0|            parseContext.extensionTurnedOn(E_GL_EXT_mesh_shader))
  ------------------
  |  Branch (1872:13): [True: 0, False: 0]
  ------------------
 1873|      5|            return keyword;
 1874|      0|        return identifierOrType();
 1875|       |
 1876|    210|    case FCOOPMATNV:
  ------------------
  |  Branch (1876:5): [True: 210, False: 1.85M]
  ------------------
 1877|    210|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1877:13): [True: 210, False: 0]
  ------------------
 1878|    210|            parseContext.extensionTurnedOn(E_GL_NV_cooperative_matrix)) {
  ------------------
  |  Branch (1878:13): [True: 0, False: 0]
  ------------------
 1879|    210|            afterType = true;
 1880|    210|            return keyword;
 1881|    210|        }
 1882|      0|        return identifierOrType();
 1883|       |
 1884|    280|    case UCOOPMATNV:
  ------------------
  |  Branch (1884:5): [True: 280, False: 1.85M]
  ------------------
 1885|    560|    case ICOOPMATNV:
  ------------------
  |  Branch (1885:5): [True: 280, False: 1.85M]
  ------------------
 1886|    560|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1886:13): [True: 560, False: 0]
  ------------------
 1887|    560|            parseContext.extensionTurnedOn(E_GL_NV_integer_cooperative_matrix)) {
  ------------------
  |  Branch (1887:13): [True: 0, False: 0]
  ------------------
 1888|    560|            afterType = true;
 1889|    560|            return keyword;
 1890|    560|        }
 1891|      0|        return identifierOrType();
 1892|    305|    case TENSORARM:
  ------------------
  |  Branch (1892:5): [True: 305, False: 1.85M]
  ------------------
 1893|    305|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1893:13): [True: 305, False: 0]
  ------------------
 1894|    305|            parseContext.extensionTurnedOn(E_GL_ARM_tensors)) {
  ------------------
  |  Branch (1894:13): [True: 0, False: 0]
  ------------------
 1895|    305|            afterType = true;
 1896|    305|            return keyword;
 1897|    305|        }
 1898|      0|        return identifierOrType();
 1899|       |
 1900|  1.06k|    case COOPMAT:
  ------------------
  |  Branch (1900:5): [True: 1.06k, False: 1.85M]
  ------------------
 1901|  1.06k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1901:13): [True: 1.06k, False: 0]
  ------------------
 1902|  1.06k|            parseContext.extensionTurnedOn(E_GL_KHR_cooperative_matrix)) {
  ------------------
  |  Branch (1902:13): [True: 0, False: 0]
  ------------------
 1903|  1.06k|            afterType = true;
 1904|  1.06k|            return keyword;
 1905|  1.06k|        }
 1906|      0|        return identifierOrType();
 1907|       |
 1908|  3.97k|    case COOPVECNV:
  ------------------
  |  Branch (1908:5): [True: 3.97k, False: 1.84M]
  ------------------
 1909|  3.97k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1909:13): [True: 3.97k, False: 0]
  ------------------
 1910|  3.97k|            parseContext.extensionTurnedOn(E_GL_NV_cooperative_vector)) {
  ------------------
  |  Branch (1910:13): [True: 0, False: 0]
  ------------------
 1911|  3.97k|            afterType = true;
 1912|  3.97k|            return keyword;
 1913|  3.97k|        }
 1914|      0|        return identifierOrType();
 1915|       |
 1916|  36.2k|    case VECTOR:
  ------------------
  |  Branch (1916:5): [True: 36.2k, False: 1.81M]
  ------------------
 1917|  36.2k|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1917:13): [True: 36.2k, False: 0]
  ------------------
 1918|  36.2k|            parseContext.extensionTurnedOn(E_GL_EXT_long_vector)) {
  ------------------
  |  Branch (1918:13): [True: 0, False: 0]
  ------------------
 1919|  36.2k|            afterType = true;
 1920|  36.2k|            return keyword;
 1921|  36.2k|        }
 1922|      0|        return identifierOrType();
 1923|       |
 1924|      0|    case DEMOTE:
  ------------------
  |  Branch (1924:5): [True: 0, False: 1.85M]
  ------------------
 1925|      0|        if (parseContext.extensionTurnedOn(E_GL_EXT_demote_to_helper_invocation))
  ------------------
  |  Branch (1925:13): [True: 0, False: 0]
  ------------------
 1926|      0|            return keyword;
 1927|      0|        else
 1928|      0|            return identifierOrType();
 1929|       |
 1930|      0|    case SPIRV_INSTRUCTION:
  ------------------
  |  Branch (1930:5): [True: 0, False: 1.85M]
  ------------------
 1931|      0|    case SPIRV_EXECUTION_MODE:
  ------------------
  |  Branch (1931:5): [True: 0, False: 1.85M]
  ------------------
 1932|      0|    case SPIRV_EXECUTION_MODE_ID:
  ------------------
  |  Branch (1932:5): [True: 0, False: 1.85M]
  ------------------
 1933|      0|    case SPIRV_DECORATE:
  ------------------
  |  Branch (1933:5): [True: 0, False: 1.85M]
  ------------------
 1934|      0|    case SPIRV_DECORATE_ID:
  ------------------
  |  Branch (1934:5): [True: 0, False: 1.85M]
  ------------------
 1935|      0|    case SPIRV_DECORATE_STRING:
  ------------------
  |  Branch (1935:5): [True: 0, False: 1.85M]
  ------------------
 1936|      0|    case SPIRV_TYPE:
  ------------------
  |  Branch (1936:5): [True: 0, False: 1.85M]
  ------------------
 1937|      0|    case SPIRV_STORAGE_CLASS:
  ------------------
  |  Branch (1937:5): [True: 0, False: 1.85M]
  ------------------
 1938|      0|    case SPIRV_BY_REFERENCE:
  ------------------
  |  Branch (1938:5): [True: 0, False: 1.85M]
  ------------------
 1939|      0|    case SPIRV_LITERAL:
  ------------------
  |  Branch (1939:5): [True: 0, False: 1.85M]
  ------------------
 1940|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1940:13): [True: 0, False: 0]
  ------------------
 1941|      0|            parseContext.extensionTurnedOn(E_GL_EXT_spirv_intrinsics))
  ------------------
  |  Branch (1941:13): [True: 0, False: 0]
  ------------------
 1942|      0|            return keyword;
 1943|      0|        return identifierOrType();
 1944|       |
 1945|      0|    case HITOBJECTNV:
  ------------------
  |  Branch (1945:5): [True: 0, False: 1.85M]
  ------------------
 1946|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1946:13): [True: 0, False: 0]
  ------------------
 1947|      0|            (!parseContext.isEsProfile() && parseContext.version >= 460
  ------------------
  |  Branch (1947:14): [True: 0, False: 0]
  |  Branch (1947:45): [True: 0, False: 0]
  ------------------
 1948|      0|                 && parseContext.extensionTurnedOn(E_GL_NV_shader_invocation_reorder)))
  ------------------
  |  Branch (1948:21): [True: 0, False: 0]
  ------------------
 1949|      0|            return keyword;
 1950|      0|        return identifierOrType();
 1951|       |
 1952|      0|    case HITOBJECTEXT:
  ------------------
  |  Branch (1952:5): [True: 0, False: 1.85M]
  ------------------
 1953|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1953:13): [True: 0, False: 0]
  ------------------
 1954|      0|            (!parseContext.isEsProfile() && parseContext.version >= 460
  ------------------
  |  Branch (1954:14): [True: 0, False: 0]
  |  Branch (1954:45): [True: 0, False: 0]
  ------------------
 1955|      0|                 && parseContext.extensionTurnedOn(E_GL_EXT_shader_invocation_reorder)))
  ------------------
  |  Branch (1955:21): [True: 0, False: 0]
  ------------------
 1956|      0|            return keyword;
 1957|      0|        return identifierOrType();
 1958|       |
 1959|      0|    case HITOBJECTATTRNV:
  ------------------
  |  Branch (1959:5): [True: 0, False: 1.85M]
  ------------------
 1960|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1960:13): [True: 0, False: 0]
  ------------------
 1961|      0|            (!parseContext.isEsProfile() && parseContext.version >= 460
  ------------------
  |  Branch (1961:14): [True: 0, False: 0]
  |  Branch (1961:45): [True: 0, False: 0]
  ------------------
 1962|      0|                 && parseContext.extensionTurnedOn(E_GL_NV_shader_invocation_reorder)))
  ------------------
  |  Branch (1962:21): [True: 0, False: 0]
  ------------------
 1963|      0|            return keyword;
 1964|      0|        return identifierOrType();
 1965|       |
 1966|      0|    case HITOBJECTATTREXT:
  ------------------
  |  Branch (1966:5): [True: 0, False: 1.85M]
  ------------------
 1967|      0|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1967:13): [True: 0, False: 0]
  ------------------
 1968|      0|            (!parseContext.isEsProfile() && parseContext.version >= 460
  ------------------
  |  Branch (1968:14): [True: 0, False: 0]
  |  Branch (1968:45): [True: 0, False: 0]
  ------------------
 1969|      0|                 && parseContext.extensionTurnedOn(E_GL_EXT_shader_invocation_reorder)))
  ------------------
  |  Branch (1969:21): [True: 0, False: 0]
  ------------------
 1970|      0|            return keyword;
 1971|      0|        return identifierOrType();
 1972|       |
 1973|     65|    case FUNCTION:
  ------------------
  |  Branch (1973:5): [True: 65, False: 1.85M]
  ------------------
 1974|    365|    case TENSORLAYOUTNV:
  ------------------
  |  Branch (1974:5): [True: 300, False: 1.85M]
  ------------------
 1975|    550|    case TENSORVIEWNV:
  ------------------
  |  Branch (1975:5): [True: 185, False: 1.85M]
  ------------------
 1976|    550|        if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (1976:13): [True: 550, False: 0]
  ------------------
 1977|    550|            parseContext.extensionTurnedOn(E_GL_NV_cooperative_matrix2)) {
  ------------------
  |  Branch (1977:13): [True: 0, False: 0]
  ------------------
 1978|    550|            afterType = true;
 1979|    550|            return keyword;
 1980|    550|        }
 1981|      0|        return identifierOrType();
 1982|       |
 1983|      0|    case RESOURCEHEAP:
  ------------------
  |  Branch (1983:5): [True: 0, False: 1.85M]
  ------------------
 1984|      0|    case SAMPLERHEAP:
  ------------------
  |  Branch (1984:5): [True: 0, False: 1.85M]
  ------------------
 1985|      0|        if (parseContext.extensionTurnedOn(E_GL_EXT_structured_descriptor_heap) &&
  ------------------
  |  Branch (1985:13): [True: 0, False: 0]
  ------------------
 1986|      0|            parseContext.extensionTurnedOn(E_GL_EXT_descriptor_heap))
  ------------------
  |  Branch (1986:13): [True: 0, False: 0]
  ------------------
 1987|      0|            return keyword;
 1988|      0|        return identifierOrType();
 1989|       |
 1990|      0|    default:
  ------------------
  |  Branch (1990:5): [True: 0, False: 1.85M]
  ------------------
 1991|      0|        parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);
 1992|      0|        return 0;
 1993|  1.85M|    }
 1994|  1.85M|}
_ZN7glslang12TScanContext16identifierOrTypeEv:
 1997|   620k|{
 1998|   620k|    parserToken->sType.lex.string = NewPoolTString(tokenText);
 1999|   620k|    if (field)
  ------------------
  |  Branch (1999:9): [True: 582, False: 619k]
  ------------------
 2000|    582|        return IDENTIFIER;
 2001|       |
 2002|       |    // If we see an identifier right after a type, this might be a declarator.
 2003|       |    // But not in template parameters (inside angle brackets), array expressions (inside square brackets),
 2004|       |    // or function parameters (inside parentheses)
 2005|   619k|    if (afterType && angleBracketDepth == 0 && squareBracketDepth == 0 && parenDepth == 0) {
  ------------------
  |  Branch (2005:9): [True: 607k, False: 11.9k]
  |  Branch (2005:22): [True: 607k, False: 0]
  |  Branch (2005:48): [True: 607k, False: 0]
  |  Branch (2005:75): [True: 481k, False: 126k]
  ------------------
 2006|   481k|        afterDeclarator = true;
 2007|   481k|        afterType = false;
 2008|   481k|        return IDENTIFIER;
 2009|   481k|    }
 2010|       |
 2011|   138k|    parserToken->sType.lex.symbol = parseContext.symbolTable.find(*parserToken->sType.lex.string);
 2012|   138k|    if ((afterType == false && afterStruct == false) && parserToken->sType.lex.symbol != nullptr) {
  ------------------
  |  Branch (2012:10): [True: 11.9k, False: 126k]
  |  Branch (2012:32): [True: 11.9k, False: 10]
  |  Branch (2012:57): [True: 8.85k, False: 3.08k]
  ------------------
 2013|  8.85k|        if (const TVariable* variable = parserToken->sType.lex.symbol->getAsVariable()) {
  ------------------
  |  Branch (2013:30): [True: 8.85k, False: 0]
  ------------------
 2014|  8.85k|            if (variable->isUserType() &&
  ------------------
  |  Branch (2014:17): [True: 60, False: 8.79k]
  ------------------
 2015|       |                // treat redeclaration of forward-declared buffer/uniform reference as an identifier
 2016|     60|                !(variable->getType().isReference() && afterBuffer)) {
  ------------------
  |  Branch (2016:19): [True: 0, False: 60]
  |  Branch (2016:56): [True: 0, False: 0]
  ------------------
 2017|       |
 2018|       |                // If we're in a declarator list (like "float a, B;"), treat struct names as IDENTIFIER
 2019|       |                // to fix GitHub issue #3931
 2020|     60|                if (inDeclaratorList) {
  ------------------
  |  Branch (2020:21): [True: 0, False: 60]
  ------------------
 2021|      0|                    return IDENTIFIER;
 2022|      0|                }
 2023|       |                
 2024|     60|                afterType = true;
 2025|     60|                return TYPE_NAME;
 2026|     60|            }
 2027|  8.85k|        }
 2028|  8.85k|    }
 2029|       |
 2030|   138k|    return IDENTIFIER;
 2031|   138k|}
_ZN7glslang12TScanContext12reservedWordEv:
 2037|  2.35k|{
 2038|  2.35k|    if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (2038:9): [True: 0, False: 2.35k]
  ------------------
 2039|      0|        parseContext.error(loc, "Reserved word.", tokenText, "", "");
 2040|       |
 2041|  2.35k|    return 0;
 2042|  2.35k|}
_ZN7glslang12TScanContext20es30ReservedFromGLSLEi:
 2061|  78.0k|{
 2062|  78.0k|    if (parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  Branch (2062:9): [True: 78.0k, False: 15]
  ------------------
 2063|  78.0k|        return keyword;
 2064|       |
 2065|     15|    if ((parseContext.isEsProfile() && parseContext.version < 300) ||
  ------------------
  |  Branch (2065:10): [True: 0, False: 15]
  |  Branch (2065:40): [True: 0, False: 0]
  ------------------
 2066|     15|        (!parseContext.isEsProfile() && parseContext.version < version)) {
  ------------------
  |  Branch (2066:10): [True: 15, False: 0]
  |  Branch (2066:41): [True: 0, False: 15]
  ------------------
 2067|      0|            if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2067:17): [True: 0, False: 0]
  ------------------
 2068|      0|                parseContext.warn(loc, "future reserved word in ES 300 and keyword in GLSL", tokenText, "");
 2069|       |
 2070|      0|            return identifierOrType();
 2071|     15|    } else if (parseContext.isEsProfile() && parseContext.version >= 300)
  ------------------
  |  Branch (2071:16): [True: 0, False: 15]
  |  Branch (2071:46): [True: 0, False: 0]
  ------------------
 2072|      0|        reservedWord();
 2073|       |
 2074|     15|    return keyword;
 2075|     15|}
_ZN7glslang12TScanContext18nonreservedKeywordEii:
 2080|   318k|{
 2081|   318k|    if ((parseContext.isEsProfile() && parseContext.version < esVersion) ||
  ------------------
  |  Branch (2081:10): [True: 0, False: 318k]
  |  Branch (2081:40): [True: 0, False: 0]
  ------------------
 2082|   318k|        (!parseContext.isEsProfile() && parseContext.version < nonEsVersion)) {
  ------------------
  |  Branch (2082:10): [True: 318k, False: 0]
  |  Branch (2082:41): [True: 0, False: 318k]
  ------------------
 2083|      0|        if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2083:13): [True: 0, False: 0]
  ------------------
 2084|      0|            parseContext.warn(loc, "using future keyword", tokenText, "");
 2085|       |
 2086|      0|        return identifierOrType();
 2087|      0|    }
 2088|       |
 2089|   318k|    return keyword;
 2090|   318k|}
_ZN7glslang12TScanContext16precisionKeywordEv:
 2093|  86.5k|{
 2094|  86.5k|    if (parseContext.isEsProfile() || parseContext.version >= 130)
  ------------------
  |  Branch (2094:9): [True: 0, False: 86.5k]
  |  Branch (2094:39): [True: 86.5k, False: 0]
  ------------------
 2095|  86.5k|        return keyword;
 2096|       |
 2097|      0|    if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2097:9): [True: 0, False: 0]
  ------------------
 2098|      0|        parseContext.warn(loc, "using ES precision qualifier keyword", tokenText, "");
 2099|       |
 2100|      0|    return identifierOrType();
 2101|  86.5k|}
_ZN7glslang12TScanContext6matNxMEv:
 2104|  3.38k|{
 2105|  3.38k|    afterType = true;
 2106|       |
 2107|  3.38k|    if (parseContext.version > 110)
  ------------------
  |  Branch (2107:9): [True: 3.38k, False: 0]
  ------------------
 2108|  3.38k|        return keyword;
 2109|       |
 2110|      0|    if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2110:9): [True: 0, False: 0]
  ------------------
 2111|      0|        parseContext.warn(loc, "using future non-square matrix type keyword", tokenText, "");
 2112|       |
 2113|      0|    return identifierOrType();
 2114|  3.38k|}
_ZN7glslang12TScanContext4dMatEv:
 2117|    504|{
 2118|    504|    afterType = true;
 2119|       |
 2120|    504|    if (parseContext.isEsProfile() && parseContext.version >= 300) {
  ------------------
  |  Branch (2120:9): [True: 0, False: 504]
  |  Branch (2120:39): [True: 0, False: 0]
  ------------------
 2121|      0|        reservedWord();
 2122|       |
 2123|      0|        return keyword;
 2124|      0|    }
 2125|       |
 2126|    504|    if (!parseContext.isEsProfile() && (parseContext.version >= 400 ||
  ------------------
  |  Branch (2126:9): [True: 504, False: 0]
  |  Branch (2126:41): [True: 441, False: 63]
  ------------------
 2127|     63|        parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2127:9): [True: 63, False: 0]
  ------------------
 2128|      0|        (parseContext.version >= 150 && parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64)) ||
  ------------------
  |  Branch (2128:10): [True: 0, False: 0]
  |  Branch (2128:41): [True: 0, False: 0]
  ------------------
 2129|      0|        (parseContext.version >= 150 && parseContext.extensionTurnedOn(E_GL_ARB_vertex_attrib_64bit)
  ------------------
  |  Branch (2129:10): [True: 0, False: 0]
  |  Branch (2129:41): [True: 0, False: 0]
  ------------------
 2130|      0|         && parseContext.language == EShLangVertex)))
  ------------------
  |  Branch (2130:13): [True: 0, False: 0]
  ------------------
 2131|    504|        return keyword;
 2132|       |
 2133|      0|    if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2133:9): [True: 0, False: 0]
  ------------------
 2134|      0|        parseContext.warn(loc, "using future type keyword", tokenText, "");
 2135|       |
 2136|      0|    return identifierOrType();
 2137|    504|}
_ZN7glslang12TScanContext20firstGenerationImageEb:
 2140|  34.6k|{
 2141|  34.6k|    if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2141:9): [True: 34.6k, False: 48]
  ------------------
 2142|     48|        (!parseContext.isEsProfile() && (parseContext.version >= 420 ||
  ------------------
  |  Branch (2142:10): [True: 48, False: 0]
  |  Branch (2142:42): [True: 48, False: 0]
  ------------------
 2143|      0|         parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))) ||
  ------------------
  |  Branch (2143:10): [True: 0, False: 0]
  ------------------
 2144|      0|        (inEs310 && parseContext.isEsProfile() && parseContext.version >= 310))
  ------------------
  |  Branch (2144:10): [True: 0, False: 0]
  |  Branch (2144:21): [True: 0, False: 0]
  |  Branch (2144:51): [True: 0, False: 0]
  ------------------
 2145|  34.6k|        return keyword;
 2146|       |
 2147|      0|    if ((parseContext.isEsProfile() && parseContext.version >= 300) ||
  ------------------
  |  Branch (2147:10): [True: 0, False: 0]
  |  Branch (2147:40): [True: 0, False: 0]
  ------------------
 2148|      0|        (!parseContext.isEsProfile() && parseContext.version >= 130)) {
  ------------------
  |  Branch (2148:10): [True: 0, False: 0]
  |  Branch (2148:41): [True: 0, False: 0]
  ------------------
 2149|      0|        reservedWord();
 2150|       |
 2151|      0|        return keyword;
 2152|      0|    }
 2153|       |
 2154|      0|    if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2154:9): [True: 0, False: 0]
  ------------------
 2155|      0|        parseContext.warn(loc, "using future type keyword", tokenText, "");
 2156|       |
 2157|      0|    return identifierOrType();
 2158|      0|}
_ZN7glslang12TScanContext21secondGenerationImageEv:
 2161|  13.0k|{
 2162|  13.0k|    if (parseContext.isEsProfile() && parseContext.version >= 310) {
  ------------------
  |  Branch (2162:9): [True: 0, False: 13.0k]
  |  Branch (2162:39): [True: 0, False: 0]
  ------------------
 2163|      0|        reservedWord();
 2164|      0|        return keyword;
 2165|      0|    }
 2166|       |
 2167|  13.0k|    if (parseContext.symbolTable.atBuiltInLevel() ||
  ------------------
  |  Branch (2167:9): [True: 12.9k, False: 18]
  ------------------
 2168|     18|        (!parseContext.isEsProfile() &&
  ------------------
  |  Branch (2168:10): [True: 18, False: 0]
  ------------------
 2169|     18|         (parseContext.version >= 420 || parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
  ------------------
  |  Branch (2169:11): [True: 18, False: 0]
  |  Branch (2169:42): [True: 0, False: 0]
  ------------------
 2170|  13.0k|        return keyword;
 2171|       |
 2172|      0|    if (parseContext.isForwardCompatible())
  ------------------
  |  Branch (2172:9): [True: 0, False: 0]
  ------------------
 2173|      0|        parseContext.warn(loc, "using future type keyword", tokenText, "");
 2174|       |
 2175|      0|    return identifierOrType();
 2176|  13.0k|}
_ZN7glslang12TParserTokenC2ER7YYSTYPE:
  281|  4.56M|    explicit TParserToken(YYSTYPE& b) : sType(b) { }
Scan.cpp:_ZNK12_GLOBAL__N_18str_hashclEPKc:
  312|  4.94M|    {
  313|       |        // djb2
  314|  4.94M|        unsigned long hash = 5381;
  315|  4.94M|        int c;
  316|       |
  317|  45.6M|        while ((c = *str++) != 0)
  ------------------
  |  Branch (317:16): [True: 40.6M, False: 4.94M]
  ------------------
  318|  40.6M|            hash = ((hash << 5) + hash) + c;
  319|       |
  320|  4.94M|        return hash;
  321|  4.94M|    }
Scan.cpp:_ZNK12_GLOBAL__N_16str_eqclEPKcS2_:
  304|  1.85M|    {
  305|  1.85M|        return strcmp(lhs, rhs) == 0;
  306|  1.85M|    }

ShInitialize:
 1334|    125|{
 1335|    125|#ifndef DISABLE_THREAD_SUPPORT
 1336|    125|    const std::lock_guard<std::mutex> lock(init_lock);
 1337|    125|#endif
 1338|    125|    ++NumberOfClients;
 1339|       |
 1340|    125|    if (PerProcessGPA == nullptr)
  ------------------
  |  Branch (1340:9): [True: 125, False: 0]
  ------------------
 1341|    125|        PerProcessGPA = new TPoolAllocator();
 1342|       |
 1343|    125|    return 1;
 1344|    125|}
ShFinalize:
 1391|    125|{
 1392|    125|#ifndef DISABLE_THREAD_SUPPORT
 1393|    125|    const std::lock_guard<std::mutex> lock(init_lock);
 1394|    125|#endif
 1395|    125|    --NumberOfClients;
 1396|    125|    assert(NumberOfClients >= 0);
 1397|    125|    if (NumberOfClients > 0)
  ------------------
  |  Branch (1397:9): [True: 0, False: 125]
  ------------------
 1398|      0|        return 1;
 1399|       |
 1400|  2.25k|    for (int version = 0; version < VersionCount; ++version) {
  ------------------
  |  Branch (1400:27): [True: 2.12k, False: 125]
  ------------------
 1401|  10.6k|        for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) {
  ------------------
  |  Branch (1401:34): [True: 8.50k, False: 2.12k]
  ------------------
 1402|  42.5k|            for (int p = 0; p < ProfileCount; ++p) {
  ------------------
  |  Branch (1402:29): [True: 34.0k, False: 8.50k]
  ------------------
 1403|   102k|                for (int source = 0; source < SourceCount; ++source) {
  ------------------
  |  Branch (1403:38): [True: 68.0k, False: 34.0k]
  ------------------
 1404|  1.02M|                    for (int stage = 0; stage < EShLangCount; ++stage) {
  ------------------
  |  Branch (1404:41): [True: 952k, False: 68.0k]
  ------------------
 1405|   952k|                        delete SharedSymbolTables[version][spvVersion][p][source][stage];
 1406|   952k|                        SharedSymbolTables[version][spvVersion][p][source][stage] = nullptr;
 1407|   952k|                    }
 1408|  68.0k|                }
 1409|  34.0k|            }
 1410|  8.50k|        }
 1411|  2.12k|    }
 1412|       |
 1413|  2.25k|    for (int version = 0; version < VersionCount; ++version) {
  ------------------
  |  Branch (1413:27): [True: 2.12k, False: 125]
  ------------------
 1414|  10.6k|        for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) {
  ------------------
  |  Branch (1414:34): [True: 8.50k, False: 2.12k]
  ------------------
 1415|  42.5k|            for (int p = 0; p < ProfileCount; ++p) {
  ------------------
  |  Branch (1415:29): [True: 34.0k, False: 8.50k]
  ------------------
 1416|   102k|                for (int source = 0; source < SourceCount; ++source) {
  ------------------
  |  Branch (1416:38): [True: 68.0k, False: 34.0k]
  ------------------
 1417|   204k|                    for (int pc = 0; pc < EPcCount; ++pc) {
  ------------------
  |  Branch (1417:38): [True: 136k, False: 68.0k]
  ------------------
 1418|   136k|                        delete CommonSymbolTable[version][spvVersion][p][source][pc];
 1419|   136k|                        CommonSymbolTable[version][spvVersion][p][source][pc] = nullptr;
 1420|   136k|                    }
 1421|  68.0k|                }
 1422|  34.0k|            }
 1423|  8.50k|        }
 1424|  2.12k|    }
 1425|       |
 1426|    125|    if (PerProcessGPA != nullptr) {
  ------------------
  |  Branch (1426:9): [True: 125, False: 0]
  ------------------
 1427|    125|        delete PerProcessGPA;
 1428|    125|        PerProcessGPA = nullptr;
 1429|    125|    }
 1430|       |
 1431|    125|    return 1;
 1432|    125|}
_ZN7glslang17InitializeProcessEv:
 1720|    125|{
 1721|    125|    return ShInitialize() != 0;
 1722|    125|}
_ZN7glslang15FinalizeProcessEv:
 1725|    125|{
 1726|    125|    ShFinalize();
 1727|    125|}
_ZN7glslang7TShaderC2E11EShLanguage:
 1740|    220|    : stage(s), lengths(nullptr), stringNames(nullptr), preamble(""), overrideVersion(0)
 1741|    220|{
 1742|    220|    pool = new TPoolAllocator;
 1743|    220|    infoSink = new TInfoSink;
 1744|    220|    compiler = new TDeferredCompiler(stage, *infoSink);
 1745|    220|    intermediate = new TIntermediate(s);
 1746|       |
 1747|       |    // clear environment (avoid constructors in them for use in a C interface)
 1748|    220|    environment.input.languageFamily = EShSourceNone;
 1749|    220|    environment.input.dialect = EShClientNone;
 1750|    220|    environment.input.vulkanRulesRelaxed = false;
 1751|    220|    environment.client.client = EShClientNone;
 1752|    220|    environment.target.language = EShTargetNone;
 1753|    220|    environment.target.hlslFunctionality1 = false;
 1754|    220|}
_ZN7glslang7TShaderD2Ev:
 1757|    220|{
 1758|    220|    delete infoSink;
 1759|    220|    delete compiler;
 1760|    220|    delete intermediate;
 1761|    220|    delete pool;
 1762|    220|}
_ZN7glslang7TShader29setStringsWithLengthsAndNamesEPKPKcPKiS4_i:
 1780|    220|{
 1781|    220|    strings = s;
 1782|    220|    numStrings = n;
 1783|    220|    lengths = l;
 1784|    220|    stringNames = names;
 1785|    220|}
_ZN7glslang7TShader13setEntryPointEPKc:
 1788|     65|{
 1789|     65|    intermediate->setEntryPointName(entryPoint);
 1790|     65|}
_ZN7glslang7TShader10setInvertYEb:
 1815|    220|void TShader::setInvertY(bool invert)                   { intermediate->setInvertY(invert); }
_ZN7glslang7TShader17setNanMinMaxClampEb:
 1818|    220|void TShader::setNanMinMaxClamp(bool useNonNan)         { intermediate->setNanMinMaxClamp(useNonNan); }
_ZN7glslang7TShader15setShiftBindingENS_13TResourceTypeEj:
 1821|    390|void TShader::setShiftBinding(TResourceType res, unsigned int base) {
 1822|    390|    intermediate->setShiftBinding(res, base);
 1823|    390|}
_ZN7glslang7TShader22setShiftSamplerBindingEj:
 1831|     65|void TShader::setShiftSamplerBinding(unsigned int base) { setShiftBinding(EResSampler, base); }
_ZN7glslang7TShader22setShiftTextureBindingEj:
 1833|     65|void TShader::setShiftTextureBinding(unsigned int base) { setShiftBinding(EResTexture, base); }
_ZN7glslang7TShader20setShiftImageBindingEj:
 1835|     65|void TShader::setShiftImageBinding(unsigned int base)   { setShiftBinding(EResImage, base); }
_ZN7glslang7TShader18setShiftUboBindingEj:
 1837|     65|void TShader::setShiftUboBinding(unsigned int base)     { setShiftBinding(EResUbo, base); }
_ZN7glslang7TShader18setShiftUavBindingEj:
 1841|     65|void TShader::setShiftUavBinding(unsigned int base)     { setShiftBinding(EResUav, base); }
_ZN7glslang7TShader19setShiftSsboBindingEj:
 1843|     65|void TShader::setShiftSsboBinding(unsigned int base)    { setShiftBinding(EResSsbo, base); }
_ZN7glslang7TShader18setAutoMapBindingsEb:
 1845|     65|void TShader::setAutoMapBindings(bool map)              { intermediate->setAutoMapBindings(map); }
_ZN7glslang7TShader19setAutoMapLocationsEb:
 1849|     65|void TShader::setAutoMapLocations(bool map)             { intermediate->setAutoMapLocations(map); }
_ZN7glslang7TShader21setResourceSetBindingERKNSt3__16vectorINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS6_IS8_EEEE:
 1860|     65|void TShader::setResourceSetBinding(const std::vector<std::string>& base)   { intermediate->setResourceSetBinding(base); }
_ZN7glslang7TShader16setHlslIoMappingEb:
 1877|     65|void TShader::setHlslIoMapping(bool hlslIoMap)          { intermediate->setHlslIoMapping(hlslIoMap); }
_ZN7glslang7TShader5parseEPK16TBuiltInResourcei8EProfilebb11EShMessagesRNS0_8IncluderE:
 1888|     65|{
 1889|     65|    SetThreadPoolAllocator(pool);
 1890|       |
 1891|     65|    if (! preamble)
  ------------------
  |  Branch (1891:9): [True: 0, False: 65]
  ------------------
 1892|      0|        preamble = "";
 1893|       |
 1894|     65|    return CompileDeferred(compiler, strings, numStrings, lengths, stringNames,
 1895|     65|                           preamble, EShOptNone, builtInResources, defaultVersion,
 1896|     65|                           defaultProfile, forceDefaultVersionAndProfile, overrideVersion,
 1897|     65|                           forwardCompatible, messages, *intermediate, includer, sourceEntryPointName,
 1898|     65|                           &environment, compileOnly);
 1899|     65|}
_ZN7glslang7TShader10preprocessEPK16TBuiltInResourcei8EProfilebb11EShMessagesPNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEERNS0_8IncluderE:
 1912|    155|{
 1913|    155|    SetThreadPoolAllocator(pool);
 1914|       |
 1915|    155|    if (! preamble)
  ------------------
  |  Branch (1915:9): [True: 0, False: 155]
  ------------------
 1916|      0|        preamble = "";
 1917|       |
 1918|    155|    return PreprocessDeferred(compiler, strings, numStrings, lengths, stringNames, preamble,
 1919|    155|                              EShOptNone, builtInResources, defaultVersion,
 1920|    155|                              defaultProfile, forceDefaultVersionAndProfile, overrideVersion,
 1921|    155|                              forwardCompatible, message, includer, *intermediate, output_string,
 1922|    155|                              &environment);
 1923|    155|}
_ZN7glslang7TShader10getInfoLogEv:
 1926|    220|{
 1927|    220|    return infoSink->info.c_str();
 1928|    220|}
ShaderLang.cpp:_ZN12_GLOBAL__N_115CompileDeferredEP9TCompilerPKPKciPKiS5_S3_20EShOptimizationLevelPK16TBuiltInResourcei8EProfilebib11EShMessagesRN7glslang13TIntermediateERNSE_7TShader8IncluderENSt3__112basic_stringIcNSK_11char_traitsIcEENSK_9allocatorIcEEEEPNSE_12TEnvironmentEb:
 1319|     65|{
 1320|     65|    DoFullParse parser;
 1321|     65|    return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames,
 1322|     65|                           preamble, optLevel, resources, defaultVersion,
 1323|     65|                           defaultProfile, forceDefaultVersionAndProfile, overrideVersion,
 1324|     65|                           forwardCompatible, messages, intermediate, parser,
 1325|     65|                           true, includer, sourceEntryPointName, environment, compileOnly);
 1326|     65|}
ShaderLang.cpp:_ZN12_GLOBAL__N_115ProcessDeferredINS_11DoFullParseEEEbP9TCompilerPKPKciPKiS7_S5_20EShOptimizationLevelPK16TBuiltInResourcei8EProfilebib11EShMessagesRN7glslang13TIntermediateERT_bRNSG_7TShader8IncluderENSt3__112basic_stringIcNSO_11char_traitsIcEENSO_9allocatorIcEEEEPKNSG_12TEnvironmentEb:
  820|     65|{
  821|       |    // This must be undone (.pop()) by the caller, after it finishes consuming the created tree.
  822|     65|    GetThreadPoolAllocator().push();
  823|       |
  824|     65|    if (numStrings == 0)
  ------------------
  |  Branch (824:9): [True: 0, False: 65]
  ------------------
  825|      0|        return true;
  826|       |
  827|       |    // Move to length-based strings, rather than null-terminated strings.
  828|       |    // Also, add strings to include the preamble and to ensure the shader is not null,
  829|       |    // which lets the grammar accept what was a null (post preprocessing) shader.
  830|       |    //
  831|       |    // Shader will look like
  832|       |    //   string 0:                system preamble
  833|       |    //   string 1:                custom preamble
  834|       |    //   string 2...numStrings+1: user's shader
  835|       |    //   string numStrings+2:     "int;"
  836|     65|    const int numPre = 2;
  837|     65|    const int numPost = requireNonempty? 1 : 0;
  ------------------
  |  Branch (837:25): [True: 65, False: 0]
  ------------------
  838|     65|    const int numTotal = numPre + numStrings + numPost;
  839|     65|    std::unique_ptr<size_t[]> lengths(new size_t[numTotal]);
  840|     65|    std::unique_ptr<const char*[]> strings(new const char*[numTotal]);
  841|     65|    std::unique_ptr<const char*[]> names(new const char*[numTotal]);
  842|    130|    for (int s = 0; s < numStrings; ++s) {
  ------------------
  |  Branch (842:21): [True: 65, False: 65]
  ------------------
  843|     65|        strings[s + numPre] = shaderStrings[s];
  844|     65|        if (inputLengths == nullptr || inputLengths[s] < 0)
  ------------------
  |  Branch (844:13): [True: 0, False: 65]
  |  Branch (844:40): [True: 0, False: 65]
  ------------------
  845|      0|            lengths[s + numPre] = strlen(shaderStrings[s]);
  846|     65|        else
  847|     65|            lengths[s + numPre] = inputLengths[s];
  848|     65|    }
  849|     65|    if (stringNames != nullptr) {
  ------------------
  |  Branch (849:9): [True: 65, False: 0]
  ------------------
  850|    130|        for (int s = 0; s < numStrings; ++s)
  ------------------
  |  Branch (850:25): [True: 65, False: 65]
  ------------------
  851|     65|            names[s + numPre] = stringNames[s];
  852|     65|    } else {
  853|      0|        for (int s = 0; s < numStrings; ++s)
  ------------------
  |  Branch (853:25): [True: 0, False: 0]
  ------------------
  854|      0|            names[s + numPre] = nullptr;
  855|      0|    }
  856|       |
  857|       |    // Get all the stages, languages, clients, and other environment
  858|       |    // stuff sorted out.
  859|     65|    EShSource sourceGuess = (messages & EShMsgReadHlsl) != 0 ? EShSourceHlsl : EShSourceGlsl;
  ------------------
  |  Branch (859:29): [True: 46, False: 19]
  ------------------
  860|     65|    SpvVersion spvVersion;
  861|     65|    EShLanguage stage = compiler->getLanguage();
  862|     65|    TranslateEnvironment(environment, messages, sourceGuess, stage, spvVersion);
  863|     65|#ifdef ENABLE_HLSL
  864|     65|    EShSource source = sourceGuess;
  865|     65|    if (environment != nullptr && environment->target.hlslFunctionality1)
  ------------------
  |  Branch (865:9): [True: 65, False: 0]
  |  Branch (865:35): [True: 38, False: 27]
  ------------------
  866|     38|        intermediate.setHlslFunctionality1();
  867|       |#else
  868|       |    const EShSource source = EShSourceGlsl;
  869|       |#endif
  870|       |    // First, without using the preprocessor or parser, find the #version, so we know what
  871|       |    // symbol tables, processing rules, etc. to set up.  This does not need the extra strings
  872|       |    // outlined above, just the user shader, after the system and user preambles.
  873|     65|    glslang::TInputScanner userInput(numStrings, &strings[numPre], &lengths[numPre]);
  874|     65|    int version = 0;
  875|     65|    EProfile profile = ENoProfile;
  876|     65|    bool versionNotFirstToken = false;
  877|     65|    bool versionNotFirst = (source == EShSourceHlsl)
  ------------------
  |  Branch (877:28): [True: 46, False: 19]
  ------------------
  878|     65|                                ? true
  879|     65|                                : userInput.scanVersion(version, profile, versionNotFirstToken);
  880|     65|    bool versionNotFound = version == 0;
  881|     65|    if (forceDefaultVersionAndProfile && source == EShSourceGlsl) {
  ------------------
  |  Branch (881:9): [True: 0, False: 65]
  |  Branch (881:42): [True: 0, False: 0]
  ------------------
  882|      0|        if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound &&
  ------------------
  |  Branch (882:13): [True: 0, False: 0]
  |  Branch (882:54): [True: 0, False: 0]
  ------------------
  883|      0|            (version != defaultVersion || profile != defaultProfile)) {
  ------------------
  |  Branch (883:14): [True: 0, False: 0]
  |  Branch (883:43): [True: 0, False: 0]
  ------------------
  884|      0|            compiler->infoSink.info << "Warning, (version, profile) forced to be ("
  885|      0|                                    << defaultVersion << ", " << ProfileName(defaultProfile)
  886|      0|                                    << "), while in source code it is ("
  887|      0|                                    << version << ", " << ProfileName(profile) << ")\n";
  888|      0|        }
  889|       |
  890|      0|        if (versionNotFound) {
  ------------------
  |  Branch (890:13): [True: 0, False: 0]
  ------------------
  891|      0|            versionNotFirstToken = false;
  892|      0|            versionNotFirst = false;
  893|      0|            versionNotFound = false;
  894|      0|        }
  895|      0|        version = defaultVersion;
  896|      0|        profile = defaultProfile;
  897|      0|    }
  898|     65|    if (source == EShSourceGlsl && overrideVersion != 0) {
  ------------------
  |  Branch (898:9): [True: 19, False: 46]
  |  Branch (898:36): [True: 0, False: 19]
  ------------------
  899|      0|        version = overrideVersion;
  900|      0|    }
  901|       |
  902|     65|    bool goodVersion = DeduceVersionProfile(compiler->infoSink, stage,
  903|     65|                                            versionNotFirst, defaultVersion, source, version, profile, spvVersion);
  904|     65|    bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
  ------------------
  |  Branch (904:32): [True: 59, False: 6]
  |  Branch (904:52): [True: 0, False: 6]
  |  Branch (904:77): [True: 0, False: 0]
  |  Branch (904:95): [True: 0, False: 0]
  ------------------
  905|     65|    bool warnVersionNotFirst = false;
  906|     65|    if (! versionWillBeError && versionNotFirstToken) {
  ------------------
  |  Branch (906:9): [True: 6, False: 59]
  |  Branch (906:33): [True: 0, False: 6]
  ------------------
  907|      0|        if (messages & EShMsgRelaxedErrors)
  ------------------
  |  Branch (907:13): [True: 0, False: 0]
  ------------------
  908|      0|            warnVersionNotFirst = true;
  909|      0|        else
  910|      0|            versionWillBeError = true;
  911|      0|    }
  912|       |
  913|     65|    intermediate.setSource(source);
  914|     65|    intermediate.setVersion(version);
  915|     65|    intermediate.setProfile(profile);
  916|     65|    intermediate.setSpv(spvVersion);
  917|     65|    RecordProcesses(intermediate, messages, sourceEntryPointName);
  918|     65|    if (spvVersion.vulkan > 0)
  ------------------
  |  Branch (918:9): [True: 65, False: 0]
  ------------------
  919|     65|        intermediate.setOriginUpperLeft();
  920|     65|#ifdef ENABLE_HLSL
  921|     65|    if ((messages & EShMsgHlslOffsets) || source == EShSourceHlsl)
  ------------------
  |  Branch (921:9): [True: 38, False: 27]
  |  Branch (921:43): [True: 12, False: 15]
  ------------------
  922|     50|        intermediate.setHlslOffsets();
  923|     65|#endif
  924|     65|    if (messages & EShMsgDebugInfo) {
  ------------------
  |  Branch (924:9): [True: 0, False: 65]
  ------------------
  925|      0|        intermediate.setSourceFile(names[numPre]);
  926|      0|        for (int s = 0; s < numStrings; ++s) {
  ------------------
  |  Branch (926:25): [True: 0, False: 0]
  ------------------
  927|       |            // The string may not be null-terminated, so make sure we provide
  928|       |            // the length along with the string.
  929|      0|            intermediate.addSourceText(strings[numPre + s], lengths[numPre + s]);
  930|      0|        }
  931|      0|    }
  932|     65|    if (!SetupBuiltinSymbolTable(version, profile, spvVersion, source)) {
  ------------------
  |  Branch (932:9): [True: 5, False: 60]
  ------------------
  933|      5|        return false;
  934|      5|    }
  935|       |
  936|     60|    TSymbolTable* cachedTable = SharedSymbolTables[MapVersionToIndex(version)]
  937|     60|                                                  [MapSpvVersionToIndex(spvVersion)]
  938|     60|                                                  [MapProfileToIndex(profile)]
  939|     60|                                                  [MapSourceToIndex(source)]
  940|     60|                                                  [stage];
  941|       |
  942|       |    // Dynamically allocate the symbol table so we can control when it is deallocated WRT the pool.
  943|     60|    std::unique_ptr<TSymbolTable> symbolTable(new TSymbolTable);
  944|     60|    if (cachedTable)
  ------------------
  |  Branch (944:9): [True: 60, False: 0]
  ------------------
  945|     60|        symbolTable->adoptLevels(*cachedTable);
  946|       |
  947|     60|    if (intermediate.getUniqueId() != 0)
  ------------------
  |  Branch (947:9): [True: 0, False: 60]
  ------------------
  948|      0|        symbolTable->overwriteUniqueId(intermediate.getUniqueId());
  949|       |
  950|       |    // Add built-in symbols that are potentially context dependent;
  951|       |    // they get popped again further down.
  952|     60|    if (! AddContextSpecificSymbols(resources, compiler->infoSink, *symbolTable, version, profile, spvVersion,
  ------------------
  |  Branch (952:9): [True: 0, False: 60]
  ------------------
  953|     60|                                    stage, source)) {
  954|      0|        return false;
  955|      0|    }
  956|       |
  957|     60|    if (messages & EShMsgBuiltinSymbolTable)
  ------------------
  |  Branch (957:9): [True: 0, False: 60]
  ------------------
  958|      0|        DumpBuiltinSymbolTable(compiler->infoSink, *symbolTable);
  959|       |
  960|       |    //
  961|       |    // Now we can process the full shader under proper symbols and rules.
  962|       |    //
  963|       |
  964|     60|    std::unique_ptr<TParseContextBase> parseContext(CreateParseContext(*symbolTable, intermediate, version, profile, source,
  965|     60|                                                    stage, compiler->infoSink,
  966|     60|                                                    spvVersion, forwardCompatible, messages, false, sourceEntryPointName));
  967|     60|    parseContext->compileOnly = compileOnly;
  968|     60|    TPpContext ppContext(*parseContext, names[numPre] ? names[numPre] : "", includer);
  ------------------
  |  Branch (968:41): [True: 60, False: 0]
  ------------------
  969|       |
  970|       |    // only GLSL (bison triggered, really) needs an externally set scan context
  971|     60|    glslang::TScanContext scanContext(*parseContext);
  972|     60|    if (source == EShSourceGlsl)
  ------------------
  |  Branch (972:9): [True: 14, False: 46]
  ------------------
  973|     14|        parseContext->setScanContext(&scanContext);
  974|       |
  975|     60|    parseContext->setPpContext(&ppContext);
  976|     60|    parseContext->setLimits(*resources);
  977|     60|    if (! goodVersion)
  ------------------
  |  Branch (977:9): [True: 8, False: 52]
  ------------------
  978|      8|        parseContext->addError();
  979|     60|    if (warnVersionNotFirst) {
  ------------------
  |  Branch (979:9): [True: 0, False: 60]
  ------------------
  980|      0|        TSourceLoc loc;
  981|      0|        loc.init();
  982|      0|        parseContext->warn(loc, "Illegal to have non-comment, non-whitespace tokens before #version", "#version", "");
  983|      0|    }
  984|       |
  985|     60|    parseContext->initializeExtensionBehavior();
  986|       |
  987|       |    // Fill in the strings as outlined above.
  988|     60|    std::string preamble;
  989|     60|    parseContext->getPreamble(preamble);
  990|     60|    strings[0] = preamble.c_str();
  991|     60|    lengths[0] = strlen(strings[0]);
  992|     60|    names[0] = nullptr;
  993|     60|    strings[1] = customPreamble;
  994|     60|    lengths[1] = strlen(strings[1]);
  995|     60|    names[1] = nullptr;
  996|     60|    assert(2 == numPre);
  997|     60|    if (requireNonempty) {
  ------------------
  |  Branch (997:9): [True: 60, False: 0]
  ------------------
  998|     60|        const int postIndex = numStrings + numPre;
  999|     60|        strings[postIndex] = "\n int;";
 1000|     60|        lengths[postIndex] = strlen(strings[numStrings + numPre]);
 1001|     60|        names[postIndex] = nullptr;
 1002|     60|    }
 1003|     60|    TInputScanner fullInput(numStrings + numPre + numPost, strings.get(), lengths.get(), names.get(), numPre, numPost);
 1004|       |
 1005|       |    // Push a new symbol allocation scope that will get used for the shader's globals.
 1006|     60|    symbolTable->push();
 1007|       |
 1008|     60|    bool success = processingContext(*parseContext, ppContext, fullInput,
 1009|     60|                                     versionWillBeError, *symbolTable,
 1010|     60|                                     intermediate, optLevel, messages);
 1011|     60|    intermediate.setUniqueId(symbolTable->getMaxSymbolId());
 1012|     60|    return success;
 1013|     60|}
ShaderLang.cpp:_ZN12_GLOBAL__N_120TranslateEnvironmentEPKN7glslang12TEnvironmentER11EShMessagesRNS0_9EShSourceER11EShLanguageRNS0_10SpvVersionE:
  702|    220|{
  703|       |    // Set up environmental defaults, first ignoring 'environment'.
  704|    220|    if (messages & EShMsgSpvRules)
  ------------------
  |  Branch (704:9): [True: 220, False: 0]
  ------------------
  705|    220|        spvVersion.spv = EShTargetSpv_1_0;
  706|    220|    if (messages & EShMsgVulkanRules) {
  ------------------
  |  Branch (706:9): [True: 220, False: 0]
  ------------------
  707|    220|        spvVersion.vulkan = EShTargetVulkan_1_0;
  708|    220|        spvVersion.vulkanGlsl = 100;
  709|    220|    } else if (spvVersion.spv != 0)
  ------------------
  |  Branch (709:16): [True: 0, False: 0]
  ------------------
  710|      0|        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|    220|    if (environment != nullptr) {
  ------------------
  |  Branch (715:9): [True: 220, False: 0]
  ------------------
  716|       |        // input language
  717|    220|        if (environment->input.languageFamily != EShSourceNone) {
  ------------------
  |  Branch (717:13): [True: 0, False: 220]
  ------------------
  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|    220|        switch (environment->client.client) {
  752|    220|        case EShClientVulkan:
  ------------------
  |  Branch (752:9): [True: 220, False: 0]
  ------------------
  753|    220|            spvVersion.vulkan = environment->client.version;
  754|    220|            break;
  755|      0|        default:
  ------------------
  |  Branch (755:9): [True: 0, False: 220]
  ------------------
  756|      0|            break;
  757|    220|        }
  758|       |
  759|       |        // generated code
  760|    220|        switch (environment->target.language) {
  761|     65|        case EshTargetSpv:
  ------------------
  |  Branch (761:9): [True: 65, False: 155]
  ------------------
  762|     65|            spvVersion.spv = environment->target.version;
  763|     65|            break;
  764|    155|        default:
  ------------------
  |  Branch (764:9): [True: 155, False: 65]
  ------------------
  765|    155|            break;
  766|    220|        }
  767|    220|    }
  768|    220|}
ShaderLang.cpp:_ZN12_GLOBAL__N_120DeduceVersionProfileER9TInfoSink11EShLanguagebiN7glslang9EShSourceERiR8EProfileRKNS3_10SpvVersionE:
  512|    220|{
  513|    220|    const int FirstProfileVersion = 150;
  514|    220|    bool correct = true;
  515|       |
  516|    220|    if (source == EShSourceHlsl) {
  ------------------
  |  Branch (516:9): [True: 115, False: 105]
  ------------------
  517|    115|        version = 500;          // shader model; currently a characteristic of glslang, not the input
  518|    115|        profile = ECoreProfile; // allow doubles in prototype parsing
  519|    115|        return correct;
  520|    115|    }
  521|       |
  522|       |    // Get a version...
  523|    105|    if (version == 0) {
  ------------------
  |  Branch (523:9): [True: 94, False: 11]
  ------------------
  524|     94|        version = defaultVersion;
  525|       |        // infoSink.info.message(EPrefixWarning, "#version: statement missing; use #version on first line of shader");
  526|     94|    }
  527|       |
  528|       |    // Get a good profile...
  529|    105|    if (profile == ENoProfile) {
  ------------------
  |  Branch (529:9): [True: 97, False: 8]
  ------------------
  530|     97|        if (version == 300 || version == 310 || version == 320) {
  ------------------
  |  Branch (530:13): [True: 0, False: 97]
  |  Branch (530:31): [True: 0, False: 97]
  |  Branch (530:49): [True: 0, False: 97]
  ------------------
  531|      0|            correct = false;
  532|      0|            infoSink.info.message(EPrefixError, "#version: versions 300, 310, and 320 require specifying the 'es' profile");
  533|      0|            profile = EEsProfile;
  534|     97|        } else if (version == 100)
  ------------------
  |  Branch (534:20): [True: 0, False: 97]
  ------------------
  535|      0|            profile = EEsProfile;
  536|     97|        else if (version >= FirstProfileVersion)
  ------------------
  |  Branch (536:18): [True: 3, False: 94]
  ------------------
  537|      3|            profile = ECoreProfile;
  538|     94|        else
  539|     94|            profile = ENoProfile;
  540|     97|    } else {
  541|       |        // a profile was provided...
  542|      8|        if (version < 150) {
  ------------------
  |  Branch (542:13): [True: 0, False: 8]
  ------------------
  543|      0|            correct = false;
  544|      0|            infoSink.info.message(EPrefixError, "#version: versions before 150 do not allow a profile token");
  545|      0|            if (version == 100)
  ------------------
  |  Branch (545:17): [True: 0, False: 0]
  ------------------
  546|      0|                profile = EEsProfile;
  547|      0|            else
  548|      0|                profile = ENoProfile;
  549|      8|        } else if (version == 300 || version == 310 || version == 320) {
  ------------------
  |  Branch (549:20): [True: 0, False: 8]
  |  Branch (549:38): [True: 0, False: 8]
  |  Branch (549:56): [True: 0, False: 8]
  ------------------
  550|      0|            if (profile != EEsProfile) {
  ------------------
  |  Branch (550:17): [True: 0, False: 0]
  ------------------
  551|      0|                correct = false;
  552|      0|                infoSink.info.message(EPrefixError, "#version: versions 300, 310, and 320 support only the es profile");
  553|      0|            }
  554|      0|            profile = EEsProfile;
  555|      8|        } else {
  556|      8|            if (profile == EEsProfile) {
  ------------------
  |  Branch (556:17): [True: 0, False: 8]
  ------------------
  557|      0|                correct = false;
  558|      0|                infoSink.info.message(EPrefixError, "#version: only version 300, 310, and 320 support the es profile");
  559|      0|                if (version >= FirstProfileVersion)
  ------------------
  |  Branch (559:21): [True: 0, False: 0]
  ------------------
  560|      0|                    profile = ECoreProfile;
  561|      0|                else
  562|      0|                    profile = ENoProfile;
  563|      0|            }
  564|       |            // else: typical desktop case... e.g., "#version 410 core"
  565|      8|        }
  566|      8|    }
  567|       |
  568|       |    // Fix version...
  569|    105|    switch (version) {
  570|       |    // ES versions
  571|      0|    case 100: break;
  ------------------
  |  Branch (571:5): [True: 0, False: 105]
  ------------------
  572|      0|    case 300: break;
  ------------------
  |  Branch (572:5): [True: 0, False: 105]
  ------------------
  573|      0|    case 310: break;
  ------------------
  |  Branch (573:5): [True: 0, False: 105]
  ------------------
  574|      0|    case 320: break;
  ------------------
  |  Branch (574:5): [True: 0, False: 105]
  ------------------
  575|       |
  576|       |    // desktop versions
  577|     94|    case 110: break;
  ------------------
  |  Branch (577:5): [True: 94, False: 11]
  ------------------
  578|      0|    case 120: break;
  ------------------
  |  Branch (578:5): [True: 0, False: 105]
  ------------------
  579|      0|    case 130: break;
  ------------------
  |  Branch (579:5): [True: 0, False: 105]
  ------------------
  580|      0|    case 140: break;
  ------------------
  |  Branch (580:5): [True: 0, False: 105]
  ------------------
  581|      0|    case 150: break;
  ------------------
  |  Branch (581:5): [True: 0, False: 105]
  ------------------
  582|      0|    case 330: break;
  ------------------
  |  Branch (582:5): [True: 0, False: 105]
  ------------------
  583|      0|    case 400: break;
  ------------------
  |  Branch (583:5): [True: 0, False: 105]
  ------------------
  584|      0|    case 410: break;
  ------------------
  |  Branch (584:5): [True: 0, False: 105]
  ------------------
  585|      0|    case 420: break;
  ------------------
  |  Branch (585:5): [True: 0, False: 105]
  ------------------
  586|      0|    case 430: break;
  ------------------
  |  Branch (586:5): [True: 0, False: 105]
  ------------------
  587|      0|    case 440: break;
  ------------------
  |  Branch (587:5): [True: 0, False: 105]
  ------------------
  588|     11|    case 450: break;
  ------------------
  |  Branch (588:5): [True: 11, False: 94]
  ------------------
  589|      0|    case 460: break;
  ------------------
  |  Branch (589:5): [True: 0, False: 105]
  ------------------
  590|       |
  591|       |    // unknown version
  592|      0|    default:
  ------------------
  |  Branch (592:5): [True: 0, False: 105]
  ------------------
  593|      0|        correct = false;
  594|      0|        infoSink.info.message(EPrefixError, "version not supported");
  595|      0|        if (profile == EEsProfile)
  ------------------
  |  Branch (595:13): [True: 0, False: 0]
  ------------------
  596|      0|            version = 310;
  597|      0|        else {
  598|      0|            version = 450;
  599|      0|            profile = ECoreProfile;
  600|      0|        }
  601|      0|        break;
  602|    105|    }
  603|       |
  604|       |    // Correct for stage type...
  605|    105|    switch (stage) {
  606|      1|    case EShLangGeometry:
  ------------------
  |  Branch (606:5): [True: 1, False: 104]
  ------------------
  607|      1|        if ((profile == EEsProfile && version < 310) ||
  ------------------
  |  Branch (607:14): [True: 0, False: 1]
  |  Branch (607:39): [True: 0, False: 0]
  ------------------
  608|      1|            (profile != EEsProfile && version < 150)) {
  ------------------
  |  Branch (608:14): [True: 1, False: 0]
  |  Branch (608:39): [True: 1, False: 0]
  ------------------
  609|      1|            correct = false;
  610|      1|            infoSink.info.message(EPrefixError, "#version: geometry shaders require es profile with version 310 or non-es profile with version 150 or above");
  611|      1|            version = (profile == EEsProfile) ? 310 : 150;
  ------------------
  |  Branch (611:23): [True: 0, False: 1]
  ------------------
  612|      1|            if (profile == EEsProfile || profile == ENoProfile)
  ------------------
  |  Branch (612:17): [True: 0, False: 1]
  |  Branch (612:42): [True: 1, False: 0]
  ------------------
  613|      1|                profile = ECoreProfile;
  614|      1|        }
  615|      1|        break;
  616|      7|    case EShLangTessControl:
  ------------------
  |  Branch (616:5): [True: 7, False: 98]
  ------------------
  617|      8|    case EShLangTessEvaluation:
  ------------------
  |  Branch (617:5): [True: 1, False: 104]
  ------------------
  618|      8|        if ((profile == EEsProfile && version < 310) ||
  ------------------
  |  Branch (618:14): [True: 0, False: 8]
  |  Branch (618:39): [True: 0, False: 0]
  ------------------
  619|      8|            (profile != EEsProfile && version < 150)) {
  ------------------
  |  Branch (619:14): [True: 8, False: 0]
  |  Branch (619:39): [True: 2, False: 6]
  ------------------
  620|      2|            correct = false;
  621|      2|            infoSink.info.message(EPrefixError, "#version: tessellation shaders require es profile with version 310 or non-es profile with version 150 or above");
  622|      2|            version = (profile == EEsProfile) ? 310 : 400; // 150 supports the extension, correction is to 400 which does not
  ------------------
  |  Branch (622:23): [True: 0, False: 2]
  ------------------
  623|      2|            if (profile == EEsProfile || profile == ENoProfile)
  ------------------
  |  Branch (623:17): [True: 0, False: 2]
  |  Branch (623:42): [True: 2, False: 0]
  ------------------
  624|      2|                profile = ECoreProfile;
  625|      2|        }
  626|      8|        break;
  627|      0|    case EShLangCompute:
  ------------------
  |  Branch (627:5): [True: 0, False: 105]
  ------------------
  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: 105]
  ------------------
  636|      0|    case EShLangIntersect:
  ------------------
  |  Branch (636:5): [True: 0, False: 105]
  ------------------
  637|      0|    case EShLangAnyHit:
  ------------------
  |  Branch (637:5): [True: 0, False: 105]
  ------------------
  638|      0|    case EShLangClosestHit:
  ------------------
  |  Branch (638:5): [True: 0, False: 105]
  ------------------
  639|      0|    case EShLangMiss:
  ------------------
  |  Branch (639:5): [True: 0, False: 105]
  ------------------
  640|      0|    case EShLangCallable:
  ------------------
  |  Branch (640:5): [True: 0, False: 105]
  ------------------
  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|      5|    case EShLangMesh:
  ------------------
  |  Branch (647:5): [True: 5, False: 100]
  ------------------
  648|      5|    case EShLangTask:
  ------------------
  |  Branch (648:5): [True: 0, False: 105]
  ------------------
  649|      5|        if ((profile == EEsProfile && version < 320) ||
  ------------------
  |  Branch (649:14): [True: 0, False: 5]
  |  Branch (649:39): [True: 0, False: 0]
  ------------------
  650|      5|            (profile != EEsProfile && version < 450)) {
  ------------------
  |  Branch (650:14): [True: 5, False: 0]
  |  Branch (650:39): [True: 5, False: 0]
  ------------------
  651|      5|            correct = false;
  652|      5|            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|      5|            version = profile == EEsProfile ? 320 : 450;
  ------------------
  |  Branch (653:23): [True: 0, False: 5]
  ------------------
  654|      5|        }
  655|      5|        break;
  656|     91|    default:
  ------------------
  |  Branch (656:5): [True: 91, False: 14]
  ------------------
  657|     91|        break;
  658|    105|    }
  659|       |
  660|    105|    if (profile == EEsProfile && version >= 300 && versionNotFirst) {
  ------------------
  |  Branch (660:9): [True: 0, False: 105]
  |  Branch (660:34): [True: 0, False: 0]
  |  Branch (660:52): [True: 0, False: 0]
  ------------------
  661|      0|        correct = false;
  662|      0|        infoSink.info.message(EPrefixError, "#version: statement must appear first in es-profile shader; before comments or newlines");
  663|      0|    }
  664|       |
  665|       |    // Check for SPIR-V compatibility
  666|    105|    if (spvVersion.spv != 0) {
  ------------------
  |  Branch (666:9): [True: 105, False: 0]
  ------------------
  667|    105|        switch (profile) {
  668|      0|        case EEsProfile:
  ------------------
  |  Branch (668:9): [True: 0, False: 105]
  ------------------
  669|      0|            if (version < 310) {
  ------------------
  |  Branch (669:17): [True: 0, False: 0]
  ------------------
  670|      0|                correct = false;
  671|      0|                infoSink.info.message(EPrefixError, "#version: ES shaders for SPIR-V require version 310 or higher");
  672|      0|                version = 310;
  673|      0|            }
  674|      0|            break;
  675|      0|        case ECompatibilityProfile:
  ------------------
  |  Branch (675:9): [True: 0, False: 105]
  ------------------
  676|      0|            infoSink.info.message(EPrefixError, "#version: compilation for SPIR-V does not support the compatibility profile");
  677|      0|            break;
  678|    105|        default:
  ------------------
  |  Branch (678:9): [True: 105, False: 0]
  ------------------
  679|    105|            if (spvVersion.vulkan > 0 && version < 140) {
  ------------------
  |  Branch (679:17): [True: 105, False: 0]
  |  Branch (679:42): [True: 86, False: 19]
  ------------------
  680|     86|                correct = false;
  681|     86|                infoSink.info.message(EPrefixError, "#version: Desktop shaders for Vulkan SPIR-V require version 140 or higher");
  682|     86|                version = 140;
  683|     86|            }
  684|    105|            if (spvVersion.openGl >= 100 && version < 330) {
  ------------------
  |  Branch (684:17): [True: 0, False: 105]
  |  Branch (684:45): [True: 0, False: 0]
  ------------------
  685|      0|                correct = false;
  686|      0|                infoSink.info.message(EPrefixError, "#version: Desktop shaders for OpenGL SPIR-V require version 330 or higher");
  687|      0|                version = 330;
  688|      0|            }
  689|    105|            break;
  690|    105|        }
  691|    105|    }
  692|       |
  693|    105|    return correct;
  694|    105|}
ShaderLang.cpp:_ZN12_GLOBAL__N_115RecordProcessesERN7glslang13TIntermediateE11EShMessagesRKNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
  773|    220|{
  774|    220|    if ((messages & EShMsgRelaxedErrors) != 0)
  ------------------
  |  Branch (774:9): [True: 0, False: 220]
  ------------------
  775|      0|        intermediate.addProcess("relaxed-errors");
  776|    220|    if ((messages & EShMsgSuppressWarnings) != 0)
  ------------------
  |  Branch (776:9): [True: 0, False: 220]
  ------------------
  777|      0|        intermediate.addProcess("suppress-warnings");
  778|    220|    if ((messages & EShMsgKeepUncalled) != 0)
  ------------------
  |  Branch (778:9): [True: 0, False: 220]
  ------------------
  779|      0|        intermediate.addProcess("keep-uncalled");
  780|    220|    if (sourceEntryPointName.size() > 0) {
  ------------------
  |  Branch (780:9): [True: 0, False: 220]
  ------------------
  781|      0|        intermediate.addProcess("source-entrypoint");
  782|      0|        intermediate.addProcessArgument(sourceEntryPointName);
  783|      0|    }
  784|    220|}
ShaderLang.cpp:_ZN12_GLOBAL__N_123SetupBuiltinSymbolTableEi8EProfileRKN7glslang10SpvVersionENS1_9EShSourceE:
  427|    220|{
  428|    220|    TInfoSink infoSink;
  429|    220|    bool success;
  430|       |
  431|       |    // Make sure only one thread tries to do this at a time
  432|    220|#ifndef DISABLE_THREAD_SUPPORT
  433|    220|    const std::lock_guard<std::mutex> lock(init_lock);
  434|    220|#endif
  435|       |
  436|       |    // See if it's already been done for this version/profile combination
  437|    220|    int versionIndex = MapVersionToIndex(version);
  438|    220|    int spvVersionIndex = MapSpvVersionToIndex(spvVersion);
  439|    220|    int profileIndex = MapProfileToIndex(profile);
  440|    220|    int sourceIndex = MapSourceToIndex(source);
  441|    220|    if (CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][EPcGeneral]) {
  ------------------
  |  Branch (441:9): [True: 72, False: 148]
  ------------------
  442|     72|        return true;
  443|     72|    }
  444|       |
  445|       |    // Switch to a new pool
  446|    148|    TPoolAllocator& previousAllocator = GetThreadPoolAllocator();
  447|    148|    TPoolAllocator* builtInPoolAllocator = new TPoolAllocator;
  448|    148|    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|    148|    TSymbolTable* commonTable[EPcCount];
  452|    148|    TSymbolTable* stageTables[EShLangCount];
  453|    444|    for (int precClass = 0; precClass < EPcCount; ++precClass)
  ------------------
  |  Branch (453:29): [True: 296, False: 148]
  ------------------
  454|    296|        commonTable[precClass] = new TSymbolTable;
  455|  2.22k|    for (int stage = 0; stage < EShLangCount; ++stage)
  ------------------
  |  Branch (455:25): [True: 2.07k, False: 148]
  ------------------
  456|  2.07k|        stageTables[stage] = new TSymbolTable;
  457|       |
  458|       |    // Generate the local symbol tables using the new pool
  459|    148|    if (!InitializeSymbolTables(infoSink, commonTable, stageTables, version, profile, spvVersion, source)) {
  ------------------
  |  Branch (459:9): [True: 5, False: 143]
  ------------------
  460|      5|        success = false;
  461|      5|        goto cleanup;
  462|      5|    }
  463|       |
  464|       |    // Switch to the process-global pool
  465|    143|    SetThreadPoolAllocator(PerProcessGPA);
  466|       |
  467|       |    // Copy the local symbol tables from the new pool to the global tables using the process-global pool
  468|    429|    for (int precClass = 0; precClass < EPcCount; ++precClass) {
  ------------------
  |  Branch (468:29): [True: 286, False: 143]
  ------------------
  469|    286|        if (! commonTable[precClass]->isEmpty()) {
  ------------------
  |  Branch (469:13): [True: 143, False: 143]
  ------------------
  470|    143|            CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][precClass] = new TSymbolTable;
  471|    143|            CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][precClass]->copyTable(*commonTable[precClass]);
  472|    143|            CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][precClass]->readOnly();
  473|    143|        }
  474|    286|    }
  475|  2.14k|    for (int stage = 0; stage < EShLangCount; ++stage) {
  ------------------
  |  Branch (475:25): [True: 2.00k, False: 143]
  ------------------
  476|  2.00k|        if (! stageTables[stage]->isEmpty()) {
  ------------------
  |  Branch (476:13): [True: 943, False: 1.05k]
  ------------------
  477|    943|            SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage] = new TSymbolTable;
  478|    943|            SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage]->adoptLevels(*CommonSymbolTable
  479|    943|                              [versionIndex][spvVersionIndex][profileIndex][sourceIndex][CommonIndex(profile, (EShLanguage)stage)]);
  480|    943|            SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage]->copyTable(*stageTables[stage]);
  481|    943|            SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage]->readOnly();
  482|    943|        }
  483|  2.00k|    }
  484|    143|    success = true;
  485|       |
  486|    148|cleanup:
  487|       |    // Clean up the local tables before deleting the pool they used.
  488|    444|    for (int precClass = 0; precClass < EPcCount; ++precClass)
  ------------------
  |  Branch (488:29): [True: 296, False: 148]
  ------------------
  489|    296|        delete commonTable[precClass];
  490|  2.22k|    for (int stage = 0; stage < EShLangCount; ++stage)
  ------------------
  |  Branch (490:25): [True: 2.07k, False: 148]
  ------------------
  491|  2.07k|        delete stageTables[stage];
  492|       |
  493|    148|    delete builtInPoolAllocator;
  494|    148|    SetThreadPoolAllocator(&previousAllocator);
  495|       |
  496|    148|    return success;
  497|    143|}
ShaderLang.cpp:_ZN12_GLOBAL__N_122InitializeSymbolTablesER9TInfoSinkPPN7glslang12TSymbolTableES5_i8EProfileRKNS2_10SpvVersionENS2_9EShSourceE:
  322|    148|{
  323|    148|    bool success = true;
  324|    148|    std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
  325|       |
  326|    148|    if (builtInParseables == nullptr)
  ------------------
  |  Branch (326:9): [True: 0, False: 148]
  ------------------
  327|      0|        return false;
  328|       |
  329|    148|    builtInParseables->initialize(version, profile, spvVersion);
  330|       |
  331|       |    // do the common tables
  332|    148|    success &= InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangVertex, source,
  333|    148|                          infoSink, *commonTable[EPcGeneral]);
  334|    148|    if (profile == EEsProfile)
  ------------------
  |  Branch (334:9): [True: 0, False: 148]
  ------------------
  335|      0|        success &= InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangFragment, source,
  336|      0|                              infoSink, *commonTable[EPcFragment]);
  337|       |
  338|       |    // do the per-stage tables
  339|       |
  340|       |    // always have vertex and fragment
  341|    148|    success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangVertex, source,
  342|    148|                               infoSink, commonTable, symbolTables);
  343|    148|    success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, source,
  344|    148|                               infoSink, commonTable, symbolTables);
  345|       |
  346|       |    // check for tessellation
  347|    148|    if ((profile != EEsProfile && version >= 150) ||
  ------------------
  |  Branch (347:10): [True: 148, False: 0]
  |  Branch (347:35): [True: 62, False: 86]
  ------------------
  348|     86|        (profile == EEsProfile && version >= 310)) {
  ------------------
  |  Branch (348:10): [True: 0, False: 86]
  |  Branch (348:35): [True: 0, False: 0]
  ------------------
  349|     62|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessControl, source,
  350|     62|                                   infoSink, commonTable, symbolTables);
  351|     62|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessEvaluation, source,
  352|     62|                                   infoSink, commonTable, symbolTables);
  353|     62|    }
  354|       |
  355|       |    // check for geometry
  356|    148|    if ((profile != EEsProfile && version >= 150) ||
  ------------------
  |  Branch (356:10): [True: 148, False: 0]
  |  Branch (356:35): [True: 62, False: 86]
  ------------------
  357|     86|        (profile == EEsProfile && version >= 310))
  ------------------
  |  Branch (357:10): [True: 0, False: 86]
  |  Branch (357:35): [True: 0, False: 0]
  ------------------
  358|     62|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source,
  359|     62|                                   infoSink, commonTable, symbolTables);
  360|       |
  361|       |    // check for compute
  362|    148|    if ((profile != EEsProfile && version >= 420) ||
  ------------------
  |  Branch (362:10): [True: 148, False: 0]
  |  Branch (362:35): [True: 59, False: 89]
  ------------------
  363|     89|        (profile == EEsProfile && version >= 310))
  ------------------
  |  Branch (363:10): [True: 0, False: 89]
  |  Branch (363:35): [True: 0, False: 0]
  ------------------
  364|     59|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
  365|     59|                                   infoSink, commonTable, symbolTables);
  366|       |
  367|       |    // check for ray tracing stages
  368|    148|    if (profile != EEsProfile && version >= 450) {
  ------------------
  |  Branch (368:9): [True: 148, False: 0]
  |  Branch (368:34): [True: 59, False: 89]
  ------------------
  369|     59|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGen, source,
  370|     59|            infoSink, commonTable, symbolTables);
  371|     59|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangIntersect, source,
  372|     59|            infoSink, commonTable, symbolTables);
  373|     59|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangAnyHit, source,
  374|     59|            infoSink, commonTable, symbolTables);
  375|     59|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangClosestHit, source,
  376|     59|            infoSink, commonTable, symbolTables);
  377|     59|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMiss, source,
  378|     59|            infoSink, commonTable, symbolTables);
  379|     59|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCallable, source,
  380|     59|            infoSink, commonTable, symbolTables);
  381|     59|    }
  382|       |
  383|       |    // check for mesh
  384|    148|    if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (384:10): [True: 148, False: 0]
  |  Branch (384:35): [True: 59, False: 89]
  ------------------
  385|     89|        (profile == EEsProfile && version >= 320))
  ------------------
  |  Branch (385:10): [True: 0, False: 89]
  |  Branch (385:35): [True: 0, False: 0]
  ------------------
  386|     59|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMesh, source,
  387|     59|                                   infoSink, commonTable, symbolTables);
  388|       |
  389|       |    // check for task
  390|    148|    if ((profile != EEsProfile && version >= 450) ||
  ------------------
  |  Branch (390:10): [True: 148, False: 0]
  |  Branch (390:35): [True: 59, False: 89]
  ------------------
  391|     89|        (profile == EEsProfile && version >= 320))
  ------------------
  |  Branch (391:10): [True: 0, False: 89]
  |  Branch (391:35): [True: 0, False: 0]
  ------------------
  392|     59|        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTask, source,
  393|     59|                                   infoSink, commonTable, symbolTables);
  394|       |
  395|    148|    return success;
  396|    148|}
ShaderLang.cpp:_ZN12_GLOBAL__N_123CreateBuiltInParseablesER9TInfoSinkN7glslang9EShSourceE:
   94|    363|{
   95|    363|    switch (source) {
   96|    199|    case EShSourceGlsl: return new TBuiltIns();              // GLSL builtIns
  ------------------
  |  Branch (96:5): [True: 199, False: 164]
  ------------------
   97|      0|#ifdef ENABLE_HLSL
   98|    164|    case EShSourceHlsl: return new TBuiltInParseablesHlsl(); // HLSL intrinsics
  ------------------
  |  Branch (98:5): [True: 164, False: 199]
  ------------------
   99|      0|#endif
  100|       |
  101|      0|    default:
  ------------------
  |  Branch (101:5): [True: 0, False: 363]
  ------------------
  102|      0|        infoSink.info.message(EPrefixInternalError, "Unable to determine source language");
  103|      0|        return nullptr;
  104|    363|    }
  105|    363|}
ShaderLang.cpp:_ZN12_GLOBAL__N_121InitializeSymbolTableERKNSt3__112basic_stringIcNS0_11char_traitsIcEEN7glslang14pool_allocatorIcEEEEi8EProfileRKNS4_10SpvVersionE11EShLanguageNS4_9EShSourceER9TInfoSinkRNS4_12TSymbolTableE:
  249|  1.37k|{
  250|  1.37k|    TIntermediate intermediate(language, version, profile);
  251|       |
  252|  1.37k|    intermediate.setSource(source);
  253|       |
  254|  1.37k|    std::unique_ptr<TParseContextBase> parseContext(CreateParseContext(symbolTable, intermediate, version, profile, source,
  255|  1.37k|                                                                       language, infoSink, spvVersion, true, EShMsgDefault,
  256|  1.37k|                                                                       true));
  257|       |
  258|  1.37k|    TShader::ForbidIncluder includer;
  259|  1.37k|    TPpContext ppContext(*parseContext, "", includer);
  260|  1.37k|    TScanContext scanContext(*parseContext);
  261|  1.37k|    parseContext->setScanContext(&scanContext);
  262|  1.37k|    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|  1.37k|    symbolTable.push();
  271|       |
  272|  1.37k|    const char* builtInShaders[2];
  273|  1.37k|    size_t builtInLengths[2];
  274|  1.37k|    builtInShaders[0] = builtIns.c_str();
  275|  1.37k|    builtInLengths[0] = builtIns.size();
  276|       |
  277|  1.37k|    if (builtInLengths[0] == 0)
  ------------------
  |  Branch (277:9): [True: 801, False: 575]
  ------------------
  278|    801|        return true;
  279|       |
  280|    575|    TInputScanner input(1, builtInShaders, builtInLengths);
  281|    575|    if (! parseContext->parseShaderStrings(ppContext, input) != 0) {
  ------------------
  |  Branch (281:9): [True: 10, False: 565]
  ------------------
  282|     10|        infoSink.info.message(EPrefixInternalError, "Unable to parse built-ins");
  283|     10|        printf("Unable to parse built-ins\n%s\n", infoSink.info.c_str());
  284|     10|        printf("%s\n", builtInShaders[0]);
  285|       |
  286|     10|        return false;
  287|     10|    }
  288|       |
  289|    565|    return true;
  290|    575|}
ShaderLang.cpp:_ZN12_GLOBAL__N_126InitializeStageSymbolTableERN7glslang18TBuiltInParseablesEi8EProfileRKNS0_10SpvVersionE11EShLanguageNS0_9EShSourceER9TInfoSinkPPNS0_12TSymbolTableESD_:
  303|  1.01k|{
  304|  1.01k|    (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
  305|  1.01k|    if (!InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, source,
  ------------------
  |  Branch (305:9): [True: 5, False: 1.00k]
  ------------------
  306|  1.01k|                          infoSink, *symbolTables[language]))
  307|      5|        return false;
  308|  1.00k|    builtInParseables.identifyBuiltIns(version, profile, spvVersion, language, *symbolTables[language]);
  309|  1.00k|    if (profile == EEsProfile && version >= 300)
  ------------------
  |  Branch (309:9): [True: 0, False: 1.00k]
  |  Branch (309:34): [True: 0, False: 0]
  ------------------
  310|      0|        (*symbolTables[language]).setNoBuiltInRedeclarations();
  311|  1.00k|    if (version == 110)
  ------------------
  |  Branch (311:9): [True: 0, False: 1.00k]
  ------------------
  312|      0|        (*symbolTables[language]).setSeparateNameSpaces();
  313|       |
  314|  1.00k|    return true;
  315|  1.01k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_111CommonIndexE8EProfile11EShLanguage:
  293|  1.95k|{
  294|  1.95k|    return (profile == EEsProfile && language == EShLangFragment) ? EPcFragment : EPcGeneral;
  ------------------
  |  Branch (294:13): [True: 0, False: 1.95k]
  |  Branch (294:38): [True: 0, False: 0]
  ------------------
  295|  1.95k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_117MapVersionToIndexEi:
  138|    435|{
  139|    435|    int index = 0;
  140|       |
  141|    435|    switch (version) {
  142|      0|    case 100: index =  0; break;
  ------------------
  |  Branch (142:5): [True: 0, False: 435]
  ------------------
  143|      0|    case 110: index =  1; break;
  ------------------
  |  Branch (143:5): [True: 0, False: 435]
  ------------------
  144|      0|    case 120: index =  2; break;
  ------------------
  |  Branch (144:5): [True: 0, False: 435]
  ------------------
  145|      0|    case 130: index =  3; break;
  ------------------
  |  Branch (145:5): [True: 0, False: 435]
  ------------------
  146|    172|    case 140: index =  4; break;
  ------------------
  |  Branch (146:5): [True: 172, False: 263]
  ------------------
  147|      2|    case 150: index =  5; break;
  ------------------
  |  Branch (147:5): [True: 2, False: 433]
  ------------------
  148|      0|    case 300: index =  6; break;
  ------------------
  |  Branch (148:5): [True: 0, False: 435]
  ------------------
  149|      0|    case 330: index =  7; break;
  ------------------
  |  Branch (149:5): [True: 0, False: 435]
  ------------------
  150|      4|    case 400: index =  8; break;
  ------------------
  |  Branch (150:5): [True: 4, False: 431]
  ------------------
  151|      0|    case 410: index =  9; break;
  ------------------
  |  Branch (151:5): [True: 0, False: 435]
  ------------------
  152|      0|    case 420: index = 10; break;
  ------------------
  |  Branch (152:5): [True: 0, False: 435]
  ------------------
  153|      0|    case 430: index = 11; break;
  ------------------
  |  Branch (153:5): [True: 0, False: 435]
  ------------------
  154|      0|    case 440: index = 12; break;
  ------------------
  |  Branch (154:5): [True: 0, False: 435]
  ------------------
  155|      0|    case 310: index = 13; break;
  ------------------
  |  Branch (155:5): [True: 0, False: 435]
  ------------------
  156|     27|    case 450: index = 14; break;
  ------------------
  |  Branch (156:5): [True: 27, False: 408]
  ------------------
  157|    230|    case 500: index =  0; break; // HLSL
  ------------------
  |  Branch (157:5): [True: 230, False: 205]
  ------------------
  158|      0|    case 320: index = 15; break;
  ------------------
  |  Branch (158:5): [True: 0, False: 435]
  ------------------
  159|      0|    case 460: index = 16; break;
  ------------------
  |  Branch (159:5): [True: 0, False: 435]
  ------------------
  160|      0|    default:  assert(0);  break;
  ------------------
  |  Branch (160:5): [True: 0, False: 435]
  ------------------
  161|    435|    }
  162|       |
  163|    435|    assert(index < VersionCount);
  164|       |
  165|    435|    return index;
  166|    435|}
ShaderLang.cpp:_ZN12_GLOBAL__N_120MapSpvVersionToIndexERKN7glslang10SpvVersionE:
  171|    435|{
  172|    435|    int index = 0;
  173|       |
  174|    435|    if (spvVersion.openGl > 0)
  ------------------
  |  Branch (174:9): [True: 0, False: 435]
  ------------------
  175|      0|        index = 1;
  176|    435|    else if (spvVersion.vulkan > 0) {
  ------------------
  |  Branch (176:14): [True: 435, False: 0]
  ------------------
  177|    435|        if (!spvVersion.vulkanRelaxed)
  ------------------
  |  Branch (177:13): [True: 435, False: 0]
  ------------------
  178|    435|            index = 2;
  179|      0|        else
  180|      0|            index = 3;
  181|    435|    }
  182|       |
  183|    435|    assert(index < SpvVersionCount);
  184|       |
  185|    435|    return index;
  186|    435|}
ShaderLang.cpp:_ZN12_GLOBAL__N_117MapProfileToIndexE8EProfile:
  191|    435|{
  192|    435|    int index = 0;
  193|       |
  194|    435|    switch (profile) {
  195|    177|    case ENoProfile:            index = 0; break;
  ------------------
  |  Branch (195:5): [True: 177, False: 258]
  ------------------
  196|    258|    case ECoreProfile:          index = 1; break;
  ------------------
  |  Branch (196:5): [True: 258, False: 177]
  ------------------
  197|      0|    case ECompatibilityProfile: index = 2; break;
  ------------------
  |  Branch (197:5): [True: 0, False: 435]
  ------------------
  198|      0|    case EEsProfile:            index = 3; break;
  ------------------
  |  Branch (198:5): [True: 0, False: 435]
  ------------------
  199|      0|    default:                               break;
  ------------------
  |  Branch (199:5): [True: 0, False: 435]
  ------------------
  200|    435|    }
  201|       |
  202|    435|    assert(index < ProfileCount);
  203|       |
  204|    435|    return index;
  205|    435|}
ShaderLang.cpp:_ZN12_GLOBAL__N_116MapSourceToIndexEN7glslang9EShSourceE:
  210|    435|{
  211|    435|    int index = 0;
  212|       |
  213|    435|    switch (source) {
  214|    205|    case EShSourceGlsl: index = 0; break;
  ------------------
  |  Branch (214:5): [True: 205, False: 230]
  ------------------
  215|    230|    case EShSourceHlsl: index = 1; break;
  ------------------
  |  Branch (215:5): [True: 230, False: 205]
  ------------------
  216|      0|    default:                       break;
  ------------------
  |  Branch (216:5): [True: 0, False: 435]
  ------------------
  217|    435|    }
  218|       |
  219|    435|    assert(index < SourceCount);
  220|       |
  221|    435|    return index;
  222|    435|}
ShaderLang.cpp:_ZN12_GLOBAL__N_125AddContextSpecificSymbolsEPK16TBuiltInResourceR9TInfoSinkRN7glslang12TSymbolTableEi8EProfileRKNS5_10SpvVersionE11EShLanguageNS5_9EShSourceE:
  400|    215|{
  401|    215|    std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
  402|       |
  403|    215|    if (builtInParseables == nullptr)
  ------------------
  |  Branch (403:9): [True: 0, False: 215]
  ------------------
  404|      0|        return false;
  405|       |
  406|    215|    builtInParseables->initialize(*resources, version, profile, spvVersion, language);
  407|    215|    if (!InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, language, source, infoSink, symbolTable))
  ------------------
  |  Branch (407:9): [True: 0, False: 215]
  ------------------
  408|      0|        return false;
  409|    215|    builtInParseables->identifyBuiltIns(version, profile, spvVersion, language, symbolTable, *resources);
  410|       |
  411|    215|    return true;
  412|    215|}
ShaderLang.cpp:_ZN12_GLOBAL__N_118CreateParseContextERN7glslang12TSymbolTableERNS0_13TIntermediateEi8EProfileNS0_9EShSourceE11EShLanguageR9TInfoSinkNS0_10SpvVersionEb11EShMessagesbNSt3__112basic_stringIcNSC_11char_traitsIcEENSC_9allocatorIcEEEE:
  113|  1.59k|{
  114|  1.59k|    switch (source) {
  115|    626|    case EShSourceGlsl: {
  ------------------
  |  Branch (115:5): [True: 626, False: 965]
  ------------------
  116|    626|        if (sourceEntryPointName.size() == 0)
  ------------------
  |  Branch (116:13): [True: 626, False: 0]
  ------------------
  117|    626|            intermediate.setEntryPointName("main");
  118|    626|        TString entryPoint = sourceEntryPointName.c_str();
  119|    626|        return new TParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
  120|    626|                                 language, infoSink, forwardCompatible, messages, &entryPoint);
  121|      0|    }
  122|      0|#ifdef ENABLE_HLSL
  123|    965|    case EShSourceHlsl:
  ------------------
  |  Branch (123:5): [True: 965, False: 626]
  ------------------
  124|    965|        return new HlslParseContext(symbolTable, intermediate, parsingBuiltIns, version, profile, spvVersion,
  125|    965|                                    language, infoSink, sourceEntryPointName.c_str(), forwardCompatible, messages);
  126|      0|#endif
  127|      0|    default:
  ------------------
  |  Branch (127:5): [True: 0, False: 1.59k]
  ------------------
  128|      0|        infoSink.info.message(EPrefixInternalError, "Unable to determine source language");
  129|      0|        return nullptr;
  130|  1.59k|    }
  131|  1.59k|}
ShaderLang.cpp:_ZN12_GLOBAL__N_111DoFullParseclERN7glslang17TParseContextBaseERNS1_10TPpContextERNS1_13TInputScannerEbRNS1_12TSymbolTableERNS1_13TIntermediateE20EShOptimizationLevel11EShMessages:
 1230|     60|    {
 1231|     60|        bool success = true;
 1232|       |        // Parse the full shader.
 1233|     60|        if (! parseContext.parseShaderStrings(ppContext, fullInput, versionWillBeError))
  ------------------
  |  Branch (1233:13): [True: 60, False: 0]
  ------------------
 1234|     60|            success = false;
 1235|       |
 1236|     60|        if (success && intermediate.getTreeRoot()) {
  ------------------
  |  Branch (1236:13): [True: 0, False: 60]
  |  Branch (1236:24): [True: 0, False: 0]
  ------------------
 1237|      0|            if (optLevel == EShOptNoGeneration)
  ------------------
  |  Branch (1237:17): [True: 0, False: 0]
  ------------------
 1238|      0|                parseContext.infoSink.info.message(EPrefixNone, "No errors.  No code generation or linking was requested.");
 1239|      0|            else
 1240|      0|                success = intermediate.postProcess(intermediate.getTreeRoot(), parseContext.getLanguage());
 1241|     60|        } else if (! success) {
  ------------------
  |  Branch (1241:20): [True: 60, False: 0]
  ------------------
 1242|     60|            parseContext.infoSink.info.prefix(EPrefixError);
 1243|     60|            parseContext.infoSink.info << parseContext.getNumErrors() << " compilation errors.  No code generated.\n\n";
 1244|     60|        }
 1245|       |
 1246|     60|        if (messages & EShMsgAST)
  ------------------
  |  Branch (1246:13): [True: 0, False: 60]
  ------------------
 1247|      0|            intermediate.output(parseContext.infoSink, true);
 1248|       |
 1249|     60|        return success;
 1250|     60|    }
_ZN7glslang17TDeferredCompilerC2E11EShLanguageR9TInfoSink:
 1731|    220|    TDeferredCompiler(EShLanguage s, TInfoSink& i) : TCompiler(s, i) { }
ShaderLang.cpp:_ZN12_GLOBAL__N_118PreprocessDeferredEP9TCompilerPKPKciPKiS5_S3_20EShOptimizationLevelPK16TBuiltInResourcei8EProfilebib11EShMessagesRN7glslang7TShader8IncluderERNSE_13TIntermediateEPNSt3__112basic_stringIcNSK_11char_traitsIcEENSK_9allocatorIcEEEEPNSE_12TEnvironmentE:
 1279|    155|{
 1280|    155|    DoPreprocessing parser(outputString);
 1281|    155|    return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames,
 1282|    155|                           preamble, optLevel, resources, defaultVersion,
 1283|    155|                           defaultProfile, forceDefaultVersionAndProfile, overrideVersion,
 1284|    155|                           forwardCompatible, messages, intermediate, parser,
 1285|    155|                           false, includer, "", environment);
 1286|    155|}
ShaderLang.cpp:_ZN12_GLOBAL__N_115DoPreprocessingC2EPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 1085|    155|    explicit DoPreprocessing(std::string* string): outputString(string) {}
ShaderLang.cpp:_ZN12_GLOBAL__N_115ProcessDeferredINS_15DoPreprocessingEEEbP9TCompilerPKPKciPKiS7_S5_20EShOptimizationLevelPK16TBuiltInResourcei8EProfilebib11EShMessagesRN7glslang13TIntermediateERT_bRNSG_7TShader8IncluderENSt3__112basic_stringIcNSO_11char_traitsIcEENSO_9allocatorIcEEEEPKNSG_12TEnvironmentEb:
  820|    155|{
  821|       |    // This must be undone (.pop()) by the caller, after it finishes consuming the created tree.
  822|    155|    GetThreadPoolAllocator().push();
  823|       |
  824|    155|    if (numStrings == 0)
  ------------------
  |  Branch (824:9): [True: 0, False: 155]
  ------------------
  825|      0|        return true;
  826|       |
  827|       |    // Move to length-based strings, rather than null-terminated strings.
  828|       |    // Also, add strings to include the preamble and to ensure the shader is not null,
  829|       |    // which lets the grammar accept what was a null (post preprocessing) shader.
  830|       |    //
  831|       |    // Shader will look like
  832|       |    //   string 0:                system preamble
  833|       |    //   string 1:                custom preamble
  834|       |    //   string 2...numStrings+1: user's shader
  835|       |    //   string numStrings+2:     "int;"
  836|    155|    const int numPre = 2;
  837|    155|    const int numPost = requireNonempty? 1 : 0;
  ------------------
  |  Branch (837:25): [True: 0, False: 155]
  ------------------
  838|    155|    const int numTotal = numPre + numStrings + numPost;
  839|    155|    std::unique_ptr<size_t[]> lengths(new size_t[numTotal]);
  840|    155|    std::unique_ptr<const char*[]> strings(new const char*[numTotal]);
  841|    155|    std::unique_ptr<const char*[]> names(new const char*[numTotal]);
  842|    310|    for (int s = 0; s < numStrings; ++s) {
  ------------------
  |  Branch (842:21): [True: 155, False: 155]
  ------------------
  843|    155|        strings[s + numPre] = shaderStrings[s];
  844|    155|        if (inputLengths == nullptr || inputLengths[s] < 0)
  ------------------
  |  Branch (844:13): [True: 0, False: 155]
  |  Branch (844:40): [True: 0, False: 155]
  ------------------
  845|      0|            lengths[s + numPre] = strlen(shaderStrings[s]);
  846|    155|        else
  847|    155|            lengths[s + numPre] = inputLengths[s];
  848|    155|    }
  849|    155|    if (stringNames != nullptr) {
  ------------------
  |  Branch (849:9): [True: 155, False: 0]
  ------------------
  850|    310|        for (int s = 0; s < numStrings; ++s)
  ------------------
  |  Branch (850:25): [True: 155, False: 155]
  ------------------
  851|    155|            names[s + numPre] = stringNames[s];
  852|    155|    } else {
  853|      0|        for (int s = 0; s < numStrings; ++s)
  ------------------
  |  Branch (853:25): [True: 0, False: 0]
  ------------------
  854|      0|            names[s + numPre] = nullptr;
  855|      0|    }
  856|       |
  857|       |    // Get all the stages, languages, clients, and other environment
  858|       |    // stuff sorted out.
  859|    155|    EShSource sourceGuess = (messages & EShMsgReadHlsl) != 0 ? EShSourceHlsl : EShSourceGlsl;
  ------------------
  |  Branch (859:29): [True: 69, False: 86]
  ------------------
  860|    155|    SpvVersion spvVersion;
  861|    155|    EShLanguage stage = compiler->getLanguage();
  862|    155|    TranslateEnvironment(environment, messages, sourceGuess, stage, spvVersion);
  863|    155|#ifdef ENABLE_HLSL
  864|    155|    EShSource source = sourceGuess;
  865|    155|    if (environment != nullptr && environment->target.hlslFunctionality1)
  ------------------
  |  Branch (865:9): [True: 155, False: 0]
  |  Branch (865:35): [True: 71, False: 84]
  ------------------
  866|     71|        intermediate.setHlslFunctionality1();
  867|       |#else
  868|       |    const EShSource source = EShSourceGlsl;
  869|       |#endif
  870|       |    // First, without using the preprocessor or parser, find the #version, so we know what
  871|       |    // symbol tables, processing rules, etc. to set up.  This does not need the extra strings
  872|       |    // outlined above, just the user shader, after the system and user preambles.
  873|    155|    glslang::TInputScanner userInput(numStrings, &strings[numPre], &lengths[numPre]);
  874|    155|    int version = 0;
  875|    155|    EProfile profile = ENoProfile;
  876|    155|    bool versionNotFirstToken = false;
  877|    155|    bool versionNotFirst = (source == EShSourceHlsl)
  ------------------
  |  Branch (877:28): [True: 69, False: 86]
  ------------------
  878|    155|                                ? true
  879|    155|                                : userInput.scanVersion(version, profile, versionNotFirstToken);
  880|    155|    bool versionNotFound = version == 0;
  881|    155|    if (forceDefaultVersionAndProfile && source == EShSourceGlsl) {
  ------------------
  |  Branch (881:9): [True: 0, False: 155]
  |  Branch (881:42): [True: 0, False: 0]
  ------------------
  882|      0|        if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound &&
  ------------------
  |  Branch (882:13): [True: 0, False: 0]
  |  Branch (882:54): [True: 0, False: 0]
  ------------------
  883|      0|            (version != defaultVersion || profile != defaultProfile)) {
  ------------------
  |  Branch (883:14): [True: 0, False: 0]
  |  Branch (883:43): [True: 0, False: 0]
  ------------------
  884|      0|            compiler->infoSink.info << "Warning, (version, profile) forced to be ("
  885|      0|                                    << defaultVersion << ", " << ProfileName(defaultProfile)
  886|      0|                                    << "), while in source code it is ("
  887|      0|                                    << version << ", " << ProfileName(profile) << ")\n";
  888|      0|        }
  889|       |
  890|      0|        if (versionNotFound) {
  ------------------
  |  Branch (890:13): [True: 0, False: 0]
  ------------------
  891|      0|            versionNotFirstToken = false;
  892|      0|            versionNotFirst = false;
  893|      0|            versionNotFound = false;
  894|      0|        }
  895|      0|        version = defaultVersion;
  896|      0|        profile = defaultProfile;
  897|      0|    }
  898|    155|    if (source == EShSourceGlsl && overrideVersion != 0) {
  ------------------
  |  Branch (898:9): [True: 86, False: 69]
  |  Branch (898:36): [True: 0, False: 86]
  ------------------
  899|      0|        version = overrideVersion;
  900|      0|    }
  901|       |
  902|    155|    bool goodVersion = DeduceVersionProfile(compiler->infoSink, stage,
  903|    155|                                            versionNotFirst, defaultVersion, source, version, profile, spvVersion);
  904|    155|    bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst));
  ------------------
  |  Branch (904:32): [True: 150, False: 5]
  |  Branch (904:52): [True: 0, False: 5]
  |  Branch (904:77): [True: 0, False: 0]
  |  Branch (904:95): [True: 0, False: 0]
  ------------------
  905|    155|    bool warnVersionNotFirst = false;
  906|    155|    if (! versionWillBeError && versionNotFirstToken) {
  ------------------
  |  Branch (906:9): [True: 5, False: 150]
  |  Branch (906:33): [True: 0, False: 5]
  ------------------
  907|      0|        if (messages & EShMsgRelaxedErrors)
  ------------------
  |  Branch (907:13): [True: 0, False: 0]
  ------------------
  908|      0|            warnVersionNotFirst = true;
  909|      0|        else
  910|      0|            versionWillBeError = true;
  911|      0|    }
  912|       |
  913|    155|    intermediate.setSource(source);
  914|    155|    intermediate.setVersion(version);
  915|    155|    intermediate.setProfile(profile);
  916|    155|    intermediate.setSpv(spvVersion);
  917|    155|    RecordProcesses(intermediate, messages, sourceEntryPointName);
  918|    155|    if (spvVersion.vulkan > 0)
  ------------------
  |  Branch (918:9): [True: 155, False: 0]
  ------------------
  919|    155|        intermediate.setOriginUpperLeft();
  920|    155|#ifdef ENABLE_HLSL
  921|    155|    if ((messages & EShMsgHlslOffsets) || source == EShSourceHlsl)
  ------------------
  |  Branch (921:9): [True: 74, False: 81]
  |  Branch (921:43): [True: 12, False: 69]
  ------------------
  922|     86|        intermediate.setHlslOffsets();
  923|    155|#endif
  924|    155|    if (messages & EShMsgDebugInfo) {
  ------------------
  |  Branch (924:9): [True: 0, False: 155]
  ------------------
  925|      0|        intermediate.setSourceFile(names[numPre]);
  926|      0|        for (int s = 0; s < numStrings; ++s) {
  ------------------
  |  Branch (926:25): [True: 0, False: 0]
  ------------------
  927|       |            // The string may not be null-terminated, so make sure we provide
  928|       |            // the length along with the string.
  929|      0|            intermediate.addSourceText(strings[numPre + s], lengths[numPre + s]);
  930|      0|        }
  931|      0|    }
  932|    155|    if (!SetupBuiltinSymbolTable(version, profile, spvVersion, source)) {
  ------------------
  |  Branch (932:9): [True: 0, False: 155]
  ------------------
  933|      0|        return false;
  934|      0|    }
  935|       |
  936|    155|    TSymbolTable* cachedTable = SharedSymbolTables[MapVersionToIndex(version)]
  937|    155|                                                  [MapSpvVersionToIndex(spvVersion)]
  938|    155|                                                  [MapProfileToIndex(profile)]
  939|    155|                                                  [MapSourceToIndex(source)]
  940|    155|                                                  [stage];
  941|       |
  942|       |    // Dynamically allocate the symbol table so we can control when it is deallocated WRT the pool.
  943|    155|    std::unique_ptr<TSymbolTable> symbolTable(new TSymbolTable);
  944|    155|    if (cachedTable)
  ------------------
  |  Branch (944:9): [True: 155, False: 0]
  ------------------
  945|    155|        symbolTable->adoptLevels(*cachedTable);
  946|       |
  947|    155|    if (intermediate.getUniqueId() != 0)
  ------------------
  |  Branch (947:9): [True: 0, False: 155]
  ------------------
  948|      0|        symbolTable->overwriteUniqueId(intermediate.getUniqueId());
  949|       |
  950|       |    // Add built-in symbols that are potentially context dependent;
  951|       |    // they get popped again further down.
  952|    155|    if (! AddContextSpecificSymbols(resources, compiler->infoSink, *symbolTable, version, profile, spvVersion,
  ------------------
  |  Branch (952:9): [True: 0, False: 155]
  ------------------
  953|    155|                                    stage, source)) {
  954|      0|        return false;
  955|      0|    }
  956|       |
  957|    155|    if (messages & EShMsgBuiltinSymbolTable)
  ------------------
  |  Branch (957:9): [True: 0, False: 155]
  ------------------
  958|      0|        DumpBuiltinSymbolTable(compiler->infoSink, *symbolTable);
  959|       |
  960|       |    //
  961|       |    // Now we can process the full shader under proper symbols and rules.
  962|       |    //
  963|       |
  964|    155|    std::unique_ptr<TParseContextBase> parseContext(CreateParseContext(*symbolTable, intermediate, version, profile, source,
  965|    155|                                                    stage, compiler->infoSink,
  966|    155|                                                    spvVersion, forwardCompatible, messages, false, sourceEntryPointName));
  967|    155|    parseContext->compileOnly = compileOnly;
  968|    155|    TPpContext ppContext(*parseContext, names[numPre] ? names[numPre] : "", includer);
  ------------------
  |  Branch (968:41): [True: 155, False: 0]
  ------------------
  969|       |
  970|       |    // only GLSL (bison triggered, really) needs an externally set scan context
  971|    155|    glslang::TScanContext scanContext(*parseContext);
  972|    155|    if (source == EShSourceGlsl)
  ------------------
  |  Branch (972:9): [True: 86, False: 69]
  ------------------
  973|     86|        parseContext->setScanContext(&scanContext);
  974|       |
  975|    155|    parseContext->setPpContext(&ppContext);
  976|    155|    parseContext->setLimits(*resources);
  977|    155|    if (! goodVersion)
  ------------------
  |  Branch (977:9): [True: 81, False: 74]
  ------------------
  978|     81|        parseContext->addError();
  979|    155|    if (warnVersionNotFirst) {
  ------------------
  |  Branch (979:9): [True: 0, False: 155]
  ------------------
  980|      0|        TSourceLoc loc;
  981|      0|        loc.init();
  982|      0|        parseContext->warn(loc, "Illegal to have non-comment, non-whitespace tokens before #version", "#version", "");
  983|      0|    }
  984|       |
  985|    155|    parseContext->initializeExtensionBehavior();
  986|       |
  987|       |    // Fill in the strings as outlined above.
  988|    155|    std::string preamble;
  989|    155|    parseContext->getPreamble(preamble);
  990|    155|    strings[0] = preamble.c_str();
  991|    155|    lengths[0] = strlen(strings[0]);
  992|    155|    names[0] = nullptr;
  993|    155|    strings[1] = customPreamble;
  994|    155|    lengths[1] = strlen(strings[1]);
  995|    155|    names[1] = nullptr;
  996|    155|    assert(2 == numPre);
  997|    155|    if (requireNonempty) {
  ------------------
  |  Branch (997:9): [True: 0, False: 155]
  ------------------
  998|      0|        const int postIndex = numStrings + numPre;
  999|      0|        strings[postIndex] = "\n int;";
 1000|      0|        lengths[postIndex] = strlen(strings[numStrings + numPre]);
 1001|      0|        names[postIndex] = nullptr;
 1002|      0|    }
 1003|    155|    TInputScanner fullInput(numStrings + numPre + numPost, strings.get(), lengths.get(), names.get(), numPre, numPost);
 1004|       |
 1005|       |    // Push a new symbol allocation scope that will get used for the shader's globals.
 1006|    155|    symbolTable->push();
 1007|       |
 1008|    155|    bool success = processingContext(*parseContext, ppContext, fullInput,
 1009|    155|                                     versionWillBeError, *symbolTable,
 1010|    155|                                     intermediate, optLevel, messages);
 1011|    155|    intermediate.setUniqueId(symbolTable->getMaxSymbolId());
 1012|    155|    return success;
 1013|    155|}
ShaderLang.cpp:_ZN12_GLOBAL__N_115DoPreprocessingclERN7glslang17TParseContextBaseERNS1_10TPpContextERNS1_13TInputScannerEbRNS1_12TSymbolTableERNS1_13TIntermediateE20EShOptimizationLevel11EShMessages:
 1090|    155|    {
 1091|       |        // This is a list of tokens that do not require a space before or after.
 1092|    155|        static const std::string noNeededSpaceBeforeTokens = ";)[].,";
 1093|    155|        static const std::string noNeededSpaceAfterTokens = ".([";
 1094|    155|        glslang::TPpToken ppToken;
 1095|       |
 1096|    155|        parseContext.setScanner(&input);
 1097|    155|        ppContext.setInput(input, versionWillBeError);
 1098|       |
 1099|    155|        std::string outputBuffer;
 1100|    155|        SourceLineSynchronizer lineSync(
 1101|    155|            std::bind(&TInputScanner::getLastValidSourceIndex, &input), &outputBuffer);
 1102|       |
 1103|    155|        parseContext.setExtensionCallback([&lineSync, &outputBuffer](
 1104|    155|            int line, const char* extension, const char* behavior) {
 1105|    155|                lineSync.syncToLine(line);
 1106|    155|                outputBuffer += "#extension ";
 1107|    155|                outputBuffer += extension;
 1108|    155|                outputBuffer += " : ";
 1109|    155|                outputBuffer += behavior;
 1110|    155|        });
 1111|       |
 1112|    155|        parseContext.setLineCallback([&lineSync, &outputBuffer, &parseContext](
 1113|    155|            int curLineNum, int newLineNum, bool hasSource, int sourceNum, const char* sourceName) {
 1114|       |            // SourceNum is the number of the source-string that is being parsed.
 1115|    155|            lineSync.syncToLine(curLineNum);
 1116|    155|            outputBuffer += "#line ";
 1117|    155|            outputBuffer += std::to_string(newLineNum);
 1118|    155|            if (hasSource) {
 1119|    155|                outputBuffer += ' ';
 1120|    155|                if (sourceName != nullptr) {
 1121|    155|                    outputBuffer += '\"';
 1122|    155|                    outputBuffer += sourceName;
 1123|    155|                    outputBuffer += '\"';
 1124|    155|                } else {
 1125|    155|                    outputBuffer += std::to_string(sourceNum);
 1126|    155|                }
 1127|    155|            }
 1128|    155|            if (parseContext.lineDirectiveShouldSetNextLine()) {
 1129|       |                // newLineNum is the new line number for the line following the #line
 1130|       |                // directive. So the new line number for the current line is
 1131|    155|                newLineNum -= 1;
 1132|    155|            }
 1133|    155|            outputBuffer += '\n';
 1134|       |            // And we are at the next line of the #line directive now.
 1135|    155|            lineSync.setLineNum(newLineNum + 1);
 1136|    155|        });
 1137|       |
 1138|    155|        parseContext.setVersionCallback(
 1139|    155|            [&lineSync, &outputBuffer](int line, int version, const char* str) {
 1140|    155|                lineSync.syncToLine(line);
 1141|    155|                outputBuffer += "#version ";
 1142|    155|                outputBuffer += std::to_string(version);
 1143|    155|                if (str) {
 1144|    155|                    outputBuffer += ' ';
 1145|    155|                    outputBuffer += str;
 1146|    155|                }
 1147|    155|            });
 1148|       |
 1149|    155|        parseContext.setPragmaCallback([&lineSync, &outputBuffer](
 1150|    155|            int line, const glslang::TVector<glslang::TString>& ops) {
 1151|    155|                lineSync.syncToLine(line);
 1152|    155|                outputBuffer += "#pragma ";
 1153|    155|                for(size_t i = 0; i < ops.size(); ++i) {
 1154|    155|                    outputBuffer += ops[i].c_str();
 1155|    155|                }
 1156|    155|        });
 1157|       |
 1158|    155|        parseContext.setErrorCallback([&lineSync, &outputBuffer](
 1159|    155|            int line, const char* errorMessage) {
 1160|    155|                lineSync.syncToLine(line);
 1161|    155|                outputBuffer += "#error ";
 1162|    155|                outputBuffer += errorMessage;
 1163|    155|        });
 1164|       |
 1165|    155|        int lastToken = EndOfInput; // lastToken records the last token processed.
 1166|    155|        std::string lastTokenName;
 1167|  22.0M|        do {
 1168|  22.0M|            int token = ppContext.tokenize(ppToken);
 1169|  22.0M|            if (token == EndOfInput)
  ------------------
  |  Branch (1169:17): [True: 155, False: 22.0M]
  ------------------
 1170|    155|                break;
 1171|       |
 1172|  22.0M|            bool isNewString = lineSync.syncToMostRecentString();
 1173|  22.0M|            bool isNewLine = lineSync.syncToLine(ppToken.loc.line);
 1174|       |
 1175|  22.0M|            if (isNewLine) {
  ------------------
  |  Branch (1175:17): [True: 2.05M, False: 19.9M]
  ------------------
 1176|       |                // Don't emit whitespace onto empty lines.
 1177|       |                // Copy any whitespace characters at the start of a line
 1178|       |                // from the input to the output.
 1179|  2.05M|                outputBuffer += std::string(ppToken.loc.column - 1, ' ');
 1180|  2.05M|            }
 1181|       |
 1182|       |            // Output a space in between tokens, but not at the start of a line,
 1183|       |            // and also not around special tokens. This helps with readability
 1184|       |            // and consistency.
 1185|  22.0M|            if (!isNewString && !isNewLine && lastToken != EndOfInput) {
  ------------------
  |  Branch (1185:17): [True: 22.0M, False: 147]
  |  Branch (1185:33): [True: 19.9M, False: 2.05M]
  |  Branch (1185:47): [True: 19.9M, False: 0]
  ------------------
 1186|       |                // left parenthesis need a leading space, except it is in a function-call-like context.
 1187|       |                // examples: `for (xxx)`, `a * (b + c)`, `vec(2.0)`, `foo(x, y, z)`
 1188|  19.9M|                if (token == '(') {
  ------------------
  |  Branch (1188:21): [True: 37.2k, False: 19.9M]
  ------------------
 1189|  37.2k|                    if (lastToken != PpAtomIdentifier ||
  ------------------
  |  Branch (1189:25): [True: 28.6k, False: 8.52k]
  ------------------
 1190|  8.52k|                        lastTokenName == "if" ||
  ------------------
  |  Branch (1190:25): [True: 0, False: 8.52k]
  ------------------
 1191|  8.52k|                        lastTokenName == "for" ||
  ------------------
  |  Branch (1191:25): [True: 0, False: 8.52k]
  ------------------
 1192|  8.52k|                        lastTokenName == "while" ||
  ------------------
  |  Branch (1192:25): [True: 0, False: 8.52k]
  ------------------
 1193|  8.52k|                        lastTokenName == "switch")
  ------------------
  |  Branch (1193:25): [True: 0, False: 8.52k]
  ------------------
 1194|  28.6k|                        outputBuffer += ' ';
 1195|  19.9M|                } else if ((noNeededSpaceBeforeTokens.find((char)token) == std::string::npos) &&
  ------------------
  |  Branch (1195:28): [True: 19.7M, False: 217k]
  ------------------
 1196|  19.7M|                    (noNeededSpaceAfterTokens.find((char)lastToken) == std::string::npos)) {
  ------------------
  |  Branch (1196:21): [True: 19.6M, False: 34.0k]
  ------------------
 1197|  19.6M|                    outputBuffer += ' ';
 1198|  19.6M|                }
 1199|  19.9M|            }
 1200|  22.0M|            if (token == PpAtomIdentifier)
  ------------------
  |  Branch (1200:17): [True: 896k, False: 21.1M]
  ------------------
 1201|   896k|                lastTokenName = ppToken.name;
 1202|  22.0M|            lastToken = token;
 1203|  22.0M|            if (token == PpAtomConstString)
  ------------------
  |  Branch (1203:17): [True: 84.5k, False: 21.9M]
  ------------------
 1204|  84.5k|                outputBuffer += "\"";
 1205|  22.0M|            outputBuffer += ppToken.name;
 1206|  22.0M|            if (token == PpAtomConstString)
  ------------------
  |  Branch (1206:17): [True: 84.5k, False: 21.9M]
  ------------------
 1207|  84.5k|                outputBuffer += "\"";
 1208|  22.0M|        } while (true);
  ------------------
  |  Branch (1208:18): [True: 22.0M, Folded]
  ------------------
 1209|    155|        outputBuffer += '\n';
 1210|    155|        *outputString = std::move(outputBuffer);
 1211|       |
 1212|    155|        bool success = true;
 1213|    155|        if (parseContext.getNumErrors() > 0) {
  ------------------
  |  Branch (1213:13): [True: 110, False: 45]
  ------------------
 1214|    110|            success = false;
 1215|    110|            parseContext.infoSink.info.prefix(EPrefixError);
 1216|    110|            parseContext.infoSink.info << parseContext.getNumErrors() << " compilation errors.  No code generated.\n\n";
 1217|    110|        }
 1218|    155|        return success;
 1219|    155|    }
ShaderLang.cpp:_ZN12_GLOBAL__N_122SourceLineSynchronizerC2ERKNSt3__18functionIFivEEEPNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
 1022|    155|      : getLastSourceIndex(lastSourceIndex), output(output), lastSource(-1), lastLine(0) {}
ShaderLang.cpp:_ZZN12_GLOBAL__N_115DoPreprocessingclERN7glslang17TParseContextBaseERNS1_10TPpContextERNS1_13TInputScannerEbRNS1_12TSymbolTableERNS1_13TIntermediateE20EShOptimizationLevel11EShMessagesENKUliPKcSF_E_clEiSF_SF_:
 1104|    177|            int line, const char* extension, const char* behavior) {
 1105|    177|                lineSync.syncToLine(line);
 1106|    177|                outputBuffer += "#extension ";
 1107|    177|                outputBuffer += extension;
 1108|    177|                outputBuffer += " : ";
 1109|    177|                outputBuffer += behavior;
 1110|    177|        });
ShaderLang.cpp:_ZZN12_GLOBAL__N_115DoPreprocessingclERN7glslang17TParseContextBaseERNS1_10TPpContextERNS1_13TInputScannerEbRNS1_12TSymbolTableERNS1_13TIntermediateE20EShOptimizationLevel11EShMessagesENKUliiPKcE_clEiiSF_:
 1139|      6|            [&lineSync, &outputBuffer](int line, int version, const char* str) {
 1140|      6|                lineSync.syncToLine(line);
 1141|      6|                outputBuffer += "#version ";
 1142|      6|                outputBuffer += std::to_string(version);
 1143|      6|                if (str) {
  ------------------
  |  Branch (1143:21): [True: 2, False: 4]
  ------------------
 1144|      2|                    outputBuffer += ' ';
 1145|      2|                    outputBuffer += str;
 1146|      2|                }
 1147|      6|            });
ShaderLang.cpp:_ZZN12_GLOBAL__N_115DoPreprocessingclERN7glslang17TParseContextBaseERNS1_10TPpContextERNS1_13TInputScannerEbRNS1_12TSymbolTableERNS1_13TIntermediateE20EShOptimizationLevel11EShMessagesENKUliPKcE_clEiSF_:
 1159|     12|            int line, const char* errorMessage) {
 1160|     12|                lineSync.syncToLine(line);
 1161|     12|                outputBuffer += "#error ";
 1162|     12|                outputBuffer += errorMessage;
 1163|     12|        });
ShaderLang.cpp:_ZN12_GLOBAL__N_122SourceLineSynchronizer22syncToMostRecentStringEv:
 1029|  44.0M|    bool syncToMostRecentString() {
 1030|  44.0M|        if (getLastSourceIndex() != lastSource) {
  ------------------
  |  Branch (1030:13): [True: 308, False: 44.0M]
  ------------------
 1031|       |            // After switching to a new source string, we need to reset lastLine
 1032|       |            // because line number resets every time a new source string is
 1033|       |            // used. We also need to output a newline to separate the output
 1034|       |            // from the previous source string (if there is one).
 1035|    308|            if (lastSource != -1 || lastLine != 0)
  ------------------
  |  Branch (1035:17): [True: 153, False: 155]
  |  Branch (1035:37): [True: 0, False: 155]
  ------------------
 1036|    153|                *output += '\n';
 1037|    308|            lastSource = getLastSourceIndex();
 1038|    308|            lastLine = -1;
 1039|    308|            return true;
 1040|    308|        }
 1041|  44.0M|        return false;
 1042|  44.0M|    }
ShaderLang.cpp:_ZN12_GLOBAL__N_122SourceLineSynchronizer10syncToLineEi:
 1047|  22.0M|    bool syncToLine(int tokenLine) {
 1048|  22.0M|        syncToMostRecentString();
 1049|  22.0M|        const bool newLineStarted = lastLine < tokenLine;
 1050|  27.3M|        for (; lastLine < tokenLine; ++lastLine) {
  ------------------
  |  Branch (1050:16): [True: 5.34M, False: 22.0M]
  ------------------
 1051|  5.34M|            if (lastLine > 0) *output += '\n';
  ------------------
  |  Branch (1051:17): [True: 5.34M, False: 616]
  ------------------
 1052|  5.34M|        }
 1053|  22.0M|        return newLineStarted;
 1054|  22.0M|    }

_ZNK7glslang5TType16buildMangledNameERNSt3__112basic_stringIcNS1_11char_traitsIcEENS_14pool_allocatorIcEEEE:
   57|  1.54M|{
   58|  1.54M|    if (isTensorARM())
  ------------------
  |  Branch (58:9): [True: 305, False: 1.53M]
  ------------------
   59|    305|        mangledName += 'T';
   60|  1.53M|    else if (isMatrix())
  ------------------
  |  Branch (60:14): [True: 187k, False: 1.35M]
  ------------------
   61|   187k|        mangledName += 'm';
   62|  1.35M|    else if (isVector())
  ------------------
  |  Branch (62:14): [True: 635k, False: 716k]
  ------------------
   63|   635k|        mangledName += 'v';
   64|       |
   65|  1.54M|    if (isCoopVecNV())
  ------------------
  |  Branch (65:9): [True: 3.93k, False: 1.53M]
  ------------------
   66|  3.93k|        mangledName += "coopvec";
   67|       |
   68|  1.54M|    switch (basicType) {
   69|   361k|    case EbtFloat:              mangledName += 'f';      break;
  ------------------
  |  Branch (69:5): [True: 361k, False: 1.17M]
  ------------------
   70|   387k|    case EbtInt:                mangledName += 'i';      break;
  ------------------
  |  Branch (70:5): [True: 387k, False: 1.15M]
  ------------------
   71|   301k|    case EbtUint:               mangledName += 'u';      break;
  ------------------
  |  Branch (71:5): [True: 301k, False: 1.23M]
  ------------------
   72|  23.5k|    case EbtBool:               mangledName += 'b';      break;
  ------------------
  |  Branch (72:5): [True: 23.5k, False: 1.51M]
  ------------------
   73|  17.6k|    case EbtDouble:             mangledName += 'd';      break;
  ------------------
  |  Branch (73:5): [True: 17.6k, False: 1.52M]
  ------------------
   74|  35.9k|    case EbtFloat16:            mangledName += "f16";    break;
  ------------------
  |  Branch (74:5): [True: 35.9k, False: 1.50M]
  ------------------
   75|    160|    case EbtBFloat16:           mangledName += "bf16";   break;
  ------------------
  |  Branch (75:5): [True: 160, False: 1.54M]
  ------------------
   76|    120|    case EbtFloatE5M2:          mangledName += "fe5m2";  break;
  ------------------
  |  Branch (76:5): [True: 120, False: 1.54M]
  ------------------
   77|    120|    case EbtFloatE4M3:          mangledName += "fe4m3";  break;
  ------------------
  |  Branch (77:5): [True: 120, False: 1.54M]
  ------------------
   78|  25.1k|    case EbtInt8:               mangledName += "i8";     break;
  ------------------
  |  Branch (78:5): [True: 25.1k, False: 1.51M]
  ------------------
   79|  25.0k|    case EbtUint8:              mangledName += "u8";     break;
  ------------------
  |  Branch (79:5): [True: 25.0k, False: 1.51M]
  ------------------
   80|  29.5k|    case EbtInt16:              mangledName += "i16";    break;
  ------------------
  |  Branch (80:5): [True: 29.5k, False: 1.51M]
  ------------------
   81|  29.3k|    case EbtUint16:             mangledName += "u16";    break;
  ------------------
  |  Branch (81:5): [True: 29.3k, False: 1.51M]
  ------------------
   82|  30.6k|    case EbtInt64:              mangledName += "i64";    break;
  ------------------
  |  Branch (82:5): [True: 30.6k, False: 1.50M]
  ------------------
   83|  32.8k|    case EbtUint64:             mangledName += "u64";    break;
  ------------------
  |  Branch (83:5): [True: 32.8k, False: 1.50M]
  ------------------
   84|      0|    case EbtAtomicUint:         mangledName += "au";     break;
  ------------------
  |  Branch (84:5): [True: 0, False: 1.54M]
  ------------------
   85|      0|    case EbtAccStruct:          mangledName += "as";     break;
  ------------------
  |  Branch (85:5): [True: 0, False: 1.54M]
  ------------------
   86|      0|    case EbtRayQuery:           mangledName += "rq";     break;
  ------------------
  |  Branch (86:5): [True: 0, False: 1.54M]
  ------------------
   87|      0|    case EbtSpirvType:          mangledName += "spv-t";  break;
  ------------------
  |  Branch (87:5): [True: 0, False: 1.54M]
  ------------------
   88|      0|    case EbtHitObjectNV:        mangledName += "ho";     break;
  ------------------
  |  Branch (88:5): [True: 0, False: 1.54M]
  ------------------
   89|      0|    case EbtHitObjectEXT:       mangledName += "ho";     break;
  ------------------
  |  Branch (89:5): [True: 0, False: 1.54M]
  ------------------
   90|    185|    case EbtTensorLayoutNV:     mangledName += "tl";     break;
  ------------------
  |  Branch (90:5): [True: 185, False: 1.54M]
  ------------------
   91|     95|    case EbtTensorViewNV:       mangledName += "tv";     break;
  ------------------
  |  Branch (91:5): [True: 95, False: 1.54M]
  ------------------
   92|   213k|    case EbtSampler:
  ------------------
  |  Branch (92:5): [True: 213k, False: 1.32M]
  ------------------
   93|   213k|        switch (sampler.type) {
   94|  12.6k|        case EbtFloat16: mangledName += "f16"; break;
  ------------------
  |  Branch (94:9): [True: 12.6k, False: 200k]
  ------------------
   95|  57.2k|        case EbtInt:   mangledName += "i"; break;
  ------------------
  |  Branch (95:9): [True: 57.2k, False: 155k]
  ------------------
   96|  57.2k|        case EbtUint:  mangledName += "u"; break;
  ------------------
  |  Branch (96:9): [True: 57.2k, False: 155k]
  ------------------
   97|  1.30k|        case EbtInt64:   mangledName += "i64"; break;
  ------------------
  |  Branch (97:9): [True: 1.30k, False: 211k]
  ------------------
   98|  1.30k|        case EbtUint64:  mangledName += "u64"; break;
  ------------------
  |  Branch (98:9): [True: 1.30k, False: 211k]
  ------------------
   99|  83.2k|        default: break; // some compilers want this
  ------------------
  |  Branch (99:9): [True: 83.2k, False: 129k]
  ------------------
  100|   213k|        }
  101|   213k|        if (sampler.isImageClass())
  ------------------
  |  Branch (101:13): [True: 54.1k, False: 158k]
  ------------------
  102|  54.1k|            mangledName += "I";  // a normal image or subpass
  103|   158k|        else if (sampler.isPureSampler())
  ------------------
  |  Branch (103:18): [True: 30.6k, False: 128k]
  ------------------
  104|  30.6k|            mangledName += "p";  // a "pure" sampler
  105|   128k|        else if (!sampler.isCombined())
  ------------------
  |  Branch (105:18): [True: 44.0k, False: 84.2k]
  ------------------
  106|  44.0k|            mangledName += "t";  // a "pure" texture
  107|  84.2k|        else
  108|  84.2k|            mangledName += "s";  // traditional combined sampler
  109|   213k|        if (sampler.isArrayed())
  ------------------
  |  Branch (109:13): [True: 61.1k, False: 151k]
  ------------------
  110|  61.1k|            mangledName += "A";
  111|   213k|        if (sampler.isShadow())
  ------------------
  |  Branch (111:13): [True: 25.1k, False: 187k]
  ------------------
  112|  25.1k|            mangledName += "S";
  113|   213k|        if (sampler.isExternal())
  ------------------
  |  Branch (113:13): [True: 0, False: 213k]
  ------------------
  114|      0|            mangledName += "E";
  115|   213k|        if (sampler.isYuv())
  ------------------
  |  Branch (115:13): [True: 0, False: 213k]
  ------------------
  116|      0|            mangledName += "Y";
  117|   213k|        switch (sampler.dim) {
  118|  76.1k|        case Esd2D:       mangledName += "2";  break;
  ------------------
  |  Branch (118:9): [True: 76.1k, False: 136k]
  ------------------
  119|  17.4k|        case Esd3D:       mangledName += "3";  break;
  ------------------
  |  Branch (119:9): [True: 17.4k, False: 195k]
  ------------------
  120|  25.7k|        case EsdCube:     mangledName += "C";  break;
  ------------------
  |  Branch (120:9): [True: 25.7k, False: 187k]
  ------------------
  121|  37.9k|        case Esd1D:       mangledName += "1";  break;
  ------------------
  |  Branch (121:9): [True: 37.9k, False: 175k]
  ------------------
  122|  16.5k|        case EsdRect:     mangledName += "R2"; break;
  ------------------
  |  Branch (122:9): [True: 16.5k, False: 196k]
  ------------------
  123|  6.13k|        case EsdBuffer:   mangledName += "B";  break;
  ------------------
  |  Branch (123:9): [True: 6.13k, False: 206k]
  ------------------
  124|  1.85k|        case EsdSubpass:  mangledName += "P";  break;
  ------------------
  |  Branch (124:9): [True: 1.85k, False: 211k]
  ------------------
  125|  31.2k|        default: break; // some compilers want this
  ------------------
  |  Branch (125:9): [True: 31.2k, False: 181k]
  ------------------
  126|   213k|        }
  127|       |
  128|   213k|#ifdef ENABLE_HLSL
  129|   213k|        if (sampler.hasReturnStruct()) {
  ------------------
  |  Branch (129:13): [True: 0, False: 213k]
  ------------------
  130|       |            // Name mangle for sampler return struct uses struct table index.
  131|      0|            mangledName += "-tx-struct";
  132|       |
  133|      0|            char text[16]; // plenty enough space for the small integers.
  134|      0|            snprintf(text, sizeof(text), "%u-", sampler.getStructReturnIndex());
  135|      0|            mangledName += text;
  136|   213k|        } else {
  137|   213k|            switch (sampler.getVectorSize()) {
  ------------------
  |  Branch (137:21): [True: 213k, False: 0]
  ------------------
  138|  7.64k|            case 1: mangledName += "1"; break;
  ------------------
  |  Branch (138:13): [True: 7.64k, False: 205k]
  ------------------
  139|  22.3k|            case 2: mangledName += "2"; break;
  ------------------
  |  Branch (139:13): [True: 22.3k, False: 190k]
  ------------------
  140|  3.08k|            case 3: mangledName += "3"; break;
  ------------------
  |  Branch (140:13): [True: 3.08k, False: 209k]
  ------------------
  141|   179k|            case 4: break; // default to prior name mangle behavior
  ------------------
  |  Branch (141:13): [True: 179k, False: 33.0k]
  ------------------
  142|   213k|            }
  143|   213k|        }
  144|   213k|#endif
  145|       |
  146|   213k|        if (sampler.isMultiSample())
  ------------------
  |  Branch (146:13): [True: 13.9k, False: 199k]
  ------------------
  147|  13.9k|            mangledName += "M";
  148|   213k|        break;
  149|     60|    case EbtStruct:
  ------------------
  |  Branch (149:5): [True: 60, False: 1.54M]
  ------------------
  150|     60|    case EbtBlock:
  ------------------
  |  Branch (150:5): [True: 0, False: 1.54M]
  ------------------
  151|     60|        if (basicType == EbtStruct)
  ------------------
  |  Branch (151:13): [True: 60, False: 0]
  ------------------
  152|     60|            mangledName += "struct-";
  153|      0|        else
  154|      0|            mangledName += "block-";
  155|     60|        if (typeName)
  ------------------
  |  Branch (155:13): [True: 60, False: 0]
  ------------------
  156|     60|            mangledName += *typeName;
  157|    360|        for (unsigned int i = 0; i < structure->size(); ++i) {
  ------------------
  |  Branch (157:34): [True: 300, False: 60]
  ------------------
  158|    300|            if ((*structure)[i].type->getBasicType() == EbtVoid)
  ------------------
  |  Branch (158:17): [True: 0, False: 300]
  ------------------
  159|      0|                continue;
  160|    300|            mangledName += '-';
  161|    300|            (*structure)[i].type->buildMangledName(mangledName);
  162|    300|        }
  163|     60|        break;
  164|  26.4k|    default:
  ------------------
  |  Branch (164:5): [True: 26.4k, False: 1.51M]
  ------------------
  165|  26.4k|        break;
  166|  1.54M|    }
  167|       |
  168|  1.54M|    if (getVectorSize() > 0)
  ------------------
  |  Branch (168:9): [True: 1.35M, False: 187k]
  ------------------
  169|  1.35M|        mangledName += static_cast<char>('0' + getVectorSize());
  170|   187k|    else {
  171|   187k|        mangledName += static_cast<char>('0' + getMatrixCols());
  172|   187k|        mangledName += static_cast<char>('0' + getMatrixRows());
  173|   187k|    }
  174|       |
  175|  1.54M|    if (typeParameters) {
  ------------------
  |  Branch (175:9): [True: 0, False: 1.54M]
  ------------------
  176|      0|        const int maxSize = 11;
  177|      0|        char buf[maxSize];
  178|      0|        for (int i = 0; i < typeParameters->arraySizes->getNumDims(); ++i) {
  ------------------
  |  Branch (178:25): [True: 0, False: 0]
  ------------------
  179|      0|            if (typeParameters->arraySizes->getDimNode(i)) {
  ------------------
  |  Branch (179:17): [True: 0, False: 0]
  ------------------
  180|      0|                if (typeParameters->arraySizes->getDimNode(i)->getAsSymbolNode())
  ------------------
  |  Branch (180:21): [True: 0, False: 0]
  ------------------
  181|      0|                    snprintf(buf, maxSize, "s%lld", typeParameters->arraySizes->getDimNode(i)->getAsSymbolNode()->getId());
  182|      0|                else
  183|      0|                    snprintf(buf, maxSize, "s%p", typeParameters->arraySizes->getDimNode(i));
  184|      0|            } else
  185|      0|                snprintf(buf, maxSize, "%d", typeParameters->arraySizes->getDimSize(i));
  186|      0|            mangledName += '<';
  187|      0|            mangledName += buf;
  188|      0|            mangledName += '>';
  189|      0|        }
  190|      0|    }
  191|       |
  192|  1.54M|    if (arraySizes) {
  ------------------
  |  Branch (192:9): [True: 9.52k, False: 1.53M]
  ------------------
  193|  9.52k|        const int maxSize = 11;
  194|  9.52k|        char buf[maxSize];
  195|  19.0k|        for (int i = 0; i < arraySizes->getNumDims(); ++i) {
  ------------------
  |  Branch (195:25): [True: 9.52k, False: 9.52k]
  ------------------
  196|  9.52k|            if (arraySizes->getDimNode(i)) {
  ------------------
  |  Branch (196:17): [True: 0, False: 9.52k]
  ------------------
  197|      0|                if (arraySizes->getDimNode(i)->getAsSymbolNode())
  ------------------
  |  Branch (197:21): [True: 0, False: 0]
  ------------------
  198|      0|                    snprintf(buf, maxSize, "s%lld", arraySizes->getDimNode(i)->getAsSymbolNode()->getId());
  199|      0|                else
  200|      0|                    snprintf(buf, maxSize, "s%p", (void*)(arraySizes->getDimNode(i)));
  201|      0|            } else
  202|  9.52k|                snprintf(buf, maxSize, "%d", arraySizes->getDimSize(i));
  203|  9.52k|            mangledName += '[';
  204|  9.52k|            mangledName += buf;
  205|  9.52k|            mangledName += ']';
  206|  9.52k|        }
  207|  9.52k|    }
  208|  1.54M|}
_ZN7glslang9TFunctionD2Ev:
  292|  1.30M|{
  293|  4.32M|    for (TParamList::iterator i = parameters.begin(); i != parameters.end(); ++i)
  ------------------
  |  Branch (293:55): [True: 3.01M, False: 1.30M]
  ------------------
  294|  3.01M|        delete (*i).type;
  295|  1.30M|}
_ZN7glslang17TSymbolTableLevelD2Ev:
  301|  2.92k|{
  302|  1.33M|    for (tLevel::iterator it = level.begin(); it != level.end(); ++it) {
  ------------------
  |  Branch (302:47): [True: 1.32M, False: 2.92k]
  ------------------
  303|  1.32M|        const TString& name = it->first;
  304|  1.32M|        auto retargetIter = std::find_if(retargetedSymbols.begin(), retargetedSymbols.end(),
  305|  1.32M|                                      [&name](const std::pair<TString, TString>& i) { return i.first == name; });
  306|  1.32M|        if (retargetIter == retargetedSymbols.end())
  ------------------
  |  Branch (306:13): [True: 1.32M, False: 0]
  ------------------
  307|  1.32M|            delete (*it).second;
  308|  1.32M|    }
  309|       |
  310|       |
  311|  2.92k|    delete [] defaultPrecision;
  312|  2.92k|}
_ZN7glslang17TSymbolTableLevel16relateToOperatorEPKcNS_9TOperatorE:
  319|   514k|{
  320|   514k|    tLevel::const_iterator candidate = level.lower_bound(name);
  321|  4.84M|    while (candidate != level.end()) {
  ------------------
  |  Branch (321:12): [True: 4.65M, False: 197k]
  ------------------
  322|  4.65M|        const TString& candidateName = (*candidate).first;
  323|  4.65M|        TString::size_type parenAt = candidateName.find_first_of('(');
  324|  4.65M|        if (parenAt != candidateName.npos && candidateName.compare(0, parenAt, name) == 0) {
  ------------------
  |  Branch (324:13): [True: 4.63M, False: 20.2k]
  |  Branch (324:46): [True: 4.33M, False: 296k]
  ------------------
  325|  4.33M|            TFunction* function = (*candidate).second->getAsFunction();
  326|  4.33M|            function->relateToOperator(op);
  327|  4.33M|        } else
  328|   316k|            break;
  329|  4.33M|        ++candidate;
  330|  4.33M|    }
  331|   514k|}
_ZN7glslang17TSymbolTableLevel21setFunctionExtensionsEPKciPKS2_:
  336|  46.2k|{
  337|  46.2k|    tLevel::const_iterator candidate = level.lower_bound(name);
  338|   321k|    while (candidate != level.end()) {
  ------------------
  |  Branch (338:12): [True: 316k, False: 5.48k]
  ------------------
  339|   316k|        const TString& candidateName = (*candidate).first;
  340|   316k|        TString::size_type parenAt = candidateName.find_first_of('(');
  341|   316k|        if (parenAt != candidateName.npos && candidateName.compare(0, parenAt, name) == 0) {
  ------------------
  |  Branch (341:13): [True: 314k, False: 1.95k]
  |  Branch (341:46): [True: 275k, False: 38.8k]
  ------------------
  342|   275k|            TSymbol* symbol = candidate->second;
  343|   275k|            symbol->setExtensions(num, extensions);
  344|   275k|        } else
  345|  40.7k|            break;
  346|   275k|        ++candidate;
  347|   275k|    }
  348|  46.2k|}
_ZN7glslang17TSymbolTableLevel29setFunctionExtensionsCallbackEPKcRKNSt3__18functionIFNS3_6vectorIS2_NS3_9allocatorIS2_EEEES2_EEE:
  352|    200|{
  353|    200|    tLevel::const_iterator candidate = level.lower_bound(name);
  354|  3.54k|    while (candidate != level.end()) {
  ------------------
  |  Branch (354:12): [True: 3.54k, False: 0]
  ------------------
  355|  3.54k|        const TString& candidateName = (*candidate).first;
  356|  3.54k|        TString::size_type parenAt = candidateName.find_first_of('(');
  357|  3.54k|        if (parenAt != candidateName.npos && candidateName.compare(0, parenAt, name) == 0) {
  ------------------
  |  Branch (357:13): [True: 3.54k, False: 0]
  |  Branch (357:46): [True: 3.34k, False: 200]
  ------------------
  358|  3.34k|            TSymbol* symbol = candidate->second;
  359|       |
  360|  3.34k|            auto exts = func(candidateName.c_str());
  361|  3.34k|            symbol->setExtensions(exts.size(), exts.data());
  362|  3.34k|        } else
  363|    200|            break;
  364|  3.34k|        ++candidate;
  365|  3.34k|    }
  366|    200|}
_ZN7glslang17TSymbolTableLevel8readOnlyEv:
  382|  2.02k|{
  383|  4.88M|    for (tLevel::iterator it = level.begin(); it != level.end(); ++it)
  ------------------
  |  Branch (383:47): [True: 4.88M, False: 2.02k]
  ------------------
  384|  4.88M|        (*it).second->makeReadOnly();
  385|  2.02k|}
_ZN7glslang7TSymbolC2ERKS0_:
  391|   653k|{
  392|   653k|    name = NewPoolTString(copyOf.name->c_str());
  393|   653k|    mangledName = NewPoolTString(copyOf.mangledName->c_str());
  394|   653k|    uniqueId = copyOf.uniqueId;
  395|   653k|    writable = true;
  396|   653k|}
_ZN7glslang9TVariableC2ERKS0_:
  398|  7.69k|TVariable::TVariable(const TVariable& copyOf) : TSymbol(copyOf)
  399|  7.69k|{
  400|  7.69k|    type.deepCopy(copyOf.type);
  401|  7.69k|    userType = copyOf.userType;
  402|       |
  403|       |    // we don't support specialization-constant subtrees in cloned tables, only extensions
  404|  7.69k|    constSubtree = nullptr;
  405|  7.69k|    extensions = nullptr;
  406|  7.69k|    memberExtensions = nullptr;
  407|  7.69k|    if (copyOf.getNumExtensions() > 0)
  ------------------
  |  Branch (407:9): [True: 5.31k, False: 2.37k]
  ------------------
  408|  5.31k|        setExtensions(copyOf.getNumExtensions(), copyOf.getExtensions());
  409|  7.69k|    if (copyOf.hasMemberExtensions()) {
  ------------------
  |  Branch (409:9): [True: 30, False: 7.66k]
  ------------------
  410|    215|        for (int m = 0; m < (int)copyOf.type.getStruct()->size(); ++m) {
  ------------------
  |  Branch (410:25): [True: 185, False: 30]
  ------------------
  411|    185|            if (copyOf.getNumMemberExtensions(m) > 0)
  ------------------
  |  Branch (411:17): [True: 145, False: 40]
  ------------------
  412|    145|                setMemberExtensions(m, copyOf.getNumMemberExtensions(m), copyOf.getMemberExtensions(m));
  413|    185|        }
  414|     30|    }
  415|       |
  416|  7.69k|    if (! copyOf.constArray.empty()) {
  ------------------
  |  Branch (416:9): [True: 565, False: 7.12k]
  ------------------
  417|       |        assert(! copyOf.type.isStruct());
  418|    565|        TConstUnionArray newArray(copyOf.constArray, 0, copyOf.constArray.size());
  419|    565|        constArray = newArray;
  420|    565|    }
  421|  7.69k|}
_ZNK7glslang9TVariable5cloneEv:
  424|  7.69k|{
  425|  7.69k|    TVariable *variable = new TVariable(*this);
  426|       |
  427|  7.69k|    return variable;
  428|  7.69k|}
_ZN7glslang9TFunctionC2ERKS0_:
  430|   646k|TFunction::TFunction(const TFunction& copyOf) : TSymbol(copyOf)
  431|   646k|{
  432|  2.13M|    for (unsigned int i = 0; i < copyOf.parameters.size(); ++i) {
  ------------------
  |  Branch (432:30): [True: 1.48M, False: 646k]
  ------------------
  433|  1.48M|        TParameter param{};
  434|  1.48M|        parameters.push_back(param);
  435|  1.48M|        (void)parameters.back().copyParam(copyOf.parameters[i]);
  436|  1.48M|    }
  437|       |
  438|   646k|    extensions = nullptr;
  439|   646k|    if (copyOf.getNumExtensions() > 0)
  ------------------
  |  Branch (439:9): [True: 275k, False: 370k]
  ------------------
  440|   275k|        setExtensions(copyOf.getNumExtensions(), copyOf.getExtensions());
  441|   646k|    returnType.deepCopy(copyOf.returnType);
  442|   646k|    mangledName = copyOf.mangledName;
  443|   646k|    op = copyOf.op;
  444|   646k|    defined = copyOf.defined;
  445|   646k|    prototyped = copyOf.prototyped;
  446|   646k|    implicitThis = copyOf.implicitThis;
  447|   646k|    variadic = copyOf.variadic;
  448|   646k|    illegalImplicitThis = copyOf.illegalImplicitThis;
  449|   646k|    defaultParamCount = copyOf.defaultParamCount;
  450|   646k|    spirvInst = copyOf.spirvInst;
  451|   646k|}
_ZNK7glslang9TFunction5cloneEv:
  454|   646k|{
  455|   646k|    TFunction *function = new TFunction(*this);
  456|       |
  457|   646k|    return function;
  458|   646k|}
_ZNK7glslang17TSymbolTableLevel5cloneEv:
  471|  1.08k|{
  472|  1.08k|    TSymbolTableLevel *symTableLevel = new TSymbolTableLevel();
  473|  1.08k|    symTableLevel->anonId = anonId;
  474|  1.08k|    symTableLevel->thisLevel = thisLevel;
  475|  1.08k|    symTableLevel->retargetedSymbols.clear();
  476|  1.08k|    for (auto &s : retargetedSymbols) {
  ------------------
  |  Branch (476:18): [True: 0, False: 1.08k]
  ------------------
  477|      0|        symTableLevel->retargetedSymbols.push_back({s.first, s.second});
  478|      0|    }
  479|  1.08k|    std::vector<bool> containerCopied(anonId, false);
  480|  1.08k|    tLevel::const_iterator iter;
  481|   655k|    for (iter = level.begin(); iter != level.end(); ++iter) {
  ------------------
  |  Branch (481:32): [True: 653k, False: 1.08k]
  ------------------
  482|   653k|        const TAnonMember* anon = iter->second->getAsAnonMember();
  483|   653k|        if (anon) {
  ------------------
  |  Branch (483:13): [True: 87, False: 653k]
  ------------------
  484|       |            // Insert all the anonymous members of this same container at once,
  485|       |            // avoid inserting the remaining members in the future, once this has been done,
  486|       |            // allowing them to all be part of the same new container.
  487|     87|            if (! containerCopied[anon->getAnonId()]) {
  ------------------
  |  Branch (487:17): [True: 24, False: 63]
  ------------------
  488|     24|                TVariable* container = anon->getAnonContainer().clone();
  489|     24|                container->changeName(NewPoolTString(""));
  490|       |                // insert the container and all its members
  491|     24|                symTableLevel->insert(*container, false);
  492|     24|                containerCopied[anon->getAnonId()] = true;
  493|     24|            }
  494|   653k|        } else {
  495|   653k|            const TString& name = iter->first;
  496|   653k|            auto retargetIter = std::find_if(retargetedSymbols.begin(), retargetedSymbols.end(),
  497|   653k|                                          [&name](const std::pair<TString, TString>& i) { return i.first == name; });
  498|   653k|            if (retargetIter != retargetedSymbols.end())
  ------------------
  |  Branch (498:17): [True: 0, False: 653k]
  ------------------
  499|      0|                continue;
  500|   653k|            symTableLevel->insert(*iter->second->clone(), false);
  501|   653k|        }
  502|   653k|    }
  503|       |    // Now point retargeted symbols to the newly created versions of them
  504|  1.08k|    for (auto &s : retargetedSymbols) {
  ------------------
  |  Branch (504:18): [True: 0, False: 1.08k]
  ------------------
  505|      0|        TSymbol* sym = symTableLevel->find(s.second);
  506|      0|        if (!sym)
  ------------------
  |  Branch (506:13): [True: 0, False: 0]
  ------------------
  507|      0|            continue;
  508|      0|        symTableLevel->insert(s.first, sym);
  509|      0|    }
  510|       |
  511|  1.08k|    return symTableLevel;
  512|  1.08k|}
_ZN7glslang12TSymbolTable9copyTableERKS0_:
  515|  1.08k|{
  516|  1.08k|    assert(adoptedLevels == copyOf.adoptedLevels);
  517|       |
  518|  1.08k|    uniqueId = copyOf.uniqueId;
  519|  1.08k|    noBuiltInRedeclarations = copyOf.noBuiltInRedeclarations;
  520|  1.08k|    separateNameSpaces = copyOf.separateNameSpaces;
  521|  2.17k|    for (unsigned int i = copyOf.adoptedLevels; i < copyOf.table.size(); ++i)
  ------------------
  |  Branch (521:49): [True: 1.08k, False: 1.08k]
  ------------------
  522|  1.08k|        table.push_back(copyOf.table[i]->clone());
  523|  1.08k|}

_ZN7glslang14TParseVersions27initializeExtensionBehaviorEv:
  160|    215|{
  161|    215|    typedef struct {
  162|    215|        const char *const extensionName;
  163|    215|        EShTargetLanguageVersion minSpvVersion;
  164|    215|    } extensionData;
  165|       |
  166|    215|    const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4},
  167|    215|                                   {E_GL_NV_ray_tracing_motion_blur, EShTargetSpv_1_4},
  168|    215|                                   {E_GL_EXT_mesh_shader, EShTargetSpv_1_4},
  169|    215|                                   {E_GL_NV_cooperative_matrix2, EShTargetSpv_1_6},
  170|    215|                                   {E_GL_NV_cooperative_matrix_decode_vector, EShTargetSpv_1_6}
  171|    215|                                 };
  172|       |
  173|  1.29k|    for (size_t ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) {
  ------------------
  |  Branch (173:25): [True: 1.07k, False: 215]
  ------------------
  174|       |        // Add only extensions which require > spv1.0 to save space in map
  175|  1.07k|        if (exts[ii].minSpvVersion > EShTargetSpv_1_0) {
  ------------------
  |  Branch (175:13): [True: 1.07k, False: 0]
  ------------------
  176|  1.07k|            extensionMinSpv[exts[ii].extensionName] = exts[ii].minSpvVersion;
  177|  1.07k|        }
  178|  1.07k|    }
  179|       |
  180|    215|    extensionBehavior[E_GL_OES_texture_3D]                   = EBhDisable;
  181|    215|    extensionBehavior[E_GL_OES_standard_derivatives]         = EBhDisable;
  182|    215|    extensionBehavior[E_GL_EXT_frag_depth]                   = EBhDisable;
  183|    215|    extensionBehavior[E_GL_OES_EGL_image_external]           = EBhDisable;
  184|    215|    extensionBehavior[E_GL_OES_EGL_image_external_essl3]     = EBhDisable;
  185|    215|    extensionBehavior[E_GL_EXT_YUV_target]                   = EBhDisable;
  186|    215|    extensionBehavior[E_GL_EXT_shader_texture_lod]           = EBhDisable;
  187|    215|    extensionBehavior[E_GL_EXT_shadow_samplers]              = EBhDisable;
  188|    215|    extensionBehavior[E_GL_ARB_texture_rectangle]            = EBhDisable;
  189|    215|    extensionBehavior[E_GL_3DL_array_objects]                = EBhDisable;
  190|    215|    extensionBehavior[E_GL_ARB_shading_language_420pack]     = EBhDisable;
  191|    215|    extensionBehavior[E_GL_ARB_texture_gather]               = EBhDisable;
  192|    215|    extensionBehavior[E_GL_ARB_gpu_shader5]                  = EBhDisable;
  193|    215|    extensionBehavior[E_GL_ARB_separate_shader_objects]      = EBhDisable;
  194|    215|    extensionBehavior[E_GL_ARB_compute_shader]               = EBhDisable;
  195|    215|    extensionBehavior[E_GL_ARB_tessellation_shader]          = EBhDisable;
  196|    215|    extensionBehavior[E_GL_ARB_enhanced_layouts]             = EBhDisable;
  197|    215|    extensionBehavior[E_GL_ARB_texture_cube_map_array]       = EBhDisable;
  198|    215|    extensionBehavior[E_GL_ARB_texture_multisample]          = EBhDisable;
  199|    215|    extensionBehavior[E_GL_ARB_shader_texture_lod]           = EBhDisable;
  200|    215|    extensionBehavior[E_GL_ARB_explicit_attrib_location]     = EBhDisable;
  201|    215|    extensionBehavior[E_GL_ARB_explicit_uniform_location]    = EBhDisable;
  202|    215|    extensionBehavior[E_GL_ARB_shader_image_load_store]      = EBhDisable;
  203|    215|    extensionBehavior[E_GL_ARB_shader_atomic_counters]       = EBhDisable;
  204|    215|    extensionBehavior[E_GL_ARB_shader_atomic_counter_ops]    = EBhDisable;
  205|    215|    extensionBehavior[E_GL_ARB_shader_draw_parameters]       = EBhDisable;
  206|    215|    extensionBehavior[E_GL_ARB_shader_group_vote]            = EBhDisable;
  207|    215|    extensionBehavior[E_GL_ARB_derivative_control]           = EBhDisable;
  208|    215|    extensionBehavior[E_GL_ARB_shader_texture_image_samples] = EBhDisable;
  209|    215|    extensionBehavior[E_GL_ARB_viewport_array]               = EBhDisable;
  210|    215|    extensionBehavior[E_GL_ARB_gpu_shader_int64]             = EBhDisable;
  211|    215|    extensionBehavior[E_GL_ARB_gpu_shader_fp64]              = EBhDisable;
  212|    215|    extensionBehavior[E_GL_ARB_shader_ballot]                = EBhDisable;
  213|    215|    extensionBehavior[E_GL_ARB_sparse_texture2]              = EBhDisable;
  214|    215|    extensionBehavior[E_GL_ARB_sparse_texture_clamp]         = EBhDisable;
  215|    215|    extensionBehavior[E_GL_ARB_shader_stencil_export]        = EBhDisable;
  216|       |//    extensionBehavior[E_GL_ARB_cull_distance]                = EBhDisable;    // present for 4.5, but need extension control over block members
  217|    215|    extensionBehavior[E_GL_ARB_post_depth_coverage]          = EBhDisable;
  218|    215|    extensionBehavior[E_GL_ARB_shader_viewport_layer_array]  = EBhDisable;
  219|    215|    extensionBehavior[E_GL_ARB_fragment_shader_interlock]    = EBhDisable;
  220|    215|    extensionBehavior[E_GL_ARB_shader_clock]                 = EBhDisable;
  221|    215|    extensionBehavior[E_GL_ARB_uniform_buffer_object]        = EBhDisable;
  222|    215|    extensionBehavior[E_GL_ARB_sample_shading]               = EBhDisable;
  223|    215|    extensionBehavior[E_GL_ARB_shader_bit_encoding]          = EBhDisable;
  224|    215|    extensionBehavior[E_GL_ARB_shader_image_size]            = EBhDisable;
  225|    215|    extensionBehavior[E_GL_ARB_shader_storage_buffer_object] = EBhDisable;
  226|    215|    extensionBehavior[E_GL_ARB_shading_language_packing]     = EBhDisable;
  227|    215|    extensionBehavior[E_GL_ARB_texture_query_lod]            = EBhDisable;
  228|    215|    extensionBehavior[E_GL_ARB_vertex_attrib_64bit]          = EBhDisable;
  229|    215|    extensionBehavior[E_GL_NV_gpu_shader5]                   = EBhDisable;
  230|    215|    extensionBehavior[E_GL_ARB_draw_instanced]               = EBhDisable;
  231|    215|    extensionBehavior[E_GL_ARB_bindless_texture]             = EBhDisable;
  232|    215|    extensionBehavior[E_GL_ARB_fragment_coord_conventions]   = EBhDisable;
  233|    215|    extensionBehavior[E_GL_ARB_conservative_depth]           = EBhDisable;
  234|       |
  235|       |
  236|    215|    extensionBehavior[E_GL_KHR_shader_subgroup_basic]            = EBhDisable;
  237|    215|    extensionBehavior[E_GL_KHR_shader_subgroup_vote]             = EBhDisable;
  238|    215|    extensionBehavior[E_GL_KHR_shader_subgroup_arithmetic]       = EBhDisable;
  239|    215|    extensionBehavior[E_GL_KHR_shader_subgroup_ballot]           = EBhDisable;
  240|    215|    extensionBehavior[E_GL_KHR_shader_subgroup_shuffle]          = EBhDisable;
  241|    215|    extensionBehavior[E_GL_KHR_shader_subgroup_shuffle_relative] = EBhDisable;
  242|    215|    extensionBehavior[E_GL_KHR_shader_subgroup_rotate]           = EBhDisable;
  243|    215|    extensionBehavior[E_GL_KHR_shader_subgroup_clustered]        = EBhDisable;
  244|    215|    extensionBehavior[E_GL_KHR_shader_subgroup_quad]             = EBhDisable;
  245|    215|    extensionBehavior[E_GL_KHR_memory_scope_semantics]           = EBhDisable;
  246|       |
  247|    215|    extensionBehavior[E_GL_EXT_shader_atomic_int64]              = EBhDisable;
  248|       |
  249|    215|    extensionBehavior[E_GL_EXT_shader_non_constant_global_initializers] = EBhDisable;
  250|    215|    extensionBehavior[E_GL_EXT_shader_image_load_formatted]             = EBhDisable;
  251|    215|    extensionBehavior[E_GL_EXT_post_depth_coverage]                     = EBhDisable;
  252|    215|    extensionBehavior[E_GL_EXT_control_flow_attributes]                 = EBhDisable;
  253|    215|    extensionBehavior[E_GL_EXT_nonuniform_qualifier]                    = EBhDisable;
  254|    215|    extensionBehavior[E_GL_EXT_samplerless_texture_functions]           = EBhDisable;
  255|    215|    extensionBehavior[E_GL_EXT_scalar_block_layout]                     = EBhDisable;
  256|    215|    extensionBehavior[E_GL_EXT_fragment_invocation_density]             = EBhDisable;
  257|    215|    extensionBehavior[E_GL_EXT_buffer_reference]                        = EBhDisable;
  258|    215|    extensionBehavior[E_GL_EXT_buffer_reference2]                       = EBhDisable;
  259|    215|    extensionBehavior[E_GL_EXT_buffer_reference_uvec2]                  = EBhDisable;
  260|    215|    extensionBehavior[E_GL_EXT_demote_to_helper_invocation]             = EBhDisable;
  261|    215|    extensionBehavior[E_GL_EXT_debug_printf]                            = EBhDisable;
  262|       |
  263|    215|    extensionBehavior[E_GL_EXT_shader_16bit_storage]                    = EBhDisable;
  264|    215|    extensionBehavior[E_GL_EXT_shader_8bit_storage]                     = EBhDisable;
  265|    215|    extensionBehavior[E_GL_EXT_subgroup_uniform_control_flow]           = EBhDisable;
  266|    215|    extensionBehavior[E_GL_EXT_maximal_reconvergence]                   = EBhDisable;
  267|       |
  268|    215|    extensionBehavior[E_GL_EXT_fragment_shader_barycentric]             = EBhDisable;
  269|    215|    extensionBehavior[E_GL_EXT_expect_assume]                           = EBhDisable;
  270|       |
  271|    215|    extensionBehavior[E_GL_EXT_control_flow_attributes2]                = EBhDisable;
  272|    215|    extensionBehavior[E_GL_EXT_spec_constant_composites]                = EBhDisable;
  273|    215|    extensionBehavior[E_GL_EXT_abort]                                   = EBhDisable;
  274|       |
  275|    215|    extensionBehavior[E_GL_KHR_cooperative_matrix]                      = EBhDisable;
  276|    215|    extensionBehavior[E_GL_NV_cooperative_vector]                       = EBhDisable;
  277|       |
  278|       |    // #line and #include
  279|    215|    extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive]          = EBhDisable;
  280|    215|    extensionBehavior[E_GL_GOOGLE_include_directive]                 = EBhDisable;
  281|    215|    extensionBehavior[E_GL_ARB_shading_language_include]             = EBhDisable;
  282|       |
  283|    215|    extensionBehavior[E_GL_AMD_shader_ballot]                        = EBhDisable;
  284|    215|    extensionBehavior[E_GL_AMD_shader_trinary_minmax]                = EBhDisable;
  285|    215|    extensionBehavior[E_GL_AMD_shader_explicit_vertex_parameter]     = EBhDisable;
  286|    215|    extensionBehavior[E_GL_AMD_gcn_shader]                           = EBhDisable;
  287|    215|    extensionBehavior[E_GL_AMD_gpu_shader_half_float]                = EBhDisable;
  288|    215|    extensionBehavior[E_GL_AMD_texture_gather_bias_lod]              = EBhDisable;
  289|    215|    extensionBehavior[E_GL_AMD_gpu_shader_int16]                     = EBhDisable;
  290|    215|    extensionBehavior[E_GL_AMD_shader_image_load_store_lod]          = EBhDisable;
  291|    215|    extensionBehavior[E_GL_AMD_shader_fragment_mask]                 = EBhDisable;
  292|    215|    extensionBehavior[E_GL_AMD_gpu_shader_half_float_fetch]          = EBhDisable;
  293|    215|    extensionBehavior[E_GL_AMD_shader_early_and_late_fragment_tests] = EBhDisable;
  294|       |
  295|    215|    extensionBehavior[E_GL_INTEL_shader_integer_functions2]          = EBhDisable;
  296|       |
  297|    215|    extensionBehavior[E_GL_NV_sample_mask_override_coverage]         = EBhDisable;
  298|    215|    extensionBehavior[E_SPV_NV_geometry_shader_passthrough]          = EBhDisable;
  299|    215|    extensionBehavior[E_GL_NV_viewport_array2]                       = EBhDisable;
  300|    215|    extensionBehavior[E_GL_NV_stereo_view_rendering]                 = EBhDisable;
  301|    215|    extensionBehavior[E_GL_NVX_multiview_per_view_attributes]        = EBhDisable;
  302|    215|    extensionBehavior[E_GL_NV_shader_atomic_int64]                   = EBhDisable;
  303|    215|    extensionBehavior[E_GL_NV_conservative_raster_underestimation]   = EBhDisable;
  304|    215|    extensionBehavior[E_GL_NV_shader_noperspective_interpolation]    = EBhDisable;
  305|    215|    extensionBehavior[E_GL_NV_shader_subgroup_partitioned]           = EBhDisable;
  306|    215|    extensionBehavior[E_GL_NV_shading_rate_image]                    = EBhDisable;
  307|    215|    extensionBehavior[E_GL_NV_ray_tracing]                           = EBhDisable;
  308|    215|    extensionBehavior[E_GL_NV_ray_tracing_motion_blur]               = EBhDisable;
  309|    215|    extensionBehavior[E_GL_NV_fragment_shader_barycentric]           = EBhDisable;
  310|    215|    extensionBehavior[E_GL_KHR_compute_shader_derivatives]           = EBhDisable;
  311|    215|    extensionBehavior[E_GL_NV_compute_shader_derivatives]            = EBhDisable;
  312|    215|    extensionBehavior[E_GL_NV_shader_texture_footprint]              = EBhDisable;
  313|    215|    extensionBehavior[E_GL_NV_mesh_shader]                           = EBhDisable;
  314|    215|    extensionBehavior[E_GL_NV_cooperative_matrix]                    = EBhDisable;
  315|    215|    extensionBehavior[E_GL_NV_shader_sm_builtins]                    = EBhDisable;
  316|    215|    extensionBehavior[E_GL_NV_integer_cooperative_matrix]            = EBhDisable;
  317|    215|    extensionBehavior[E_GL_NV_shader_invocation_reorder]             = EBhDisable;
  318|    215|    extensionBehavior[E_GL_NV_displacement_micromap]                 = EBhDisable;
  319|    215|    extensionBehavior[E_GL_NV_shader_atomic_fp16_vector]             = EBhDisable;
  320|    215|    extensionBehavior[E_GL_NV_cooperative_matrix2]                   = EBhDisable;
  321|    215|    extensionBehavior[E_GL_NV_cooperative_matrix_decode_vector]      = EBhDisable;
  322|    215|    extensionBehavior[E_GL_NV_cluster_acceleration_structure]        = EBhDisable;
  323|    215|    extensionBehavior[E_GL_NV_linear_swept_spheres]                  = EBhDisable;
  324|    215|    extensionBehavior[E_GL_NV_push_constant_bank]                    = EBhDisable;
  325|    215|    extensionBehavior[E_GL_NV_explicit_typecast]                     = EBhDisable;
  326|       |
  327|       |    // ARM
  328|    215|    extensionBehavior[E_GL_ARM_shader_core_builtins]                 = EBhDisable;
  329|    215|    extensionBehavior[E_GL_ARM_tensors]                              = EBhDisable;
  330|    215|    extensionBehavior[E_GL_ARM_tensors_bfloat16]                     = EBhDisable;
  331|    215|    extensionBehavior[E_GL_ARM_tensors_float_e5m2]                   = EBhDisable;
  332|    215|    extensionBehavior[E_GL_ARM_tensors_float_e4m3]                   = EBhDisable;
  333|       |
  334|       |    // QCOM
  335|    215|    extensionBehavior[E_GL_QCOM_image_processing]                    = EBhDisable;
  336|    215|    extensionBehavior[E_GL_QCOM_image_processing2]                   = EBhDisable;
  337|    215|    extensionBehavior[E_GL_QCOM_tile_shading]                        = EBhDisable;
  338|    215|    extensionBehavior[E_GL_QCOM_cooperative_matrix_conversion]       = EBhDisable;
  339|       |
  340|       |    // AEP
  341|    215|    extensionBehavior[E_GL_ANDROID_extension_pack_es31a]             = EBhDisable;
  342|    215|    extensionBehavior[E_GL_KHR_blend_equation_advanced]              = EBhDisable;
  343|    215|    extensionBehavior[E_GL_OES_sample_variables]                     = EBhDisable;
  344|    215|    extensionBehavior[E_GL_OES_shader_image_atomic]                  = EBhDisable;
  345|    215|    extensionBehavior[E_GL_OES_shader_multisample_interpolation]     = EBhDisable;
  346|    215|    extensionBehavior[E_GL_OES_texture_storage_multisample_2d_array] = EBhDisable;
  347|    215|    extensionBehavior[E_GL_EXT_geometry_shader]                      = EBhDisable;
  348|    215|    extensionBehavior[E_GL_EXT_geometry_point_size]                  = EBhDisable;
  349|    215|    extensionBehavior[E_GL_EXT_gpu_shader5]                          = EBhDisable;
  350|    215|    extensionBehavior[E_GL_EXT_primitive_bounding_box]               = EBhDisable;
  351|    215|    extensionBehavior[E_GL_EXT_shader_io_blocks]                     = EBhDisable;
  352|    215|    extensionBehavior[E_GL_EXT_tessellation_shader]                  = EBhDisable;
  353|    215|    extensionBehavior[E_GL_EXT_tessellation_point_size]              = EBhDisable;
  354|    215|    extensionBehavior[E_GL_EXT_texture_buffer]                       = EBhDisable;
  355|    215|    extensionBehavior[E_GL_EXT_texture_cube_map_array]               = EBhDisable;
  356|    215|    extensionBehavior[E_GL_EXT_null_initializer]                     = EBhDisable;
  357|    215|    extensionBehavior[E_GL_EXT_descriptor_heap]                      = EBhDisable;
  358|       |
  359|       |    // OES matching AEP
  360|    215|    extensionBehavior[E_GL_OES_geometry_shader]          = EBhDisable;
  361|    215|    extensionBehavior[E_GL_OES_geometry_point_size]      = EBhDisable;
  362|    215|    extensionBehavior[E_GL_OES_gpu_shader5]              = EBhDisable;
  363|    215|    extensionBehavior[E_GL_OES_primitive_bounding_box]   = EBhDisable;
  364|    215|    extensionBehavior[E_GL_OES_shader_io_blocks]         = EBhDisable;
  365|    215|    extensionBehavior[E_GL_OES_tessellation_shader]      = EBhDisable;
  366|    215|    extensionBehavior[E_GL_OES_tessellation_point_size]  = EBhDisable;
  367|    215|    extensionBehavior[E_GL_OES_texture_buffer]           = EBhDisable;
  368|    215|    extensionBehavior[E_GL_OES_texture_cube_map_array]   = EBhDisable;
  369|    215|    extensionBehavior[E_GL_EXT_shader_integer_mix]       = EBhDisable;
  370|       |
  371|       |    // EXT extensions
  372|    215|    extensionBehavior[E_GL_EXT_device_group]                = EBhDisable;
  373|    215|    extensionBehavior[E_GL_EXT_multiview]                   = EBhDisable;
  374|    215|    extensionBehavior[E_GL_EXT_shader_realtime_clock]       = EBhDisable;
  375|    215|    extensionBehavior[E_GL_EXT_ray_tracing]                 = EBhDisable;
  376|    215|    extensionBehavior[E_GL_EXT_ray_query]                   = EBhDisable;
  377|    215|    extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable;
  378|    215|    extensionBehavior[E_GL_EXT_ray_cull_mask]               = EBhDisable;
  379|    215|    extensionBehavior[E_GL_EXT_blend_func_extended]         = EBhDisable;
  380|    215|    extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable;
  381|    215|    extensionBehavior[E_GL_EXT_fragment_shading_rate]       = EBhDisable;
  382|    215|    extensionBehavior[E_GL_EXT_shader_image_int64]          = EBhDisable;
  383|    215|    extensionBehavior[E_GL_EXT_terminate_invocation]        = EBhDisable;
  384|    215|    extensionBehavior[E_GL_EXT_shared_memory_block]         = EBhDisable;
  385|    215|    extensionBehavior[E_GL_EXT_spirv_intrinsics]            = EBhDisable;
  386|    215|    extensionBehavior[E_GL_EXT_mesh_shader]                 = EBhDisable;
  387|    215|    extensionBehavior[E_GL_EXT_opacity_micromap]            = EBhDisable;
  388|    215|    extensionBehavior[E_GL_EXT_shader_quad_control]         = EBhDisable;
  389|    215|    extensionBehavior[E_GL_EXT_ray_tracing_position_fetch]  = EBhDisable;
  390|    215|    extensionBehavior[E_GL_EXT_shader_tile_image]           = EBhDisable;
  391|    215|    extensionBehavior[E_GL_EXT_texture_shadow_lod]          = EBhDisable;
  392|    215|    extensionBehavior[E_GL_EXT_draw_instanced]              = EBhDisable;
  393|    215|    extensionBehavior[E_GL_EXT_texture_array]               = EBhDisable;
  394|    215|    extensionBehavior[E_GL_EXT_texture_offset_non_const]    = EBhDisable;
  395|    215|    extensionBehavior[E_GL_EXT_nontemporal_keyword]         = EBhDisable;
  396|    215|    extensionBehavior[E_GL_EXT_bfloat16]                    = EBhDisable;
  397|    215|    extensionBehavior[E_GL_EXT_float_e4m3]                  = EBhDisable;
  398|    215|    extensionBehavior[E_GL_EXT_float_e5m2]                  = EBhDisable;
  399|    215|    extensionBehavior[E_GL_EXT_uniform_buffer_unsized_array] = EBhDisable;
  400|    215|    extensionBehavior[E_GL_EXT_shader_64bit_indexing]       = EBhDisable;
  401|    215|    extensionBehavior[E_GL_EXT_conservative_depth]          = EBhDisable;
  402|    215|    extensionBehavior[E_GL_EXT_long_vector]                 = EBhDisable;
  403|       |
  404|       |    // OVR extensions
  405|    215|    extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
  406|    215|    extensionBehavior[E_GL_OVR_multiview2]               = EBhDisable;
  407|       |
  408|       |    // explicit types
  409|    215|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types]         = EBhDisable;
  410|    215|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_int8]    = EBhDisable;
  411|    215|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_int16]   = EBhDisable;
  412|    215|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_int32]   = EBhDisable;
  413|    215|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_int64]   = EBhDisable;
  414|    215|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float16] = EBhDisable;
  415|    215|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float32] = EBhDisable;
  416|    215|    extensionBehavior[E_GL_EXT_shader_explicit_arithmetic_types_float64] = EBhDisable;
  417|       |
  418|       |    // subgroup extended types
  419|    215|    extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int8]    = EBhDisable;
  420|    215|    extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int16]   = EBhDisable;
  421|    215|    extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int64]   = EBhDisable;
  422|    215|    extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_float16] = EBhDisable;
  423|    215|    extensionBehavior[E_GL_EXT_shader_atomic_float]                    = EBhDisable;
  424|    215|    extensionBehavior[E_GL_EXT_shader_atomic_float2]                   = EBhDisable;
  425|       |
  426|    215|    extensionBehavior[E_GL_EXT_integer_dot_product]                    = EBhDisable;
  427|       |
  428|    215|    extensionBehavior[E_GL_EXT_shader_invocation_reorder]              = EBhDisable;
  429|       |
  430|       |    // Record extensions not for spv.
  431|    215|    spvUnsupportedExt.push_back(E_GL_ARB_bindless_texture);
  432|    215|}
_ZN7glslang14TParseVersions11getPreambleERNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
  437|    215|{
  438|    215|    if (isEsProfile()) {
  ------------------
  |  Branch (438:9): [True: 0, False: 215]
  ------------------
  439|      0|        preamble =
  440|      0|            "#define GL_ES 1\n"
  441|      0|            "#define GL_FRAGMENT_PRECISION_HIGH 1\n"
  442|      0|            "#define GL_OES_texture_3D 1\n"
  443|      0|            "#define GL_OES_standard_derivatives 1\n"
  444|      0|            "#define GL_EXT_frag_depth 1\n"
  445|      0|            "#define GL_OES_EGL_image_external 1\n"
  446|      0|            "#define GL_OES_EGL_image_external_essl3 1\n"
  447|      0|            "#define GL_EXT_YUV_target 1\n"
  448|      0|            "#define GL_EXT_shader_texture_lod 1\n"
  449|      0|            "#define GL_EXT_shadow_samplers 1\n"
  450|      0|            "#define GL_EXT_fragment_shading_rate 1\n"
  451|      0|            "#define GL_EXT_conservative_depth 1\n"
  452|       |
  453|       |            // AEP
  454|      0|            "#define GL_ANDROID_extension_pack_es31a 1\n"
  455|      0|            "#define GL_OES_sample_variables 1\n"
  456|      0|            "#define GL_OES_shader_image_atomic 1\n"
  457|      0|            "#define GL_OES_shader_multisample_interpolation 1\n"
  458|      0|            "#define GL_OES_texture_storage_multisample_2d_array 1\n"
  459|      0|            "#define GL_EXT_geometry_shader 1\n"
  460|      0|            "#define GL_EXT_geometry_point_size 1\n"
  461|      0|            "#define GL_EXT_gpu_shader5 1\n"
  462|      0|            "#define GL_EXT_primitive_bounding_box 1\n"
  463|      0|            "#define GL_EXT_shader_io_blocks 1\n"
  464|      0|            "#define GL_EXT_tessellation_shader 1\n"
  465|      0|            "#define GL_EXT_tessellation_point_size 1\n"
  466|      0|            "#define GL_EXT_texture_buffer 1\n"
  467|      0|            "#define GL_EXT_texture_cube_map_array 1\n"
  468|      0|            "#define GL_EXT_shader_implicit_conversions 1\n"
  469|      0|            "#define GL_EXT_shader_integer_mix 1\n"
  470|      0|            "#define GL_EXT_blend_func_extended 1\n"
  471|      0|            "#define GL_EXT_descriptor_heap 1\n"
  472|       |
  473|       |            // OES matching AEP
  474|      0|            "#define GL_OES_geometry_shader 1\n"
  475|      0|            "#define GL_OES_geometry_point_size 1\n"
  476|      0|            "#define GL_OES_gpu_shader5 1\n"
  477|      0|            "#define GL_OES_primitive_bounding_box 1\n"
  478|      0|            "#define GL_OES_shader_io_blocks 1\n"
  479|      0|            "#define GL_OES_tessellation_shader 1\n"
  480|      0|            "#define GL_OES_tessellation_point_size 1\n"
  481|      0|            "#define GL_OES_texture_buffer 1\n"
  482|      0|            "#define GL_OES_texture_cube_map_array 1\n"
  483|      0|            "#define GL_EXT_shader_non_constant_global_initializers 1\n"
  484|       |
  485|      0|            "#define GL_QCOM_image_processing 1\n"
  486|      0|            "#define GL_QCOM_image_processing2 1\n"
  487|      0|            "#define GL_QCOM_tile_shading 1\n"
  488|      0|            "#define GL_QCOM_cooperative_matrix_conversion 1\n"
  489|      0|            ;
  490|       |
  491|      0|            if (version >= 300) {
  ------------------
  |  Branch (491:17): [True: 0, False: 0]
  ------------------
  492|      0|                preamble += "#define GL_NV_shader_noperspective_interpolation 1\n";
  493|      0|            }
  494|      0|            if (version >= 310) {
  ------------------
  |  Branch (494:17): [True: 0, False: 0]
  ------------------
  495|      0|                preamble += "#define GL_EXT_null_initializer 1\n";
  496|      0|                preamble += "#define GL_EXT_subgroup_uniform_control_flow 1\n";
  497|      0|                preamble += "#define GL_EXT_maximal_reconvergence 1\n";
  498|      0|            }
  499|       |
  500|    215|    } else { // !isEsProfile()
  501|    215|        preamble =
  502|    215|            "#define GL_ARB_texture_rectangle 1\n"
  503|    215|            "#define GL_ARB_shading_language_420pack 1\n"
  504|    215|            "#define GL_ARB_texture_gather 1\n"
  505|    215|            "#define GL_ARB_gpu_shader5 1\n"
  506|    215|            "#define GL_ARB_separate_shader_objects 1\n"
  507|    215|            "#define GL_ARB_compute_shader 1\n"
  508|    215|            "#define GL_ARB_tessellation_shader 1\n"
  509|    215|            "#define GL_ARB_enhanced_layouts 1\n"
  510|    215|            "#define GL_ARB_texture_cube_map_array 1\n"
  511|    215|            "#define GL_ARB_texture_multisample 1\n"
  512|    215|            "#define GL_ARB_shader_texture_lod 1\n"
  513|    215|            "#define GL_ARB_explicit_attrib_location 1\n"
  514|    215|            "#define GL_ARB_explicit_uniform_location 1\n"
  515|    215|            "#define GL_ARB_shader_image_load_store 1\n"
  516|    215|            "#define GL_ARB_shader_atomic_counters 1\n"
  517|    215|            "#define GL_ARB_shader_draw_parameters 1\n"
  518|    215|            "#define GL_ARB_shader_group_vote 1\n"
  519|    215|            "#define GL_ARB_derivative_control 1\n"
  520|    215|            "#define GL_ARB_shader_texture_image_samples 1\n"
  521|    215|            "#define GL_ARB_viewport_array 1\n"
  522|    215|            "#define GL_ARB_gpu_shader_int64 1\n"
  523|    215|            "#define GL_ARB_gpu_shader_fp64 1\n"
  524|    215|            "#define GL_ARB_shader_ballot 1\n"
  525|    215|            "#define GL_ARB_sparse_texture2 1\n"
  526|    215|            "#define GL_ARB_sparse_texture_clamp 1\n"
  527|    215|            "#define GL_ARB_shader_stencil_export 1\n"
  528|    215|            "#define GL_ARB_sample_shading 1\n"
  529|    215|            "#define GL_ARB_shader_image_size 1\n"
  530|    215|            "#define GL_ARB_shading_language_packing 1\n"
  531|       |//            "#define GL_ARB_cull_distance 1\n"    // present for 4.5, but need extension control over block members
  532|    215|            "#define GL_ARB_post_depth_coverage 1\n"
  533|    215|            "#define GL_ARB_fragment_shader_interlock 1\n"
  534|    215|            "#define GL_ARB_uniform_buffer_object 1\n"
  535|    215|            "#define GL_ARB_shader_bit_encoding 1\n"
  536|    215|            "#define GL_ARB_shader_storage_buffer_object 1\n"
  537|    215|            "#define GL_ARB_texture_query_lod 1\n"
  538|    215|            "#define GL_ARB_vertex_attrib_64bit 1\n"
  539|    215|            "#define GL_NV_gpu_shader5 1\n"
  540|    215|            "#define GL_ARB_draw_instanced 1\n"
  541|    215|            "#define GL_ARB_fragment_coord_conventions 1\n"
  542|    215|            "#define GL_ARB_conservative_depth 1\n"
  543|       |
  544|    215|            "#define GL_EXT_shader_non_constant_global_initializers 1\n"
  545|    215|            "#define GL_EXT_shader_image_load_formatted 1\n"
  546|    215|            "#define GL_EXT_post_depth_coverage 1\n"
  547|    215|            "#define GL_EXT_control_flow_attributes 1\n"
  548|    215|            "#define GL_EXT_nonuniform_qualifier 1\n"
  549|    215|            "#define GL_EXT_shader_16bit_storage 1\n"
  550|    215|            "#define GL_EXT_shader_8bit_storage 1\n"
  551|    215|            "#define GL_EXT_samplerless_texture_functions 1\n"
  552|    215|            "#define GL_EXT_scalar_block_layout 1\n"
  553|    215|            "#define GL_EXT_fragment_invocation_density 1\n"
  554|    215|            "#define GL_EXT_buffer_reference 1\n"
  555|    215|            "#define GL_EXT_buffer_reference2 1\n"
  556|    215|            "#define GL_EXT_buffer_reference_uvec2 1\n"
  557|    215|            "#define GL_EXT_demote_to_helper_invocation 1\n"
  558|    215|            "#define GL_EXT_debug_printf 1\n"
  559|    215|            "#define GL_EXT_fragment_shading_rate 1\n"
  560|    215|            "#define GL_EXT_shared_memory_block 1\n"
  561|    215|            "#define GL_EXT_shader_integer_mix 1\n"
  562|    215|            "#define GL_EXT_spec_constant_composites 1\n"
  563|    215|            "#define GL_EXT_abort 1\n"
  564|       |
  565|       |            // GL_KHR_shader_subgroup
  566|    215|            "#define GL_KHR_shader_subgroup_basic 1\n"
  567|    215|            "#define GL_KHR_shader_subgroup_vote 1\n"
  568|    215|            "#define GL_KHR_shader_subgroup_arithmetic 1\n"
  569|    215|            "#define GL_KHR_shader_subgroup_ballot 1\n"
  570|    215|            "#define GL_KHR_shader_subgroup_shuffle 1\n"
  571|    215|            "#define GL_KHR_shader_subgroup_shuffle_relative 1\n"
  572|    215|            "#define GL_KHR_shader_subgroup_clustered 1\n"
  573|    215|            "#define GL_KHR_shader_subgroup_quad 1\n"
  574|       |
  575|    215|            "#define GL_KHR_cooperative_matrix 1\n"
  576|       |
  577|    215|            "#define GL_EXT_shader_image_int64 1\n"
  578|    215|            "#define GL_EXT_shader_atomic_int64 1\n"
  579|    215|            "#define GL_EXT_shader_realtime_clock 1\n"
  580|    215|            "#define GL_EXT_ray_tracing 1\n"
  581|    215|            "#define GL_EXT_ray_query 1\n"
  582|    215|            "#define GL_EXT_ray_flags_primitive_culling 1\n"
  583|    215|            "#define GL_EXT_ray_cull_mask 1\n"
  584|    215|            "#define GL_EXT_ray_tracing_position_fetch 1\n"
  585|    215|            "#define GL_EXT_spirv_intrinsics 1\n"
  586|    215|            "#define GL_EXT_mesh_shader 1\n"
  587|       |
  588|    215|            "#define GL_AMD_shader_ballot 1\n"
  589|    215|            "#define GL_AMD_shader_trinary_minmax 1\n"
  590|    215|            "#define GL_AMD_shader_explicit_vertex_parameter 1\n"
  591|    215|            "#define GL_AMD_gcn_shader 1\n"
  592|    215|            "#define GL_AMD_gpu_shader_half_float 1\n"
  593|    215|            "#define GL_AMD_texture_gather_bias_lod 1\n"
  594|    215|            "#define GL_AMD_gpu_shader_int16 1\n"
  595|    215|            "#define GL_AMD_shader_image_load_store_lod 1\n"
  596|    215|            "#define GL_AMD_shader_fragment_mask 1\n"
  597|    215|            "#define GL_AMD_gpu_shader_half_float_fetch 1\n"
  598|       |
  599|    215|            "#define GL_INTEL_shader_integer_functions2 1\n"
  600|       |
  601|    215|            "#define GL_NV_sample_mask_override_coverage 1\n"
  602|    215|            "#define GL_NV_geometry_shader_passthrough 1\n"
  603|    215|            "#define GL_NV_viewport_array2 1\n"
  604|    215|            "#define GL_NV_shader_atomic_int64 1\n"
  605|    215|            "#define GL_NV_conservative_raster_underestimation 1\n"
  606|    215|            "#define GL_NV_shader_subgroup_partitioned 1\n"
  607|    215|            "#define GL_NV_shading_rate_image 1\n"
  608|    215|            "#define GL_NV_ray_tracing 1\n"
  609|    215|            "#define GL_NV_ray_tracing_motion_blur 1\n"
  610|    215|            "#define GL_NV_fragment_shader_barycentric 1\n"
  611|    215|            "#define GL_KHR_compute_shader_derivatives 1\n"
  612|    215|            "#define GL_NV_compute_shader_derivatives 1\n"
  613|    215|            "#define GL_NV_shader_texture_footprint 1\n"
  614|    215|            "#define GL_NV_mesh_shader 1\n"
  615|    215|            "#define GL_NV_cooperative_matrix 1\n"
  616|    215|            "#define GL_NV_integer_cooperative_matrix 1\n"
  617|    215|            "#define GL_NV_shader_invocation_reorder 1\n"
  618|    215|            "#define GL_NV_cooperative_matrix2 1\n"
  619|    215|            "#define GL_NV_cooperative_matrix_decode_vector 1\n"
  620|    215|            "#define GL_NV_explicit_typecast 1\n"
  621|       |
  622|    215|            "#define GL_QCOM_image_processing 1\n"
  623|    215|            "#define GL_QCOM_image_processing2 1\n"
  624|    215|            "#define GL_QCOM_tile_shading 1\n"
  625|    215|            "#define GL_QCOM_cooperative_matrix_conversion 1\n"
  626|       |
  627|    215|            "#define GL_EXT_shader_explicit_arithmetic_types 1\n"
  628|    215|            "#define GL_EXT_shader_explicit_arithmetic_types_int8 1\n"
  629|    215|            "#define GL_EXT_shader_explicit_arithmetic_types_int16 1\n"
  630|    215|            "#define GL_EXT_shader_explicit_arithmetic_types_int32 1\n"
  631|    215|            "#define GL_EXT_shader_explicit_arithmetic_types_int64 1\n"
  632|    215|            "#define GL_EXT_shader_explicit_arithmetic_types_float16 1\n"
  633|    215|            "#define GL_EXT_shader_explicit_arithmetic_types_float32 1\n"
  634|    215|            "#define GL_EXT_shader_explicit_arithmetic_types_float64 1\n"
  635|       |
  636|    215|            "#define GL_EXT_shader_subgroup_extended_types_int8 1\n"
  637|    215|            "#define GL_EXT_shader_subgroup_extended_types_int16 1\n"
  638|    215|            "#define GL_EXT_shader_subgroup_extended_types_int64 1\n"
  639|    215|            "#define GL_EXT_shader_subgroup_extended_types_float16 1\n"
  640|       |
  641|    215|            "#define GL_EXT_shader_atomic_float 1\n"
  642|    215|            "#define GL_EXT_shader_atomic_float2 1\n"
  643|       |
  644|    215|            "#define GL_EXT_fragment_shader_barycentric 1\n"
  645|    215|            "#define GL_EXT_shader_quad_control 1\n"
  646|    215|            "#define GL_EXT_texture_array 1\n"
  647|       |
  648|    215|            "#define GL_EXT_control_flow_attributes2 1\n"
  649|       |
  650|    215|            "#define GL_EXT_integer_dot_product 1\n"
  651|    215|            "#define GL_EXT_bfloat16 1\n"
  652|    215|            "#define GL_EXT_float_e5m2 1\n"
  653|    215|            "#define GL_EXT_float_e4m3 1\n"
  654|    215|            "#define GL_EXT_uniform_buffer_unsized_array 1\n"
  655|    215|            "#define GL_EXT_shader_64bit_indexing 1\n"
  656|       |
  657|    215|            "#define GL_EXT_shader_invocation_reorder 1\n"
  658|    215|            "#define GL_EXT_descriptor_heap 1\n"
  659|    215|            ;
  660|       |
  661|    215|        if (spvVersion.spv == 0) {
  ------------------
  |  Branch (661:13): [True: 0, False: 215]
  ------------------
  662|      0|            preamble += "#define GL_ARB_bindless_texture 1\n";
  663|      0|        }
  664|       |
  665|    215|        if (version >= 150) {
  ------------------
  |  Branch (665:13): [True: 129, False: 86]
  ------------------
  666|       |            // define GL_core_profile and GL_compatibility_profile
  667|    129|            preamble += "#define GL_core_profile 1\n";
  668|       |
  669|    129|            if (profile == ECompatibilityProfile)
  ------------------
  |  Branch (669:17): [True: 0, False: 129]
  ------------------
  670|      0|                preamble += "#define GL_compatibility_profile 1\n";
  671|    129|        }
  672|    215|        if (version >= 140) {
  ------------------
  |  Branch (672:13): [True: 215, False: 0]
  ------------------
  673|    215|            preamble += "#define GL_EXT_null_initializer 1\n";
  674|    215|            preamble += "#define GL_EXT_subgroup_uniform_control_flow 1\n";
  675|    215|            preamble += "#define GL_EXT_maximal_reconvergence 1\n";
  676|    215|        }
  677|    215|        if (version >= 130) {
  ------------------
  |  Branch (677:13): [True: 215, False: 0]
  ------------------
  678|    215|            preamble +="#define GL_FRAGMENT_PRECISION_HIGH 1\n";
  679|    215|        }
  680|       |
  681|    215|        if (version >= 460) {
  ------------------
  |  Branch (681:13): [True: 115, False: 100]
  ------------------
  682|    115|            preamble +=
  683|    115|                "#define GL_ARM_tensors 1\n"
  684|    115|                "#define GL_ARM_tensors_bfloat16 1\n"
  685|    115|                "#define GL_ARM_tensors_float_e5m2 1\n"
  686|    115|                "#define GL_ARM_tensors_float_e4m3 1\n"
  687|    115|                ;
  688|    115|        }
  689|    215|    }
  690|       |
  691|    215|    if ((!isEsProfile() && version >= 460) ||
  ------------------
  |  Branch (691:10): [True: 215, False: 0]
  |  Branch (691:28): [True: 115, False: 100]
  ------------------
  692|    115|        (isEsProfile() && version >= 320)) {
  ------------------
  |  Branch (692:10): [True: 0, False: 100]
  |  Branch (692:27): [True: 0, False: 0]
  ------------------
  693|    115|        preamble += "#define GL_EXT_nontemporal_keyword 1\n";
  694|    115|    }
  695|       |
  696|    215|    if ((!isEsProfile() && version >= 140) ||
  ------------------
  |  Branch (696:10): [True: 215, False: 0]
  |  Branch (696:28): [True: 215, False: 0]
  ------------------
  697|    215|        (isEsProfile() && version >= 310)) {
  ------------------
  |  Branch (697:10): [True: 0, False: 0]
  |  Branch (697:27): [True: 0, False: 0]
  ------------------
  698|    215|        preamble +=
  699|    215|            "#define GL_EXT_device_group 1\n"
  700|    215|            "#define GL_EXT_multiview 1\n"
  701|    215|            "#define GL_NV_shader_sm_builtins 1\n"
  702|    215|            ;
  703|    215|    }
  704|       |
  705|    215|    if ((!isEsProfile() && version >= 130) ||
  ------------------
  |  Branch (705:10): [True: 215, False: 0]
  |  Branch (705:28): [True: 215, False: 0]
  ------------------
  706|    215|        (isEsProfile() && version >= 300)) {
  ------------------
  |  Branch (706:10): [True: 0, False: 0]
  |  Branch (706:27): [True: 0, False: 0]
  ------------------
  707|    215|        preamble += "#define GL_EXT_texture_offset_non_const 1\n";
  708|    215|    }
  709|       |
  710|    215|    if (version >= 300 /* both ES and non-ES */) {
  ------------------
  |  Branch (710:9): [True: 128, False: 87]
  ------------------
  711|    128|        preamble +=
  712|    128|            "#define GL_OVR_multiview 1\n"
  713|    128|            "#define GL_OVR_multiview2 1\n"
  714|    128|            ;
  715|    128|    }
  716|       |
  717|       |    // #line and #include
  718|    215|    preamble +=
  719|    215|            "#define GL_GOOGLE_cpp_style_line_directive 1\n"
  720|    215|            "#define GL_GOOGLE_include_directive 1\n"
  721|    215|            "#define GL_KHR_blend_equation_advanced 1\n"
  722|    215|            ;
  723|       |
  724|       |    // other general extensions
  725|    215|    preamble +=
  726|    215|            "#define GL_EXT_terminate_invocation 1\n"
  727|    215|            ;
  728|       |
  729|       |    // #define VULKAN XXXX
  730|    215|    const int numberBufSize = 12;
  731|    215|    char numberBuf[numberBufSize];
  732|    215|    if (spvVersion.vulkanGlsl > 0) {
  ------------------
  |  Branch (732:9): [True: 215, False: 0]
  ------------------
  733|    215|        preamble += "#define VULKAN ";
  734|    215|        snprintf(numberBuf, numberBufSize, "%d", spvVersion.vulkanGlsl);
  735|    215|        preamble += numberBuf;
  736|    215|        preamble += "\n";
  737|    215|    }
  738|       |
  739|       |    // #define GL_SPIRV XXXX
  740|    215|    if (spvVersion.openGl > 0) {
  ------------------
  |  Branch (740:9): [True: 0, False: 215]
  ------------------
  741|      0|        preamble += "#define GL_SPIRV ";
  742|      0|        snprintf(numberBuf, numberBufSize, "%d", spvVersion.openGl);
  743|      0|        preamble += numberBuf;
  744|      0|        preamble += "\n";
  745|      0|    }
  746|       |
  747|       |    // GL_EXT_spirv_intrinsics
  748|    215|    if (!isEsProfile()) {
  ------------------
  |  Branch (748:9): [True: 215, False: 0]
  ------------------
  749|    215|        switch (language) {
  750|    174|        case EShLangVertex:         preamble += "#define GL_VERTEX_SHADER 1 \n";                    break;
  ------------------
  |  Branch (750:9): [True: 174, False: 41]
  ------------------
  751|     11|        case EShLangTessControl:    preamble += "#define GL_TESSELLATION_CONTROL_SHADER 1 \n";      break;
  ------------------
  |  Branch (751:9): [True: 11, False: 204]
  ------------------
  752|      3|        case EShLangTessEvaluation: preamble += "#define GL_TESSELLATION_EVALUATION_SHADER 1 \n";   break;
  ------------------
  |  Branch (752:9): [True: 3, False: 212]
  ------------------
  753|      3|        case EShLangGeometry:       preamble += "#define GL_GEOMETRY_SHADER 1 \n";                  break;
  ------------------
  |  Branch (753:9): [True: 3, False: 212]
  ------------------
  754|      0|        case EShLangFragment:       preamble += "#define GL_FRAGMENT_SHADER 1 \n";                  break;
  ------------------
  |  Branch (754:9): [True: 0, False: 215]
  ------------------
  755|      0|        case EShLangCompute:        preamble += "#define GL_COMPUTE_SHADER 1 \n";                   break;
  ------------------
  |  Branch (755:9): [True: 0, False: 215]
  ------------------
  756|      0|        case EShLangRayGen:         preamble += "#define GL_RAY_GENERATION_SHADER_EXT 1 \n";        break;
  ------------------
  |  Branch (756:9): [True: 0, False: 215]
  ------------------
  757|      0|        case EShLangIntersect:      preamble += "#define GL_INTERSECTION_SHADER_EXT 1 \n";          break;
  ------------------
  |  Branch (757:9): [True: 0, False: 215]
  ------------------
  758|      0|        case EShLangAnyHit:         preamble += "#define GL_ANY_HIT_SHADER_EXT 1 \n";               break;
  ------------------
  |  Branch (758:9): [True: 0, False: 215]
  ------------------
  759|      0|        case EShLangClosestHit:     preamble += "#define GL_CLOSEST_HIT_SHADER_EXT 1 \n";           break;
  ------------------
  |  Branch (759:9): [True: 0, False: 215]
  ------------------
  760|     14|        case EShLangMiss:           preamble += "#define GL_MISS_SHADER_EXT 1 \n";                  break;
  ------------------
  |  Branch (760:9): [True: 14, False: 201]
  ------------------
  761|      0|        case EShLangCallable:       preamble += "#define GL_CALLABLE_SHADER_EXT 1 \n";              break;
  ------------------
  |  Branch (761:9): [True: 0, False: 215]
  ------------------
  762|      0|        case EShLangTask:           preamble += "#define GL_TASK_SHADER_EXT 1 \n";                  break;
  ------------------
  |  Branch (762:9): [True: 0, False: 215]
  ------------------
  763|     10|        case EShLangMesh:           preamble += "#define GL_MESH_SHADER_EXT 1 \n";                  break;
  ------------------
  |  Branch (763:9): [True: 10, False: 205]
  ------------------
  764|      0|        default:                                                                                    break;
  ------------------
  |  Branch (764:9): [True: 0, False: 215]
  ------------------
  765|    215|        }
  766|    215|    }
  767|    215|}
StageName:
  773|     12|{
  774|     12|    switch(stage) {
  775|      0|    case EShLangVertex:         return "vertex";
  ------------------
  |  Branch (775:5): [True: 0, False: 12]
  ------------------
  776|      0|    case EShLangFragment:       return "fragment";
  ------------------
  |  Branch (776:5): [True: 0, False: 12]
  ------------------
  777|      0|    case EShLangCompute:        return "compute";
  ------------------
  |  Branch (777:5): [True: 0, False: 12]
  ------------------
  778|     12|    case EShLangTessControl:    return "tessellation control";
  ------------------
  |  Branch (778:5): [True: 12, False: 0]
  ------------------
  779|      0|    case EShLangTessEvaluation: return "tessellation evaluation";
  ------------------
  |  Branch (779:5): [True: 0, False: 12]
  ------------------
  780|      0|    case EShLangGeometry:       return "geometry";
  ------------------
  |  Branch (780:5): [True: 0, False: 12]
  ------------------
  781|      0|    case EShLangRayGen:         return "ray-generation";
  ------------------
  |  Branch (781:5): [True: 0, False: 12]
  ------------------
  782|      0|    case EShLangIntersect:      return "intersection";
  ------------------
  |  Branch (782:5): [True: 0, False: 12]
  ------------------
  783|      0|    case EShLangAnyHit:         return "any-hit";
  ------------------
  |  Branch (783:5): [True: 0, False: 12]
  ------------------
  784|      0|    case EShLangClosestHit:     return "closest-hit";
  ------------------
  |  Branch (784:5): [True: 0, False: 12]
  ------------------
  785|      0|    case EShLangMiss:           return "miss";
  ------------------
  |  Branch (785:5): [True: 0, False: 12]
  ------------------
  786|      0|    case EShLangCallable:       return "callable";
  ------------------
  |  Branch (786:5): [True: 0, False: 12]
  ------------------
  787|      0|    case EShLangMesh:           return "mesh";
  ------------------
  |  Branch (787:5): [True: 0, False: 12]
  ------------------
  788|      0|    case EShLangTask:           return "task";
  ------------------
  |  Branch (788:5): [True: 0, False: 12]
  ------------------
  789|      0|    default:                    return "unknown stage";
  ------------------
  |  Branch (789:5): [True: 0, False: 12]
  ------------------
  790|     12|    }
  791|     12|}
_ZN7glslang14TParseVersions12requireStageERKNS_10TSourceLocE15EShLanguageMaskPKc:
  801|  1.53k|{
  802|  1.53k|    if (((1 << language) & languageMask) == 0)
  ------------------
  |  Branch (802:9): [True: 12, False: 1.52k]
  ------------------
  803|     12|        error(loc, "not supported in this stage:", featureDesc, StageName(language));
  804|  1.53k|}
_ZN7glslang14TParseVersions12requireStageERKNS_10TSourceLocE11EShLanguagePKc:
  809|  1.31k|{
  810|  1.31k|    requireStage(loc, static_cast<EShLanguageMask>(1 << stage), featureDesc);
  811|  1.31k|}
_ZN7glslang14TParseVersions14requireProfileERKNS_10TSourceLocEiPKc:
  823|  11.9k|{
  824|  11.9k|    if (! (profile & profileMask))
  ------------------
  |  Branch (824:9): [True: 15, False: 11.9k]
  ------------------
  825|     15|        error(loc, "not supported with this profile:", featureDesc, ProfileName(profile));
  826|  11.9k|}
_ZN7glslang14TParseVersions15profileRequiresERKNS_10TSourceLocEiiiPKPKcS5_:
  847|   731k|{
  848|   731k|    if (profile & profileMask) {
  ------------------
  |  Branch (848:9): [True: 347k, False: 383k]
  ------------------
  849|   347k|        bool okay = minVersion > 0 && version >= minVersion;
  ------------------
  |  Branch (849:21): [True: 346k, False: 1.34k]
  |  Branch (849:39): [True: 346k, False: 0]
  ------------------
  850|   353k|        for (int i = 0; i < numExtensions; ++i) {
  ------------------
  |  Branch (850:25): [True: 5.43k, False: 347k]
  ------------------
  851|  5.43k|            switch (getExtensionBehavior(extensions[i])) {
  852|      0|            case EBhWarn:
  ------------------
  |  Branch (852:13): [True: 0, False: 5.43k]
  ------------------
  853|      0|                infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
  854|      0|                [[fallthrough]];
  855|      0|            case EBhRequire:
  ------------------
  |  Branch (855:13): [True: 0, False: 5.43k]
  ------------------
  856|     29|            case EBhEnable:
  ------------------
  |  Branch (856:13): [True: 29, False: 5.40k]
  ------------------
  857|     29|                okay = true;
  858|     29|                break;
  859|  5.40k|            default: break; // some compilers want this
  ------------------
  |  Branch (859:13): [True: 5.40k, False: 29]
  ------------------
  860|  5.43k|            }
  861|  5.43k|        }
  862|   347k|        if (! okay)
  ------------------
  |  Branch (862:13): [True: 1.31k, False: 346k]
  ------------------
  863|  1.31k|            error(loc, "not supported for this version or the enabled extensions", featureDesc, "");
  864|   347k|    }
  865|   731k|}
_ZN7glslang14TParseVersions15profileRequiresERKNS_10TSourceLocEiiPKcS5_:
  870|   729k|{
  871|   729k|    profileRequires(loc, profileMask, minVersion, extension ? 1 : 0, &extension, featureDesc);
  ------------------
  |  Branch (871:51): [True: 5.79k, False: 723k]
  ------------------
  872|   729k|}
_ZN7glslang14TParseVersions24checkExtensionsRequestedERKNS_10TSourceLocEiPKPKcS5_:
  916|  38.5k|{
  917|       |    // First, see if any of the extensions are enabled
  918|   152k|    for (int i = 0; i < numExtensions; ++i) {
  ------------------
  |  Branch (918:21): [True: 114k, False: 37.9k]
  ------------------
  919|   114k|        TExtensionBehavior behavior = getExtensionBehavior(extensions[i]);
  920|   114k|        if (behavior == EBhEnable || behavior == EBhRequire)
  ------------------
  |  Branch (920:13): [True: 579, False: 113k]
  |  Branch (920:38): [True: 0, False: 113k]
  ------------------
  921|    579|            return true;
  922|   114k|    }
  923|       |
  924|       |    // See if any extensions want to give a warning on use; give warnings for all such extensions
  925|  37.9k|    bool warned = false;
  926|   151k|    for (int i = 0; i < numExtensions; ++i) {
  ------------------
  |  Branch (926:21): [True: 113k, False: 37.9k]
  ------------------
  927|   113k|        TExtensionBehavior behavior = getExtensionBehavior(extensions[i]);
  928|   113k|        if (behavior == EBhDisable && relaxedErrors()) {
  ------------------
  |  Branch (928:13): [True: 113k, False: 69]
  |  Branch (928:39): [True: 0, False: 113k]
  ------------------
  929|      0|            infoSink.info.message(EPrefixWarning, "The following extension must be enabled to use this feature:", loc,
  930|      0|                                  messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
  931|      0|            behavior = EBhWarn;
  932|      0|        }
  933|   113k|        if (behavior == EBhWarn) {
  ------------------
  |  Branch (933:13): [True: 0, False: 113k]
  ------------------
  934|      0|            infoSink.info.message(EPrefixWarning,
  935|      0|                                  ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(),
  936|      0|                                  loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
  937|      0|            warned = true;
  938|      0|        }
  939|   113k|    }
  940|  37.9k|    if (warned)
  ------------------
  |  Branch (940:9): [True: 0, False: 37.9k]
  ------------------
  941|      0|        return true;
  942|  37.9k|    return false;
  943|  37.9k|}
_ZN7glslang14TParseVersions17requireExtensionsERKNS_10TSourceLocEiPKPKcS5_:
  951|  38.4k|{
  952|  38.4k|    if (checkExtensionsRequested(loc, numExtensions, extensions, featureDesc))
  ------------------
  |  Branch (952:9): [True: 579, False: 37.9k]
  ------------------
  953|    579|        return;
  954|       |
  955|       |    // If we get this far, give errors explaining what extensions are needed
  956|  37.9k|    if (numExtensions == 1)
  ------------------
  |  Branch (956:9): [True: 0, False: 37.9k]
  ------------------
  957|      0|        error(loc, "required extension not requested:", featureDesc, extensions[0]);
  958|  37.9k|    else {
  959|  37.9k|        error(loc, "required extension not requested:", featureDesc, "Possible extensions include:");
  960|   151k|        for (int i = 0; i < numExtensions; ++i)
  ------------------
  |  Branch (960:25): [True: 113k, False: 37.9k]
  ------------------
  961|   113k|            infoSink.info.message(EPrefixNone, extensions[i]);
  962|  37.9k|    }
  963|  37.9k|}
_ZN7glslang14TParseVersions20getExtensionBehaviorEPKc:
  986|   561k|{
  987|   561k|    auto iter = extensionBehavior.find(TString(extension));
  988|   561k|    if (iter == extensionBehavior.end())
  ------------------
  |  Branch (988:9): [True: 198k, False: 362k]
  ------------------
  989|   198k|        return EBhMissing;
  990|   362k|    else
  991|   362k|        return iter->second;
  992|   561k|}
_ZN7glslang14TParseVersions17extensionTurnedOnEPKc:
  996|   328k|{
  997|   328k|      switch (getExtensionBehavior(extension)) {
  998|      0|      case EBhEnable:
  ------------------
  |  Branch (998:7): [True: 0, False: 328k]
  ------------------
  999|      0|      case EBhRequire:
  ------------------
  |  Branch (999:7): [True: 0, False: 328k]
  ------------------
 1000|      0|      case EBhWarn:
  ------------------
  |  Branch (1000:7): [True: 0, False: 328k]
  ------------------
 1001|      0|          return true;
 1002|   328k|      default:
  ------------------
  |  Branch (1002:7): [True: 328k, False: 0]
  ------------------
 1003|   328k|          break;
 1004|   328k|      }
 1005|   328k|      return false;
 1006|   328k|}
_ZN7glslang14TParseVersions18extensionsTurnedOnEiPKPKc:
 1009|  16.8k|{
 1010|  49.0k|    for (int i = 0; i < numExtensions; ++i) {
  ------------------
  |  Branch (1010:21): [True: 32.1k, False: 16.8k]
  ------------------
 1011|  32.1k|        if (extensionTurnedOn(extensions[i]))
  ------------------
  |  Branch (1011:13): [True: 0, False: 32.1k]
  ------------------
 1012|      0|            return true;
 1013|  32.1k|    }
 1014|  16.8k|    return false;
 1015|  16.8k|}
_ZN7glslang14TParseVersions23updateExtensionBehaviorEiPKcS2_:
 1021|    472|{
 1022|       |    // Translate from text string of extension's behavior to an enum.
 1023|    472|    TExtensionBehavior behavior = EBhDisable;
 1024|    472|    if (! strcmp("require", behaviorString))
  ------------------
  |  Branch (1024:9): [True: 2, False: 470]
  ------------------
 1025|      2|        behavior = EBhRequire;
 1026|    470|    else if (! strcmp("enable", behaviorString))
  ------------------
  |  Branch (1026:14): [True: 468, False: 2]
  ------------------
 1027|    468|        behavior = EBhEnable;
 1028|      2|    else if (! strcmp("disable", behaviorString))
  ------------------
  |  Branch (1028:14): [True: 2, False: 0]
  ------------------
 1029|      2|        behavior = EBhDisable;
 1030|      0|    else if (! strcmp("warn", behaviorString))
  ------------------
  |  Branch (1030:14): [True: 0, False: 0]
  ------------------
 1031|      0|        behavior = EBhWarn;
 1032|      0|    else {
 1033|      0|        error(getCurrentLoc(), "behavior not supported:", "#extension", behaviorString);
 1034|      0|        return;
 1035|      0|    }
 1036|    472|    bool on = behavior != EBhDisable;
 1037|       |
 1038|       |    // check if extension is used with correct shader stage
 1039|    472|    checkExtensionStage(getCurrentLoc(), extension);
 1040|       |
 1041|       |    // check if extension has additional requirements
 1042|    472|    extensionRequires(getCurrentLoc(), extension, behaviorString);
 1043|       |
 1044|       |    // update the requested extension
 1045|    472|    updateExtensionBehavior(extension, behavior);
 1046|       |
 1047|       |    // see if need to propagate to implicitly modified things
 1048|    472|    if (strcmp(extension, "GL_ANDROID_extension_pack_es31a") == 0) {
  ------------------
  |  Branch (1048:9): [True: 0, False: 472]
  ------------------
 1049|       |        // to everything in AEP
 1050|      0|        updateExtensionBehavior(line, "GL_KHR_blend_equation_advanced", behaviorString);
 1051|      0|        updateExtensionBehavior(line, "GL_OES_sample_variables", behaviorString);
 1052|      0|        updateExtensionBehavior(line, "GL_OES_shader_image_atomic", behaviorString);
 1053|      0|        updateExtensionBehavior(line, "GL_OES_shader_multisample_interpolation", behaviorString);
 1054|      0|        updateExtensionBehavior(line, "GL_OES_texture_storage_multisample_2d_array", behaviorString);
 1055|      0|        updateExtensionBehavior(line, "GL_EXT_geometry_shader", behaviorString);
 1056|      0|        updateExtensionBehavior(line, "GL_EXT_gpu_shader5", behaviorString);
 1057|      0|        updateExtensionBehavior(line, "GL_EXT_primitive_bounding_box", behaviorString);
 1058|      0|        updateExtensionBehavior(line, "GL_EXT_shader_io_blocks", behaviorString);
 1059|      0|        updateExtensionBehavior(line, "GL_EXT_tessellation_shader", behaviorString);
 1060|      0|        updateExtensionBehavior(line, "GL_EXT_texture_buffer", behaviorString);
 1061|      0|        updateExtensionBehavior(line, "GL_EXT_texture_cube_map_array", behaviorString);
 1062|      0|    }
 1063|       |    // geometry to io_blocks
 1064|    472|    else if (strcmp(extension, "GL_EXT_geometry_shader") == 0)
  ------------------
  |  Branch (1064:14): [True: 0, False: 472]
  ------------------
 1065|      0|        updateExtensionBehavior(line, "GL_EXT_shader_io_blocks", behaviorString);
 1066|    472|    else if (strcmp(extension, "GL_OES_geometry_shader") == 0)
  ------------------
  |  Branch (1066:14): [True: 1, False: 471]
  ------------------
 1067|      1|        updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString);
 1068|       |    // tessellation to io_blocks
 1069|    471|    else if (strcmp(extension, "GL_EXT_tessellation_shader") == 0)
  ------------------
  |  Branch (1069:14): [True: 0, False: 471]
  ------------------
 1070|      0|        updateExtensionBehavior(line, "GL_EXT_shader_io_blocks", behaviorString);
 1071|    471|    else if (strcmp(extension, "GL_OES_tessellation_shader") == 0)
  ------------------
  |  Branch (1071:14): [True: 0, False: 471]
  ------------------
 1072|      0|        updateExtensionBehavior(line, "GL_OES_shader_io_blocks", behaviorString);
 1073|    471|    else if (strcmp(extension, "GL_GOOGLE_include_directive") == 0)
  ------------------
  |  Branch (1073:14): [True: 215, False: 256]
  ------------------
 1074|    215|        updateExtensionBehavior(line, "GL_GOOGLE_cpp_style_line_directive", behaviorString);
 1075|    256|    else if (strcmp(extension, "GL_ARB_shading_language_include") == 0)
  ------------------
  |  Branch (1075:14): [True: 0, False: 256]
  ------------------
 1076|      0|        updateExtensionBehavior(line, "GL_GOOGLE_cpp_style_line_directive", behaviorString);
 1077|       |    // subgroup_* to subgroup_basic
 1078|    256|    else if (strcmp(extension, "GL_KHR_shader_subgroup_vote") == 0)
  ------------------
  |  Branch (1078:14): [True: 0, False: 256]
  ------------------
 1079|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1080|    256|    else if (strcmp(extension, "GL_KHR_shader_subgroup_arithmetic") == 0)
  ------------------
  |  Branch (1080:14): [True: 0, False: 256]
  ------------------
 1081|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1082|    256|    else if (strcmp(extension, "GL_KHR_shader_subgroup_ballot") == 0)
  ------------------
  |  Branch (1082:14): [True: 0, False: 256]
  ------------------
 1083|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1084|    256|    else if (strcmp(extension, "GL_KHR_shader_subgroup_shuffle") == 0)
  ------------------
  |  Branch (1084:14): [True: 0, False: 256]
  ------------------
 1085|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1086|    256|    else if (strcmp(extension, "GL_KHR_shader_subgroup_shuffle_relative") == 0)
  ------------------
  |  Branch (1086:14): [True: 0, False: 256]
  ------------------
 1087|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1088|    256|    else if (strcmp(extension, "GL_KHR_shader_subgroup_clustered") == 0)
  ------------------
  |  Branch (1088:14): [True: 0, False: 256]
  ------------------
 1089|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1090|    256|    else if (strcmp(extension, "GL_KHR_shader_subgroup_quad") == 0)
  ------------------
  |  Branch (1090:14): [True: 0, False: 256]
  ------------------
 1091|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1092|    256|    else if (strcmp(extension, "GL_NV_shader_subgroup_partitioned") == 0)
  ------------------
  |  Branch (1092:14): [True: 0, False: 256]
  ------------------
 1093|      0|        updateExtensionBehavior(line, "GL_KHR_shader_subgroup_basic", behaviorString);
 1094|    256|    else if (strcmp(extension, "GL_EXT_buffer_reference2") == 0 ||
  ------------------
  |  Branch (1094:14): [True: 1, False: 255]
  ------------------
 1095|    255|             strcmp(extension, "GL_EXT_buffer_reference_uvec2") == 0)
  ------------------
  |  Branch (1095:14): [True: 0, False: 255]
  ------------------
 1096|      1|        updateExtensionBehavior(line, "GL_EXT_buffer_reference", behaviorString);
 1097|    255|    else if (strcmp(extension, "GL_NV_integer_cooperative_matrix") == 0)
  ------------------
  |  Branch (1097:14): [True: 0, False: 255]
  ------------------
 1098|      0|        updateExtensionBehavior(line, "GL_NV_cooperative_matrix", behaviorString);
 1099|    255|    else if (strcmp(extension, "GL_NV_cooperative_matrix2") == 0)
  ------------------
  |  Branch (1099:14): [True: 0, False: 255]
  ------------------
 1100|      0|        updateExtensionBehavior(line, "GL_KHR_cooperative_matrix", behaviorString);
 1101|       |    // subgroup extended types to explicit types
 1102|    255|    else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int8") == 0)
  ------------------
  |  Branch (1102:14): [True: 0, False: 255]
  ------------------
 1103|      0|        updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int8", behaviorString);
 1104|    255|    else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int16") == 0)
  ------------------
  |  Branch (1104:14): [True: 0, False: 255]
  ------------------
 1105|      0|        updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int16", behaviorString);
 1106|    255|    else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int64") == 0)
  ------------------
  |  Branch (1106:14): [True: 0, False: 255]
  ------------------
 1107|      0|        updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int64", behaviorString);
 1108|    255|    else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_float16") == 0)
  ------------------
  |  Branch (1108:14): [True: 0, False: 255]
  ------------------
 1109|      0|        updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_float16", behaviorString);
 1110|       |
 1111|       |    // see if we need to update the numeric features
 1112|    255|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types") == 0)
  ------------------
  |  Branch (1112:14): [True: 0, False: 255]
  ------------------
 1113|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types, on);
 1114|    255|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_int8") == 0)
  ------------------
  |  Branch (1114:14): [True: 0, False: 255]
  ------------------
 1115|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_int8, on);
 1116|    255|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_int16") == 0)
  ------------------
  |  Branch (1116:14): [True: 0, False: 255]
  ------------------
 1117|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_int16, on);
 1118|    255|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_int32") == 0)
  ------------------
  |  Branch (1118:14): [True: 0, False: 255]
  ------------------
 1119|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_int32, on);
 1120|    255|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_int64") == 0)
  ------------------
  |  Branch (1120:14): [True: 1, False: 254]
  ------------------
 1121|      1|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_int64, on);
 1122|    254|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_float16") == 0)
  ------------------
  |  Branch (1122:14): [True: 0, False: 254]
  ------------------
 1123|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_float16, on);
 1124|    254|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_float32") == 0)
  ------------------
  |  Branch (1124:14): [True: 0, False: 254]
  ------------------
 1125|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_float32, on);
 1126|    254|    else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_float64") == 0)
  ------------------
  |  Branch (1126:14): [True: 0, False: 254]
  ------------------
 1127|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_float64, on);
 1128|    254|    else if (strcmp(extension, "GL_EXT_shader_implicit_conversions") == 0)
  ------------------
  |  Branch (1128:14): [True: 0, False: 254]
  ------------------
 1129|      0|        intermediate.updateNumericFeature(TNumericFeatures::shader_implicit_conversions, on);
 1130|    254|    else if (strcmp(extension, "GL_ARB_gpu_shader_fp64") == 0)
  ------------------
  |  Branch (1130:14): [True: 1, False: 253]
  ------------------
 1131|      1|        intermediate.updateNumericFeature(TNumericFeatures::gpu_shader_fp64, on);
 1132|    253|    else if (strcmp(extension, "GL_AMD_gpu_shader_int16") == 0)
  ------------------
  |  Branch (1132:14): [True: 0, False: 253]
  ------------------
 1133|      0|        intermediate.updateNumericFeature(TNumericFeatures::gpu_shader_int16, on);
 1134|    253|    else if (strcmp(extension, "GL_AMD_gpu_shader_half_float") == 0)
  ------------------
  |  Branch (1134:14): [True: 0, False: 253]
  ------------------
 1135|      0|        intermediate.updateNumericFeature(TNumericFeatures::gpu_shader_half_float, on);
 1136|    253|    else if (strcmp(extension, "GL_NV_gpu_shader5") == 0) {
  ------------------
  |  Branch (1136:14): [True: 1, False: 252]
  ------------------
 1137|      1|        intermediate.updateNumericFeature(TNumericFeatures::nv_gpu_shader5_types, on);
 1138|      1|    }
 1139|    472|}
_ZN7glslang14TParseVersions23updateExtensionBehaviorEPKcNS_18TExtensionBehaviorE:
 1142|    472|{
 1143|       |    // Update the current behavior
 1144|    472|    if (strcmp(extension, "all") == 0) {
  ------------------
  |  Branch (1144:9): [True: 0, False: 472]
  ------------------
 1145|       |        // special case for the 'all' extension; apply it to every extension present
 1146|      0|        if (behavior == EBhRequire || behavior == EBhEnable) {
  ------------------
  |  Branch (1146:13): [True: 0, False: 0]
  |  Branch (1146:39): [True: 0, False: 0]
  ------------------
 1147|      0|            error(getCurrentLoc(), "extension 'all' cannot have 'require' or 'enable' behavior", "#extension", "");
 1148|      0|            return;
 1149|      0|        } else {
 1150|      0|            for (auto iter = extensionBehavior.begin(); iter != extensionBehavior.end(); ++iter)
  ------------------
  |  Branch (1150:57): [True: 0, False: 0]
  ------------------
 1151|      0|                iter->second = behavior;
 1152|      0|        }
 1153|    472|    } else {
 1154|       |        // Do the update for this single extension
 1155|    472|        auto iter = extensionBehavior.find(TString(extension));
 1156|    472|        if (iter == extensionBehavior.end()) {
  ------------------
  |  Branch (1156:13): [True: 2, False: 470]
  ------------------
 1157|      2|            switch (behavior) {
 1158|      2|            case EBhRequire:
  ------------------
  |  Branch (1158:13): [True: 2, False: 0]
  ------------------
 1159|      2|                error(getCurrentLoc(), "extension not supported:", "#extension", extension);
 1160|      2|                break;
 1161|      0|            case EBhEnable:
  ------------------
  |  Branch (1161:13): [True: 0, False: 2]
  ------------------
 1162|      0|            case EBhWarn:
  ------------------
  |  Branch (1162:13): [True: 0, False: 2]
  ------------------
 1163|      0|            case EBhDisable:
  ------------------
  |  Branch (1163:13): [True: 0, False: 2]
  ------------------
 1164|      0|                warn(getCurrentLoc(), "extension not supported:", "#extension", extension);
 1165|      0|                break;
 1166|      0|            default:
  ------------------
  |  Branch (1166:13): [True: 0, False: 2]
  ------------------
 1167|      0|                assert(0 && "unexpected behavior");
 1168|      2|            }
 1169|       |
 1170|      2|            return;
 1171|    470|        } else {
 1172|    470|            if (iter->second == EBhDisablePartial)
  ------------------
  |  Branch (1172:17): [True: 0, False: 470]
  ------------------
 1173|      0|                warn(getCurrentLoc(), "extension is only partially supported:", "#extension", extension);
 1174|    470|            if (behavior != EBhDisable)
  ------------------
  |  Branch (1174:17): [True: 468, False: 2]
  ------------------
 1175|    468|                intermediate.addRequestedExtension(extension);
 1176|    470|            iter->second = behavior;
 1177|    470|        }
 1178|    472|    }
 1179|    472|}
_ZN7glslang14TParseVersions19checkExtensionStageERKNS_10TSourceLocEPKc:
 1183|    472|{
 1184|       |    // GL_NV_mesh_shader extension is only allowed in task/mesh shaders
 1185|    472|    if (strcmp(extension, "GL_NV_mesh_shader") == 0) {
  ------------------
  |  Branch (1185:9): [True: 0, False: 472]
  ------------------
 1186|      0|        requireStage(loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask | EShLangFragmentMask),
 1187|      0|                     "#extension GL_NV_mesh_shader");
 1188|      0|        profileRequires(loc, ECoreProfile, 450, nullptr, "#extension GL_NV_mesh_shader");
 1189|      0|        profileRequires(loc, EEsProfile, 320, nullptr, "#extension GL_NV_mesh_shader");
 1190|      0|        if (extensionTurnedOn(E_GL_EXT_mesh_shader)) {
  ------------------
  |  Branch (1190:13): [True: 0, False: 0]
  ------------------
 1191|      0|            error(loc, "GL_EXT_mesh_shader is already turned on, and not allowed with", "#extension", extension);
 1192|      0|        }
 1193|      0|    }
 1194|    472|    else if (strcmp(extension, "GL_EXT_mesh_shader") == 0) {
  ------------------
  |  Branch (1194:14): [True: 0, False: 472]
  ------------------
 1195|      0|        requireStage(loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask | EShLangFragmentMask),
 1196|      0|                     "#extension GL_EXT_mesh_shader");
 1197|      0|        profileRequires(loc, ECoreProfile, 450, nullptr, "#extension GL_EXT_mesh_shader");
 1198|      0|        profileRequires(loc, EEsProfile, 320, nullptr, "#extension GL_EXT_mesh_shader");
 1199|      0|        if (extensionTurnedOn(E_GL_NV_mesh_shader)) {
  ------------------
  |  Branch (1199:13): [True: 0, False: 0]
  ------------------
 1200|      0|            error(loc, "GL_NV_mesh_shader is already turned on, and not allowed with", "#extension", extension);
 1201|      0|        }
 1202|      0|    }
 1203|    472|}
_ZN7glslang14TParseVersions17extensionRequiresERKNS_10TSourceLocEPKcS5_:
 1207|    472|{
 1208|    472|    bool isEnabled = false;
 1209|    472|    if (!strcmp("require", behaviorString))
  ------------------
  |  Branch (1209:9): [True: 2, False: 470]
  ------------------
 1210|      2|        isEnabled = true;
 1211|    470|    else if (!strcmp("enable", behaviorString))
  ------------------
  |  Branch (1211:14): [True: 468, False: 2]
  ------------------
 1212|    468|        isEnabled = true;
 1213|       |
 1214|    472|    if (isEnabled) {
  ------------------
  |  Branch (1214:9): [True: 470, False: 2]
  ------------------
 1215|    470|        unsigned int minSpvVersion = 0;
 1216|    470|        auto iter = extensionMinSpv.find(TString(extension));
 1217|    470|        if (iter != extensionMinSpv.end())
  ------------------
  |  Branch (1217:13): [True: 0, False: 470]
  ------------------
 1218|      0|            minSpvVersion = iter->second;
 1219|    470|        requireSpv(loc, extension, minSpvVersion);
 1220|    470|    }
 1221|       |
 1222|    472|    if (spvVersion.spv != 0){
  ------------------
  |  Branch (1222:9): [True: 472, False: 0]
  ------------------
 1223|    472|        for (auto ext : spvUnsupportedExt){
  ------------------
  |  Branch (1223:23): [True: 472, False: 472]
  ------------------
 1224|    472|            if (strcmp(extension, ext.c_str()) == 0)
  ------------------
  |  Branch (1224:17): [True: 0, False: 472]
  ------------------
 1225|      0|                error(loc, "not allowed when using generating SPIR-V codes", extension, "");
 1226|    472|        }
 1227|    472|    }
 1228|    472|}
_ZN7glslang14TParseVersions16fullIntegerCheckERKNS_10TSourceLocEPKc:
 1232|   296k|{
 1233|   296k|    profileRequires(loc, ENoProfile, 130, nullptr, op);
 1234|   296k|    profileRequires(loc, EEsProfile, 300, nullptr, op);
 1235|   296k|}
_ZN7glslang14TParseVersions11doubleCheckERKNS_10TSourceLocEPKc:
 1239|      2|{
 1240|       |
 1241|       |    //requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
 1242|      2|    if (language == EShLangVertex) {
  ------------------
  |  Branch (1242:9): [True: 2, False: 0]
  ------------------
 1243|      2|        const char* const f64_Extensions[] = {E_GL_ARB_gpu_shader_fp64, E_GL_ARB_vertex_attrib_64bit};
 1244|      2|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, 2, f64_Extensions, op);
 1245|      2|    } else
 1246|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader_fp64, op);
 1247|      2|}
_ZN7glslang14TParseVersions12float16CheckERKNS_10TSourceLocEPKcb:
 1251|  1.57k|{
 1252|  1.57k|    if (!builtIn) {
  ------------------
  |  Branch (1252:9): [True: 1.25k, False: 315]
  ------------------
 1253|  1.25k|        const char* const extensions[] = {
 1254|  1.25k|                                           E_GL_AMD_gpu_shader_half_float,
 1255|  1.25k|                                           E_GL_EXT_shader_explicit_arithmetic_types,
 1256|  1.25k|                                           E_GL_EXT_shader_explicit_arithmetic_types_float16};
 1257|  1.25k|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1258|  1.25k|    }
 1259|  1.57k|}
_ZN7glslang14TParseVersions24float16ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1335|  61.4k|{
 1336|  61.4k|    if (!builtIn) {
  ------------------
  |  Branch (1336:9): [True: 0, False: 61.4k]
  ------------------
 1337|      0|        const char* const extensions[] = {
 1338|      0|                                           E_GL_AMD_gpu_shader_half_float,
 1339|      0|                                           E_GL_EXT_shader_16bit_storage,
 1340|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types,
 1341|      0|                                           E_GL_NV_gpu_shader5,
 1342|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_float16};
 1343|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1344|      0|    }
 1345|  61.4k|}
_ZN7glslang14TParseVersions25bfloat16ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1348|    220|{
 1349|    220|    if (!builtIn) {
  ------------------
  |  Branch (1349:9): [True: 0, False: 220]
  ------------------
 1350|      0|        const char* const extensions[] = {
 1351|      0|                                           E_GL_EXT_bfloat16,
 1352|      0|                                         };
 1353|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1354|      0|    }
 1355|    220|}
_ZN7glslang14TParseVersions26floate5m2ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1358|    160|{
 1359|    160|    if (!builtIn) {
  ------------------
  |  Branch (1359:9): [True: 0, False: 160]
  ------------------
 1360|      0|        const char* const extensions[] = {
 1361|      0|                                           E_GL_EXT_float_e5m2,
 1362|      0|                                         };
 1363|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1364|      0|    }
 1365|    160|}
_ZN7glslang14TParseVersions26floate4m3ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1368|    160|{
 1369|    160|    if (!builtIn) {
  ------------------
  |  Branch (1369:9): [True: 0, False: 160]
  ------------------
 1370|      0|        const char* const extensions[] = {
 1371|      0|                                           E_GL_EXT_float_e4m3,
 1372|      0|                                         };
 1373|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1374|      0|    }
 1375|    160|}
_ZN7glslang14TParseVersions20explicitFloat32CheckERKNS_10TSourceLocEPKcb:
 1379|    440|{
 1380|    440|    if (!builtIn) {
  ------------------
  |  Branch (1380:9): [True: 0, False: 440]
  ------------------
 1381|      0|        const char* const extensions[] = {E_GL_EXT_shader_explicit_arithmetic_types,
 1382|      0|                                          E_GL_NV_gpu_shader5,
 1383|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_float32};
 1384|      0|        requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op);
 1385|      0|    }
 1386|    440|}
_ZN7glslang14TParseVersions20explicitFloat64CheckERKNS_10TSourceLocEPKcb:
 1390|  3.60k|{
 1391|  3.60k|    if (!builtIn) {
  ------------------
  |  Branch (1391:9): [True: 0, False: 3.60k]
  ------------------
 1392|      0|        const char* const extensions[] = {E_GL_EXT_shader_explicit_arithmetic_types,
 1393|      0|                                           E_GL_NV_gpu_shader5,
 1394|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_float64};
 1395|      0|        requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op);
 1396|      0|        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
 1397|      0|        if(extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) && extensionTurnedOn(E_GL_NV_gpu_shader5))
  ------------------
  |  Branch (1397:12): [True: 0, False: 0]
  |  Branch (1397:59): [True: 0, False: 0]
  ------------------
 1398|      0|            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 150, nullptr, op);
 1399|      0|        else
 1400|      0|            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
 1401|      0|    }
 1402|  3.60k|}
_ZN7glslang14TParseVersions18float16OpaqueCheckERKNS_10TSourceLocEPKcb:
 1416|  12.6k|{
 1417|  12.6k|    if (! builtIn) {
  ------------------
  |  Branch (1417:9): [True: 0, False: 12.6k]
  ------------------
 1418|      0|        requireExtensions(loc, 1, &E_GL_AMD_gpu_shader_half_float_fetch, op);
 1419|      0|        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
 1420|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
 1421|      0|    }
 1422|  12.6k|}
_ZN7glslang14TParseVersions22int16ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1437|   110k|{
 1438|   110k|    if (! builtIn) {
  ------------------
  |  Branch (1438:9): [True: 0, False: 110k]
  ------------------
 1439|      0|    	const char* const extensions[] = {
 1440|      0|                                           E_GL_AMD_gpu_shader_int16,
 1441|      0|                                           E_GL_EXT_shader_16bit_storage,
 1442|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types,
 1443|      0|                                           E_GL_NV_gpu_shader5,
 1444|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_int16};
 1445|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1446|      0|    }
 1447|   110k|}
_ZN7glslang14TParseVersions21int8ScalarVectorCheckERKNS_10TSourceLocEPKcb:
 1450|  96.8k|{
 1451|  96.8k|    if (! builtIn) {
  ------------------
  |  Branch (1451:9): [True: 0, False: 96.8k]
  ------------------
 1452|      0|    	const char* const extensions[] = {
 1453|      0|                                           E_GL_EXT_shader_8bit_storage,
 1454|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types,
 1455|      0|                                           E_GL_NV_gpu_shader5,
 1456|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_int8};
 1457|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1458|      0|    }
 1459|  96.8k|}
_ZN7glslang14TParseVersions18explicitInt32CheckERKNS_10TSourceLocEPKcb:
 1463|    940|{
 1464|    940|    if (! builtIn) {
  ------------------
  |  Branch (1464:9): [True: 0, False: 940]
  ------------------
 1465|      0|        const char* const extensions[] = {E_GL_EXT_shader_explicit_arithmetic_types,
 1466|      0|                                           E_GL_NV_gpu_shader5,
 1467|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_int32};
 1468|      0|        requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op);
 1469|      0|    }
 1470|    940|}
_ZN7glslang14TParseVersions10int64CheckERKNS_10TSourceLocEPKcb:
 1474|   117k|{
 1475|   117k|    if (! builtIn) {
  ------------------
  |  Branch (1475:9): [True: 0, False: 117k]
  ------------------
 1476|      0|        const char* const extensions[] = {E_GL_ARB_gpu_shader_int64,
 1477|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types,
 1478|      0|                                           E_GL_NV_gpu_shader5,
 1479|      0|                                           E_GL_EXT_shader_explicit_arithmetic_types_int64};
 1480|      0|        requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op);
 1481|      0|        requireProfile(loc, ECoreProfile | ECompatibilityProfile, op);
 1482|      0|        if (extensionTurnedOn(E_GL_NV_gpu_shader5))
  ------------------
  |  Branch (1482:13): [True: 0, False: 0]
  ------------------
 1483|      0|            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 150, nullptr, op);
 1484|      0|        else
 1485|      0|        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op);
 1486|      0|    }
 1487|   117k|}
_ZN7glslang14TParseVersions15fcoopmatCheckNVERKNS_10TSourceLocEPKcb:
 1490|    210|{
 1491|    210|    if (!builtIn) {
  ------------------
  |  Branch (1491:9): [True: 0, False: 210]
  ------------------
 1492|      0|        const char* const extensions[] = {E_GL_NV_cooperative_matrix};
 1493|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1494|      0|    }
 1495|    210|}
_ZN7glslang14TParseVersions17intcoopmatCheckNVERKNS_10TSourceLocEPKcb:
 1498|    560|{
 1499|    560|    if (!builtIn) {
  ------------------
  |  Branch (1499:9): [True: 0, False: 560]
  ------------------
 1500|      0|        const char* const extensions[] = {E_GL_NV_integer_cooperative_matrix};
 1501|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1502|      0|    }
 1503|    560|}
_ZN7glslang14TParseVersions12coopmatCheckERKNS_10TSourceLocEPKcb:
 1506|  1.06k|{
 1507|  1.06k|    if (!builtIn) {
  ------------------
  |  Branch (1507:9): [True: 0, False: 1.06k]
  ------------------
 1508|      0|        const char* const extensions[] = {E_GL_KHR_cooperative_matrix};
 1509|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1510|      0|    }
 1511|  1.06k|}
_ZN7glslang14TParseVersions21tensorLayoutViewCheckERKNS_10TSourceLocEPKcb:
 1522|    485|{
 1523|    485|    if (!builtIn) {
  ------------------
  |  Branch (1523:9): [True: 0, False: 485]
  ------------------
 1524|      0|        const char* const extensions[] = {E_GL_NV_cooperative_matrix2};
 1525|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1526|      0|    }
 1527|    485|}
_ZN7glslang14TParseVersions12coopvecCheckERKNS_10TSourceLocEPKcb:
 1530|  3.97k|{
 1531|  3.97k|    if (!builtIn) {
  ------------------
  |  Branch (1531:9): [True: 0, False: 3.97k]
  ------------------
 1532|      0|        const char* const extensions[] = {E_GL_NV_cooperative_vector};
 1533|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1534|      0|    }
 1535|  3.97k|}
_ZN7glslang14TParseVersions14tensorCheckARMERKNS_10TSourceLocEPKcb:
 1546|    305|{
 1547|    305|    if (!builtIn) {
  ------------------
  |  Branch (1547:9): [True: 0, False: 305]
  ------------------
 1548|      0|        const char* const extensions[] = {E_GL_ARM_tensors};
 1549|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1550|      0|    }
 1551|    305|}
_ZN7glslang14TParseVersions15longVectorCheckERKNS_10TSourceLocEPKcb:
 1554|  36.2k|{
 1555|  36.2k|    if (!builtIn) {
  ------------------
  |  Branch (1555:9): [True: 0, False: 36.2k]
  ------------------
 1556|      0|        const char* const extensions[] = {E_GL_EXT_long_vector};
 1557|      0|        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
 1558|      0|    }
 1559|  36.2k|}
_ZN7glslang14TParseVersions13requireVulkanERKNS_10TSourceLocEPKc:
 1577|    168|{
 1578|    168|    if (spvVersion.vulkan == 0)
  ------------------
  |  Branch (1578:9): [True: 0, False: 168]
  ------------------
 1579|      0|        error(loc, "only allowed when using GLSL for Vulkan", op, "");
 1580|    168|}
_ZN7glslang14TParseVersions10requireSpvERKNS_10TSourceLocEPKcj:
 1589|    470|{
 1590|    470|    if (spvVersion.spv < version)
  ------------------
  |  Branch (1590:9): [True: 0, False: 470]
  ------------------
 1591|      0|        error(loc, "not supported for current targeted SPIR-V version", op, "");
 1592|    470|}

_Z7yyparsePN7glslang13TParseContextE:
 5229|    540|{
 5230|       |/* Lookahead token kind.  */
 5231|    540|int yychar;
 5232|       |
 5233|       |
 5234|       |/* The semantic value of the lookahead symbol.  */
 5235|       |/* Default value used for initialization, for pacifying older GCCs
 5236|       |   or non-GCC compilers.  */
 5237|    540|YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
  ------------------
  |  |  931|    540|# define YY_INITIAL_VALUE(Value) Value
  ------------------
 5238|    540|YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
  ------------------
  |  |  931|    540|# define YY_INITIAL_VALUE(Value) Value
  ------------------
 5239|       |
 5240|       |    /* Number of syntax errors so far.  */
 5241|    540|    int yynerrs = 0;
 5242|       |
 5243|    540|    yy_state_fast_t yystate = 0;
 5244|       |    /* Number of tokens to shift before error messages enabled.  */
 5245|    540|    int yyerrstatus = 0;
 5246|       |
 5247|       |    /* Refer to the stacks through separate pointers, to allow yyoverflow
 5248|       |       to reallocate them elsewhere.  */
 5249|       |
 5250|       |    /* Their size.  */
 5251|    540|    YYPTRDIFF_T yystacksize = YYINITDEPTH;
  ------------------
  |  |  838|    540|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  ------------------
                  YYPTRDIFF_T yystacksize = YYINITDEPTH;
  ------------------
  |  | 4913|    540|# define YYINITDEPTH 200
  ------------------
 5252|       |
 5253|       |    /* The state stack: array, bottom, top.  */
 5254|    540|    yy_state_t yyssa[YYINITDEPTH];
 5255|    540|    yy_state_t *yyss = yyssa;
 5256|    540|    yy_state_t *yyssp = yyss;
 5257|       |
 5258|       |    /* The semantic value stack: array, bottom, top.  */
 5259|    540|    YYSTYPE yyvsa[YYINITDEPTH];
 5260|    540|    YYSTYPE *yyvs = yyvsa;
 5261|    540|    YYSTYPE *yyvsp = yyvs;
 5262|       |
 5263|    540|  int yyn;
 5264|       |  /* The return value of yyparse.  */
 5265|    540|  int yyresult;
 5266|       |  /* Lookahead symbol kind.  */
 5267|    540|  yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
 5268|       |  /* The variables used to return semantic value and location from the
 5269|       |     action routines.  */
 5270|    540|  YYSTYPE yyval;
 5271|       |
 5272|       |  /* Buffer for error messages, and its allocated size.  */
 5273|    540|  char yymsgbuf[128];
 5274|    540|  char *yymsg = yymsgbuf;
 5275|    540|  YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
  ------------------
  |  |  838|    540|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  ------------------
 5276|       |
 5277|    540|#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
 5278|       |
 5279|       |  /* The number of symbols on the RHS of the reduced rule.
 5280|       |     Keep to zero when no symbol should be popped.  */
 5281|    540|  int yylen = 0;
 5282|       |
 5283|    540|  YYDPRINTF ((stderr, "Starting parse\n"));
  ------------------
  |  | 4791|    540|# define YYDPRINTF(Args)                        \
  |  | 4792|    540|do {                                            \
  |  | 4793|    540|  if (yydebug)                                  \
  |  |  ------------------
  |  |  |  Branch (4793:7): [True: 0, False: 540]
  |  |  ------------------
  |  | 4794|    540|    YYFPRINTF Args;                             \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4795|    540|} while (0)
  |  |  ------------------
  |  |  |  Branch (4795:10): [Folded, False: 540]
  |  |  ------------------
  ------------------
 5284|       |
 5285|    540|  yychar = YYEMPTY; /* Cause a token to be read.  */
 5286|       |
 5287|    540|  goto yysetstate;
 5288|       |
 5289|       |
 5290|       |/*------------------------------------------------------------.
 5291|       || yynewstate -- push a new state, which is found in yystate.  |
 5292|       |`------------------------------------------------------------*/
 5293|  17.1M|yynewstate:
 5294|       |  /* In all cases, when you get here, the value and location stacks
 5295|       |     have just been pushed.  So pushing a state here evens the stacks.  */
 5296|  17.1M|  yyssp++;
 5297|       |
 5298|       |
 5299|       |/*--------------------------------------------------------------------.
 5300|       || yysetstate -- set current state (the top of the stack) to yystate.  |
 5301|       |`--------------------------------------------------------------------*/
 5302|  17.1M|yysetstate:
 5303|  17.1M|  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
  ------------------
  |  | 4791|  17.1M|# define YYDPRINTF(Args)                        \
  |  | 4792|  17.1M|do {                                            \
  |  | 4793|  17.1M|  if (yydebug)                                  \
  |  |  ------------------
  |  |  |  Branch (4793:7): [True: 0, False: 17.1M]
  |  |  ------------------
  |  | 4794|  17.1M|    YYFPRINTF Args;                             \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4795|  17.1M|} while (0)
  |  |  ------------------
  |  |  |  Branch (4795:10): [Folded, False: 17.1M]
  |  |  ------------------
  ------------------
 5304|  17.1M|  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
  ------------------
  |  |  954|  17.1M|#define YY_ASSERT(E) ((void) (0 && (E)))
  |  |  ------------------
  |  |  |  Branch (954:31): [Folded, False: 17.1M]
  |  |  |  Branch (954:37): [True: 0, False: 0]
  |  |  |  Branch (954:37): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 5305|  17.1M|  YY_IGNORE_USELESS_CAST_BEGIN
 5306|  17.1M|  *yyssp = YY_CAST (yy_state_t, yystate);
  ------------------
  |  |  100|  17.1M|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  ------------------
 5307|  17.1M|  YY_IGNORE_USELESS_CAST_END
 5308|  17.1M|  YY_STACK_PRINT (yyss, yyssp);
  ------------------
  |  | 4863|  17.1M|# define YY_STACK_PRINT(Bottom, Top)                            \
  |  | 4864|  17.1M|do {                                                            \
  |  | 4865|  17.1M|  if (yydebug)                                                  \
  |  |  ------------------
  |  |  |  Branch (4865:7): [True: 0, False: 17.1M]
  |  |  ------------------
  |  | 4866|  17.1M|    yy_stack_print ((Bottom), (Top));                           \
  |  | 4867|  17.1M|} while (0)
  |  |  ------------------
  |  |  |  Branch (4867:10): [Folded, False: 17.1M]
  |  |  ------------------
  ------------------
 5309|       |
 5310|  17.1M|  if (yyss + yystacksize - 1 <= yyssp)
  ------------------
  |  Branch (5310:7): [True: 0, False: 17.1M]
  ------------------
 5311|       |#if !defined yyoverflow && !defined YYSTACK_RELOCATE
 5312|       |    YYNOMEM;
 5313|       |#else
 5314|      0|    {
 5315|       |      /* Get the current used size of the three stacks, in elements.  */
 5316|      0|      YYPTRDIFF_T yysize = yyssp - yyss + 1;
  ------------------
  |  |  838|      0|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  ------------------
 5317|       |
 5318|       |# if defined yyoverflow
 5319|       |      {
 5320|       |        /* Give user a chance to reallocate the stack.  Use copies of
 5321|       |           these so that the &'s don't force the real ones into
 5322|       |           memory.  */
 5323|       |        yy_state_t *yyss1 = yyss;
 5324|       |        YYSTYPE *yyvs1 = yyvs;
 5325|       |
 5326|       |        /* Each stack pointer address is followed by the size of the
 5327|       |           data in use in that stack, in bytes.  This used to be a
 5328|       |           conditional around just the two extra args, but that might
 5329|       |           be undefined if yyoverflow is a macro.  */
 5330|       |        yyoverflow (YY_("memory exhausted"),
 5331|       |                    &yyss1, yysize * YYSIZEOF (*yyssp),
 5332|       |                    &yyvs1, yysize * YYSIZEOF (*yyvsp),
 5333|       |                    &yystacksize);
 5334|       |        yyss = yyss1;
 5335|       |        yyvs = yyvs1;
 5336|       |      }
 5337|       |# else /* defined YYSTACK_RELOCATE */
 5338|       |      /* Extend the stack our own way.  */
 5339|      0|      if (YYMAXDEPTH <= yystacksize)
  ------------------
  |  | 4924|      0|# define YYMAXDEPTH 10000
  ------------------
  |  Branch (5339:11): [True: 0, False: 0]
  ------------------
 5340|      0|        YYNOMEM;
  ------------------
  |  | 4756|      0|#define YYNOMEM         goto yyexhaustedlab
  ------------------
 5341|      0|      yystacksize *= 2;
 5342|      0|      if (YYMAXDEPTH < yystacksize)
  ------------------
  |  | 4924|      0|# define YYMAXDEPTH 10000
  ------------------
  |  Branch (5342:11): [True: 0, False: 0]
  ------------------
 5343|      0|        yystacksize = YYMAXDEPTH;
  ------------------
  |  | 4924|      0|# define YYMAXDEPTH 10000
  ------------------
 5344|       |
 5345|      0|      {
 5346|      0|        yy_state_t *yyss1 = yyss;
 5347|      0|        union yyalloc *yyptr =
 5348|      0|          YY_CAST (union yyalloc *,
  ------------------
  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  ------------------
 5349|      0|                   YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
 5350|      0|        if (! yyptr)
  ------------------
  |  Branch (5350:13): [True: 0, False: 0]
  ------------------
 5351|      0|          YYNOMEM;
  ------------------
  |  | 4756|      0|#define YYNOMEM         goto yyexhaustedlab
  ------------------
 5352|      0|        YYSTACK_RELOCATE (yyss_alloc, yyss);
  ------------------
  |  | 1051|      0|    do                                                                  \
  |  | 1052|      0|      {                                                                 \
  |  | 1053|      0|        YYPTRDIFF_T yynewbytes;                                         \
  |  |  ------------------
  |  |  |  |  838|      0|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  |  |  ------------------
  |  | 1054|      0|        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
  |  |  ------------------
  |  |  |  | 1069|      0|      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1055|      0|        Stack = &yyptr->Stack_alloc;                                    \
  |  | 1056|      0|        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
  |  |  ------------------
  |  |  |  |  871|      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; \
  |  |  ------------------
  |  |  |  | 1035|      0|# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  871|      0|#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1057|      0|        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
  |  |  ------------------
  |  |  |  |  871|      0|#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1058|      0|      }                                                                 \
  |  | 1059|      0|    while (0)
  |  |  ------------------
  |  |  |  Branch (1059:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5353|      0|        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
  ------------------
  |  | 1051|      0|    do                                                                  \
  |  | 1052|      0|      {                                                                 \
  |  | 1053|      0|        YYPTRDIFF_T yynewbytes;                                         \
  |  |  ------------------
  |  |  |  |  838|      0|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  |  |  ------------------
  |  | 1054|      0|        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
  |  |  ------------------
  |  |  |  | 1069|      0|      __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1055|      0|        Stack = &yyptr->Stack_alloc;                                    \
  |  | 1056|      0|        yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
  |  |  ------------------
  |  |  |  |  871|      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; \
  |  |  ------------------
  |  |  |  | 1035|      0|# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
  |  |  |  |  ------------------
  |  |  |  |  |  |  871|      0|#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1057|      0|        yyptr += yynewbytes / YYSIZEOF (*yyptr);                        \
  |  |  ------------------
  |  |  |  |  871|      0|#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 1058|      0|      }                                                                 \
  |  | 1059|      0|    while (0)
  |  |  ------------------
  |  |  |  Branch (1059:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5354|      0|#  undef YYSTACK_RELOCATE
 5355|      0|        if (yyss1 != yyssa)
  ------------------
  |  Branch (5355:13): [True: 0, False: 0]
  ------------------
 5356|      0|          YYSTACK_FREE (yyss1);
  ------------------
  |  |  996|      0|#  define YYSTACK_FREE YYFREE
  |  |  ------------------
  |  |  |  | 1015|      0|#   define YYFREE free
  |  |  ------------------
  ------------------
 5357|      0|      }
 5358|      0|# endif
 5359|       |
 5360|      0|      yyssp = yyss + yysize - 1;
 5361|      0|      yyvsp = yyvs + yysize - 1;
 5362|       |
 5363|      0|      YY_IGNORE_USELESS_CAST_BEGIN
 5364|      0|      YYDPRINTF ((stderr, "Stack size increased to %ld\n",
  ------------------
  |  | 4791|      0|# define YYDPRINTF(Args)                        \
  |  | 4792|      0|do {                                            \
  |  | 4793|      0|  if (yydebug)                                  \
  |  |  ------------------
  |  |  |  Branch (4793:7): [True: 0, False: 0]
  |  |  ------------------
  |  | 4794|      0|    YYFPRINTF Args;                             \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4795|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (4795:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
 5365|      0|                  YY_CAST (long, yystacksize)));
 5366|      0|      YY_IGNORE_USELESS_CAST_END
 5367|       |
 5368|      0|      if (yyss + yystacksize - 1 <= yyssp)
  ------------------
  |  Branch (5368:11): [True: 0, False: 0]
  ------------------
 5369|      0|        YYABORT;
  ------------------
  |  | 4754|      0|#define YYABORT         goto yyabortlab
  ------------------
 5370|      0|    }
 5371|  17.1M|#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
 5372|       |
 5373|       |
 5374|  17.1M|  if (yystate == YYFINAL)
  ------------------
  |  | 1084|  17.1M|#define YYFINAL  476
  ------------------
  |  Branch (5374:7): [True: 518, False: 17.1M]
  ------------------
 5375|    518|    YYACCEPT;
  ------------------
  |  | 4753|    518|#define YYACCEPT        goto yyacceptlab
  ------------------
 5376|       |
 5377|  17.1M|  goto yybackup;
 5378|       |
 5379|       |
 5380|       |/*-----------.
 5381|       || yybackup.  |
 5382|       |`-----------*/
 5383|  17.1M|yybackup:
 5384|       |  /* Do appropriate processing given the current state.  Read a
 5385|       |     lookahead token if we need one and don't already have one.  */
 5386|       |
 5387|       |  /* First try to decide what to do without reference to lookahead token.  */
 5388|  17.1M|  yyn = yypact[yystate];
 5389|  17.1M|  if (yypact_value_is_default (yyn))
  ------------------
  |  | 1451|  17.1M|  ((Yyn) == YYPACT_NINF)
  |  |  ------------------
  |  |  |  | 1448|  17.1M|#define YYPACT_NINF (-849)
  |  |  ------------------
  |  |  |  Branch (1451:3): [True: 7.13M, False: 10.0M]
  |  |  ------------------
  ------------------
 5390|  7.13M|    goto yydefault;
 5391|       |
 5392|       |  /* Not known => get a lookahead token if don't already have one.  */
 5393|       |
 5394|       |  /* YYCHAR is either empty, or end-of-input, or a valid lookahead.  */
 5395|  10.0M|  if (yychar == YYEMPTY)
  ------------------
  |  Branch (5395:7): [True: 4.56M, False: 5.43M]
  ------------------
 5396|  4.56M|    {
 5397|  4.56M|      YYDPRINTF ((stderr, "Reading a token\n"));
  ------------------
  |  | 4791|  4.56M|# define YYDPRINTF(Args)                        \
  |  | 4792|  4.56M|do {                                            \
  |  | 4793|  4.56M|  if (yydebug)                                  \
  |  |  ------------------
  |  |  |  Branch (4793:7): [True: 0, False: 4.56M]
  |  |  ------------------
  |  | 4794|  4.56M|    YYFPRINTF Args;                             \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4795|  4.56M|} while (0)
  |  |  ------------------
  |  |  |  Branch (4795:10): [Folded, False: 4.56M]
  |  |  ------------------
  ------------------
 5398|  4.56M|      yychar = yylex (&yylval, parseContext);
  ------------------
  |  |  756|  4.56M|#define parseContext (*pParseContext)
  ------------------
 5399|  4.56M|    }
 5400|       |
 5401|  10.0M|  if (yychar <= YYEOF)
  ------------------
  |  Branch (5401:7): [True: 543, False: 9.99M]
  ------------------
 5402|    543|    {
 5403|    543|      yychar = YYEOF;
 5404|    543|      yytoken = YYSYMBOL_YYEOF;
 5405|    543|      YYDPRINTF ((stderr, "Now at end of input.\n"));
  ------------------
  |  | 4791|    543|# define YYDPRINTF(Args)                        \
  |  | 4792|    543|do {                                            \
  |  | 4793|    543|  if (yydebug)                                  \
  |  |  ------------------
  |  |  |  Branch (4793:7): [True: 0, False: 543]
  |  |  ------------------
  |  | 4794|    543|    YYFPRINTF Args;                             \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4795|    543|} while (0)
  |  |  ------------------
  |  |  |  Branch (4795:10): [Folded, False: 543]
  |  |  ------------------
  ------------------
 5406|    543|    }
 5407|  9.99M|  else if (yychar == YYerror)
  ------------------
  |  Branch (5407:12): [True: 0, False: 9.99M]
  ------------------
 5408|      0|    {
 5409|       |      /* The scanner already issued an error message, process directly
 5410|       |         to error recovery.  But do not keep the error token as
 5411|       |         lookahead, it is too special and may lead us to an endless
 5412|       |         loop in error recovery. */
 5413|      0|      yychar = YYUNDEF;
 5414|      0|      yytoken = YYSYMBOL_YYerror;
 5415|      0|      goto yyerrlab1;
 5416|      0|    }
 5417|  9.99M|  else
 5418|  9.99M|    {
 5419|  9.99M|      yytoken = YYTRANSLATE (yychar);
  ------------------
  |  | 1104|  9.99M|  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
  |  |  ------------------
  |  |  |  | 1098|  9.99M|#define YYMAXUTOK   742
  |  |  ------------------
  |  |  |  Branch (1104:4): [True: 9.99M, False: 0]
  |  |  |  Branch (1104:18): [True: 9.99M, False: 0]
  |  |  ------------------
  |  | 1105|  9.99M|   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
  |  |  ------------------
  |  |  |  |  100|  9.99M|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  |  | 1106|  9.99M|   : YYSYMBOL_YYUNDEF)
  ------------------
 5420|  9.99M|      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
  ------------------
  |  | 4800|  9.99M|# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
  |  | 4801|  9.99M|do {                                                                      \
  |  | 4802|  9.99M|  if (yydebug)                                                            \
  |  |  ------------------
  |  |  |  Branch (4802:7): [True: 0, False: 9.99M]
  |  |  ------------------
  |  | 4803|  9.99M|    {                                                                     \
  |  | 4804|      0|      YYFPRINTF (stderr, "%s ", Title);                                   \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4805|      0|      yy_symbol_print (stderr,                                            \
  |  | 4806|      0|                  Kind, Value, pParseContext); \
  |  | 4807|      0|      YYFPRINTF (stderr, "\n");                                           \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4808|      0|    }                                                                     \
  |  | 4809|  9.99M|} while (0)
  |  |  ------------------
  |  |  |  Branch (4809:10): [Folded, False: 9.99M]
  |  |  ------------------
  ------------------
 5421|  9.99M|    }
 5422|       |
 5423|       |  /* If the proper action on seeing token YYTOKEN is to reduce or to
 5424|       |     detect an error, take that action.  */
 5425|  10.0M|  yyn += yytoken;
 5426|  10.0M|  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
  ------------------
  |  | 1086|  10.0M|#define YYLAST   13823
  ------------------
  |  Branch (5426:7): [True: 20, False: 10.0M]
  |  Branch (5426:18): [True: 0, False: 10.0M]
  |  Branch (5426:34): [True: 5.42M, False: 4.57M]
  ------------------
 5427|  5.42M|    goto yydefault;
 5428|  4.57M|  yyn = yytable[yyn];
 5429|  4.57M|  if (yyn <= 0)
  ------------------
  |  Branch (5429:7): [True: 2.18k, False: 4.56M]
  ------------------
 5430|  2.18k|    {
 5431|  2.18k|      if (yytable_value_is_error (yyn))
  ------------------
  |  | 1456|  2.18k|  0
  |  |  ------------------
  |  |  |  Branch (1456:3): [Folded, False: 2.18k]
  |  |  ------------------
  ------------------
 5432|      0|        goto yyerrlab;
 5433|  2.18k|      yyn = -yyn;
 5434|  2.18k|      goto yyreduce;
 5435|  2.18k|    }
 5436|       |
 5437|       |  /* Count tokens shifted since error; after three, turn off error
 5438|       |     status.  */
 5439|  4.56M|  if (yyerrstatus)
  ------------------
  |  Branch (5439:7): [True: 0, False: 4.56M]
  ------------------
 5440|      0|    yyerrstatus--;
 5441|       |
 5442|       |  /* Shift the lookahead token.  */
 5443|  4.56M|  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
  ------------------
  |  | 4800|  4.56M|# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
  |  | 4801|  4.56M|do {                                                                      \
  |  | 4802|  4.56M|  if (yydebug)                                                            \
  |  |  ------------------
  |  |  |  Branch (4802:7): [True: 0, False: 4.56M]
  |  |  ------------------
  |  | 4803|  4.56M|    {                                                                     \
  |  | 4804|      0|      YYFPRINTF (stderr, "%s ", Title);                                   \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4805|      0|      yy_symbol_print (stderr,                                            \
  |  | 4806|      0|                  Kind, Value, pParseContext); \
  |  | 4807|      0|      YYFPRINTF (stderr, "\n");                                           \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4808|      0|    }                                                                     \
  |  | 4809|  4.56M|} while (0)
  |  |  ------------------
  |  |  |  Branch (4809:10): [Folded, False: 4.56M]
  |  |  ------------------
  ------------------
 5444|  4.56M|  yystate = yyn;
 5445|  4.56M|  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
 5446|  4.56M|  *++yyvsp = yylval;
 5447|  4.56M|  YY_IGNORE_MAYBE_UNINITIALIZED_END
 5448|       |
 5449|       |  /* Discard the shifted token.  */
 5450|  4.56M|  yychar = YYEMPTY;
 5451|  4.56M|  goto yynewstate;
 5452|       |
 5453|       |
 5454|       |/*-----------------------------------------------------------.
 5455|       || yydefault -- do the default action for the current state.  |
 5456|       |`-----------------------------------------------------------*/
 5457|  12.5M|yydefault:
 5458|  12.5M|  yyn = yydefact[yystate];
 5459|  12.5M|  if (yyn == 0)
  ------------------
  |  Branch (5459:7): [True: 22, False: 12.5M]
  ------------------
 5460|     22|    goto yyerrlab;
 5461|  12.5M|  goto yyreduce;
 5462|       |
 5463|       |
 5464|       |/*-----------------------------.
 5465|       || yyreduce -- do a reduction.  |
 5466|       |`-----------------------------*/
 5467|  12.5M|yyreduce:
 5468|       |  /* yyn is the number of a rule to reduce with.  */
 5469|  12.5M|  yylen = yyr2[yyn];
 5470|       |
 5471|       |  /* If YYLEN is nonzero, implement the default value of the action:
 5472|       |     '$$ = $1'.
 5473|       |
 5474|       |     Otherwise, the following line sets YYVAL to garbage.
 5475|       |     This behavior is undocumented and Bison
 5476|       |     users should not rely upon it.  Assigning to YYVAL
 5477|       |     unconditionally makes the parser a bit smaller, and it avoids a
 5478|       |     GCC warning that YYVAL may be used uninitialized.  */
 5479|  12.5M|  yyval = yyvsp[1-yylen];
 5480|       |
 5481|       |
 5482|  12.5M|  YY_REDUCE_PRINT (yyn);
  ------------------
  |  | 4894|  12.5M|# define YY_REDUCE_PRINT(Rule)          \
  |  | 4895|  12.5M|do {                                    \
  |  | 4896|  12.5M|  if (yydebug)                          \
  |  |  ------------------
  |  |  |  Branch (4896:7): [True: 0, False: 12.5M]
  |  |  ------------------
  |  | 4897|  12.5M|    yy_reduce_print (yyssp, yyvsp, Rule, pParseContext); \
  |  | 4898|  12.5M|} while (0)
  |  |  ------------------
  |  |  |  Branch (4898:10): [Folded, False: 12.5M]
  |  |  ------------------
  ------------------
 5483|  12.5M|  switch (yyn)
 5484|  12.5M|    {
 5485|  10.9k|  case 2: /* variable_identifier: IDENTIFIER  */
  ------------------
  |  Branch (5485:3): [True: 10.9k, False: 12.5M]
  ------------------
 5486|  10.9k|#line 365 "MachineIndependent/glslang.y"
 5487|  10.9k|                 {
 5488|  10.9k|        (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
  ------------------
  |  |  756|  10.9k|#define parseContext (*pParseContext)
  ------------------
 5489|  10.9k|    }
 5490|  10.9k|#line 5491 "MachineIndependent/glslang_tab.cpp"
 5491|  10.9k|    break;
 5492|       |
 5493|  10.9k|  case 3: /* primary_expression: variable_identifier  */
  ------------------
  |  Branch (5493:3): [True: 10.9k, False: 12.5M]
  ------------------
 5494|  10.9k|#line 371 "MachineIndependent/glslang.y"
 5495|  10.9k|                          {
 5496|  10.9k|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 5497|  10.9k|    }
 5498|  10.9k|#line 5499 "MachineIndependent/glslang_tab.cpp"
 5499|  10.9k|    break;
 5500|       |
 5501|      0|  case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN  */
  ------------------
  |  Branch (5501:3): [True: 0, False: 12.5M]
  ------------------
 5502|      0|#line 374 "MachineIndependent/glslang.y"
 5503|      0|                                        {
 5504|      0|        (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
 5505|      0|        if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
  ------------------
  |  Branch (5505:13): [True: 0, False: 0]
  ------------------
 5506|      0|            (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
 5507|      0|    }
 5508|      0|#line 5509 "MachineIndependent/glslang_tab.cpp"
 5509|      0|    break;
 5510|       |
 5511|    219|  case 5: /* primary_expression: FLOATCONSTANT  */
  ------------------
  |  Branch (5511:3): [True: 219, False: 12.5M]
  ------------------
 5512|    219|#line 379 "MachineIndependent/glslang.y"
 5513|    219|                    {
 5514|    219|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|    219|#define parseContext (*pParseContext)
  ------------------
 5515|    219|    }
 5516|    219|#line 5517 "MachineIndependent/glslang_tab.cpp"
 5517|    219|    break;
 5518|       |
 5519|  8.37k|  case 6: /* primary_expression: INTCONSTANT  */
  ------------------
  |  Branch (5519:3): [True: 8.37k, False: 12.5M]
  ------------------
 5520|  8.37k|#line 382 "MachineIndependent/glslang.y"
 5521|  8.37k|                  {
 5522|  8.37k|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|  8.37k|#define parseContext (*pParseContext)
  ------------------
 5523|  8.37k|    }
 5524|  8.37k|#line 5525 "MachineIndependent/glslang_tab.cpp"
 5525|  8.37k|    break;
 5526|       |
 5527|    322|  case 7: /* primary_expression: UINTCONSTANT  */
  ------------------
  |  Branch (5527:3): [True: 322, False: 12.5M]
  ------------------
 5528|    322|#line 385 "MachineIndependent/glslang.y"
 5529|    322|                   {
 5530|    322|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
  ------------------
  |  |  756|    322|#define parseContext (*pParseContext)
  ------------------
 5531|    322|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|    322|#define parseContext (*pParseContext)
  ------------------
 5532|    322|    }
 5533|    322|#line 5534 "MachineIndependent/glslang_tab.cpp"
 5534|    322|    break;
 5535|       |
 5536|      0|  case 8: /* primary_expression: BOOLCONSTANT  */
  ------------------
  |  Branch (5536:3): [True: 0, False: 12.5M]
  ------------------
 5537|      0|#line 389 "MachineIndependent/glslang.y"
 5538|      0|                   {
 5539|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5540|      0|    }
 5541|      0|#line 5542 "MachineIndependent/glslang_tab.cpp"
 5542|      0|    break;
 5543|       |
 5544|      0|  case 9: /* primary_expression: STRING_LITERAL  */
  ------------------
  |  Branch (5544:3): [True: 0, False: 12.5M]
  ------------------
 5545|      0|#line 392 "MachineIndependent/glslang.y"
 5546|      0|                     {
 5547|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5548|      0|    }
 5549|      0|#line 5550 "MachineIndependent/glslang_tab.cpp"
 5550|      0|    break;
 5551|       |
 5552|      0|  case 10: /* primary_expression: INT32CONSTANT  */
  ------------------
  |  Branch (5552:3): [True: 0, False: 12.5M]
  ------------------
 5553|      0|#line 395 "MachineIndependent/glslang.y"
 5554|      0|                    {
 5555|      0|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5556|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5557|      0|    }
 5558|      0|#line 5559 "MachineIndependent/glslang_tab.cpp"
 5559|      0|    break;
 5560|       |
 5561|      0|  case 11: /* primary_expression: UINT32CONSTANT  */
  ------------------
  |  Branch (5561:3): [True: 0, False: 12.5M]
  ------------------
 5562|      0|#line 399 "MachineIndependent/glslang.y"
 5563|      0|                     {
 5564|      0|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5565|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5566|      0|    }
 5567|      0|#line 5568 "MachineIndependent/glslang_tab.cpp"
 5568|      0|    break;
 5569|       |
 5570|      0|  case 12: /* primary_expression: INT64CONSTANT  */
  ------------------
  |  Branch (5570:3): [True: 0, False: 12.5M]
  ------------------
 5571|      0|#line 403 "MachineIndependent/glslang.y"
 5572|      0|                    {
 5573|      0|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5574|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5575|      0|    }
 5576|      0|#line 5577 "MachineIndependent/glslang_tab.cpp"
 5577|      0|    break;
 5578|       |
 5579|      0|  case 13: /* primary_expression: UINT64CONSTANT  */
  ------------------
  |  Branch (5579:3): [True: 0, False: 12.5M]
  ------------------
 5580|      0|#line 407 "MachineIndependent/glslang.y"
 5581|      0|                     {
 5582|      0|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5583|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5584|      0|    }
 5585|      0|#line 5586 "MachineIndependent/glslang_tab.cpp"
 5586|      0|    break;
 5587|       |
 5588|      0|  case 14: /* primary_expression: INT16CONSTANT  */
  ------------------
  |  Branch (5588:3): [True: 0, False: 12.5M]
  ------------------
 5589|      0|#line 411 "MachineIndependent/glslang.y"
 5590|      0|                    {
 5591|      0|        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5592|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5593|      0|    }
 5594|      0|#line 5595 "MachineIndependent/glslang_tab.cpp"
 5595|      0|    break;
 5596|       |
 5597|      0|  case 15: /* primary_expression: UINT16CONSTANT  */
  ------------------
  |  Branch (5597:3): [True: 0, False: 12.5M]
  ------------------
 5598|      0|#line 415 "MachineIndependent/glslang.y"
 5599|      0|                     {
 5600|      0|        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5601|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5602|      0|    }
 5603|      0|#line 5604 "MachineIndependent/glslang_tab.cpp"
 5604|      0|    break;
 5605|       |
 5606|      0|  case 16: /* primary_expression: DOUBLECONSTANT  */
  ------------------
  |  Branch (5606:3): [True: 0, False: 12.5M]
  ------------------
 5607|      0|#line 419 "MachineIndependent/glslang.y"
 5608|      0|                     {
 5609|      0|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5610|      0|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (5610:13): [True: 0, False: 0]
  ------------------
 5611|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5612|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5613|      0|    }
 5614|      0|#line 5615 "MachineIndependent/glslang_tab.cpp"
 5615|      0|    break;
 5616|       |
 5617|      0|  case 17: /* primary_expression: FLOAT16CONSTANT  */
  ------------------
  |  Branch (5617:3): [True: 0, False: 12.5M]
  ------------------
 5618|      0|#line 425 "MachineIndependent/glslang.y"
 5619|      0|                      {
 5620|      0|        parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5621|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5622|      0|    }
 5623|      0|#line 5624 "MachineIndependent/glslang_tab.cpp"
 5624|      0|    break;
 5625|       |
 5626|  19.8k|  case 18: /* postfix_expression: primary_expression  */
  ------------------
  |  Branch (5626:3): [True: 19.8k, False: 12.5M]
  ------------------
 5627|  19.8k|#line 432 "MachineIndependent/glslang.y"
 5628|  19.8k|                         {
 5629|  19.8k|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 5630|  19.8k|    }
 5631|  19.8k|#line 5632 "MachineIndependent/glslang_tab.cpp"
 5632|  19.8k|    break;
 5633|       |
 5634|      0|  case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET  */
  ------------------
  |  Branch (5634:3): [True: 0, False: 12.5M]
  ------------------
 5635|      0|#line 435 "MachineIndependent/glslang.y"
 5636|      0|                                                                       {
 5637|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5638|      0|    }
 5639|      0|#line 5640 "MachineIndependent/glslang_tab.cpp"
 5640|      0|    break;
 5641|       |
 5642|  2.99k|  case 20: /* postfix_expression: function_call  */
  ------------------
  |  Branch (5642:3): [True: 2.99k, False: 12.5M]
  ------------------
 5643|  2.99k|#line 438 "MachineIndependent/glslang.y"
 5644|  2.99k|                    {
 5645|  2.99k|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 5646|  2.99k|    }
 5647|  2.99k|#line 5648 "MachineIndependent/glslang_tab.cpp"
 5648|  2.99k|    break;
 5649|       |
 5650|    582|  case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER  */
  ------------------
  |  Branch (5650:3): [True: 582, False: 12.5M]
  ------------------
 5651|    582|#line 441 "MachineIndependent/glslang.y"
 5652|    582|                                        {
 5653|    582|        (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
  ------------------
  |  |  756|    582|#define parseContext (*pParseContext)
  ------------------
 5654|    582|    }
 5655|    582|#line 5656 "MachineIndependent/glslang_tab.cpp"
 5656|    582|    break;
 5657|       |
 5658|      0|  case 22: /* postfix_expression: postfix_expression INC_OP  */
  ------------------
  |  Branch (5658:3): [True: 0, False: 12.5M]
  ------------------
 5659|      0|#line 444 "MachineIndependent/glslang.y"
 5660|      0|                                {
 5661|      0|        parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5662|      0|        parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5663|      0|        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5664|      0|    }
 5665|      0|#line 5666 "MachineIndependent/glslang_tab.cpp"
 5666|      0|    break;
 5667|       |
 5668|      0|  case 23: /* postfix_expression: postfix_expression DEC_OP  */
  ------------------
  |  Branch (5668:3): [True: 0, False: 12.5M]
  ------------------
 5669|      0|#line 449 "MachineIndependent/glslang.y"
 5670|      0|                                {
 5671|      0|        parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5672|      0|        parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5673|      0|        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5674|      0|    }
 5675|      0|#line 5676 "MachineIndependent/glslang_tab.cpp"
 5676|      0|    break;
 5677|       |
 5678|      0|  case 24: /* integer_expression: expression  */
  ------------------
  |  Branch (5678:3): [True: 0, False: 12.5M]
  ------------------
 5679|      0|#line 457 "MachineIndependent/glslang.y"
 5680|      0|                 {
 5681|      0|        parseContext.arrayIndexCheck((yyvsp[0].interm.intermTypedNode), "[]");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5682|      0|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 5683|      0|    }
 5684|      0|#line 5685 "MachineIndependent/glslang_tab.cpp"
 5685|      0|    break;
 5686|       |
 5687|  2.99k|  case 25: /* function_call: function_call_or_method  */
  ------------------
  |  Branch (5687:3): [True: 2.99k, False: 12.5M]
  ------------------
 5688|  2.99k|#line 464 "MachineIndependent/glslang.y"
 5689|  2.99k|                              {
 5690|  2.99k|        (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
  ------------------
  |  |  756|  2.99k|#define parseContext (*pParseContext)
  ------------------
 5691|  2.99k|        delete (yyvsp[0].interm).function;
 5692|  2.99k|    }
 5693|  2.99k|#line 5694 "MachineIndependent/glslang_tab.cpp"
 5694|  2.99k|    break;
 5695|       |
 5696|  2.99k|  case 26: /* function_call_or_method: function_call_generic  */
  ------------------
  |  Branch (5696:3): [True: 2.99k, False: 12.5M]
  ------------------
 5697|  2.99k|#line 471 "MachineIndependent/glslang.y"
 5698|  2.99k|                            {
 5699|  2.99k|        (yyval.interm) = (yyvsp[0].interm);
 5700|  2.99k|    }
 5701|  2.99k|#line 5702 "MachineIndependent/glslang_tab.cpp"
 5702|  2.99k|    break;
 5703|       |
 5704|  2.84k|  case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN  */
  ------------------
  |  Branch (5704:3): [True: 2.84k, False: 12.5M]
  ------------------
 5705|  2.84k|#line 477 "MachineIndependent/glslang.y"
 5706|  2.84k|                                                       {
 5707|  2.84k|        (yyval.interm) = (yyvsp[-1].interm);
 5708|  2.84k|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 5709|  2.84k|    }
 5710|  2.84k|#line 5711 "MachineIndependent/glslang_tab.cpp"
 5711|  2.84k|    break;
 5712|       |
 5713|    144|  case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN  */
  ------------------
  |  Branch (5713:3): [True: 144, False: 12.5M]
  ------------------
 5714|    144|#line 481 "MachineIndependent/glslang.y"
 5715|    144|                                                     {
 5716|    144|        (yyval.interm) = (yyvsp[-1].interm);
 5717|    144|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 5718|    144|    }
 5719|    144|#line 5720 "MachineIndependent/glslang_tab.cpp"
 5720|    144|    break;
 5721|       |
 5722|      0|  case 29: /* function_call_header_no_parameters: function_call_header VOID  */
  ------------------
  |  Branch (5722:3): [True: 0, False: 12.5M]
  ------------------
 5723|      0|#line 488 "MachineIndependent/glslang.y"
 5724|      0|                                {
 5725|      0|        (yyval.interm) = (yyvsp[-1].interm);
 5726|      0|    }
 5727|      0|#line 5728 "MachineIndependent/glslang_tab.cpp"
 5728|      0|    break;
 5729|       |
 5730|    144|  case 30: /* function_call_header_no_parameters: function_call_header  */
  ------------------
  |  Branch (5730:3): [True: 144, False: 12.5M]
  ------------------
 5731|    144|#line 491 "MachineIndependent/glslang.y"
 5732|    144|                           {
 5733|    144|        (yyval.interm) = (yyvsp[0].interm);
 5734|    144|    }
 5735|    144|#line 5736 "MachineIndependent/glslang_tab.cpp"
 5736|    144|    break;
 5737|       |
 5738|  2.84k|  case 31: /* function_call_header_with_parameters: function_call_header assignment_expression  */
  ------------------
  |  Branch (5738:3): [True: 2.84k, False: 12.5M]
  ------------------
 5739|  2.84k|#line 497 "MachineIndependent/glslang.y"
 5740|  2.84k|                                                 {
 5741|  2.84k|        if (parseContext.spvVersion.vulkan > 0
  ------------------
  |  |  756|  2.84k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (5741:13): [True: 2.84k, False: 0]
  ------------------
 5742|  2.84k|            && parseContext.spvVersion.vulkanRelaxed
  ------------------
  |  |  756|  2.84k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (5742:16): [True: 0, False: 2.84k]
  ------------------
 5743|      0|            && (yyvsp[0].interm.intermTypedNode)->getType().containsOpaque())
  ------------------
  |  Branch (5743:16): [True: 0, False: 0]
  ------------------
 5744|      0|        {
 5745|      0|            (yyval.interm).intermNode = parseContext.vkRelaxedRemapFunctionArgument((yyval.interm).loc, (yyvsp[-1].interm).function, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5746|      0|            (yyval.interm).function = (yyvsp[-1].interm).function;
 5747|      0|        }
 5748|  2.84k|        else
 5749|  2.84k|        {
 5750|  2.84k|            TParameter param = { 0, new TType, {} };
 5751|  2.84k|            param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
 5752|       |
 5753|  2.84k|            (yyvsp[-1].interm).function->addParameter(param);
 5754|  2.84k|            (yyval.interm).function = (yyvsp[-1].interm).function;
 5755|  2.84k|            (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
 5756|  2.84k|        }
 5757|  2.84k|    }
 5758|  2.84k|#line 5759 "MachineIndependent/glslang_tab.cpp"
 5759|  2.84k|    break;
 5760|       |
 5761|  5.22k|  case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression  */
  ------------------
  |  Branch (5761:3): [True: 5.22k, False: 12.5M]
  ------------------
 5762|  5.22k|#line 515 "MachineIndependent/glslang.y"
 5763|  5.22k|                                                                       {
 5764|  5.22k|        if (parseContext.spvVersion.vulkan > 0
  ------------------
  |  |  756|  5.22k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (5764:13): [True: 5.22k, False: 0]
  ------------------
 5765|  5.22k|            && parseContext.spvVersion.vulkanRelaxed
  ------------------
  |  |  756|  5.22k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (5765:16): [True: 0, False: 5.22k]
  ------------------
 5766|      0|            && (yyvsp[0].interm.intermTypedNode)->getType().containsOpaque())
  ------------------
  |  Branch (5766:16): [True: 0, False: 0]
  ------------------
 5767|      0|        {
 5768|      0|            TIntermNode* remappedNode = parseContext.vkRelaxedRemapFunctionArgument((yyvsp[-1].lex).loc, (yyvsp[-2].interm).function, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5769|      0|            if (remappedNode == (yyvsp[0].interm.intermTypedNode))
  ------------------
  |  Branch (5769:17): [True: 0, False: 0]
  ------------------
 5770|      0|                (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5771|      0|            else
 5772|      0|                (yyval.interm).intermNode = parseContext.intermediate.mergeAggregate((yyvsp[-2].interm).intermNode, remappedNode, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5773|      0|            (yyval.interm).function = (yyvsp[-2].interm).function;
 5774|      0|        }
 5775|  5.22k|        else
 5776|  5.22k|        {
 5777|  5.22k|            TParameter param = { 0, new TType, {} };
 5778|  5.22k|            param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
 5779|       |
 5780|  5.22k|            (yyvsp[-2].interm).function->addParameter(param);
 5781|  5.22k|            (yyval.interm).function = (yyvsp[-2].interm).function;
 5782|  5.22k|            (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|  5.22k|#define parseContext (*pParseContext)
  ------------------
 5783|  5.22k|        }
 5784|  5.22k|    }
 5785|  5.22k|#line 5786 "MachineIndependent/glslang_tab.cpp"
 5786|  5.22k|    break;
 5787|       |
 5788|  2.99k|  case 33: /* function_call_header: function_identifier LEFT_PAREN  */
  ------------------
  |  Branch (5788:3): [True: 2.99k, False: 12.5M]
  ------------------
 5789|  2.99k|#line 540 "MachineIndependent/glslang.y"
 5790|  2.99k|                                     {
 5791|  2.99k|        (yyval.interm) = (yyvsp[-1].interm);
 5792|  2.99k|    }
 5793|  2.99k|#line 5794 "MachineIndependent/glslang_tab.cpp"
 5794|  2.99k|    break;
 5795|       |
 5796|    807|  case 34: /* function_identifier: type_specifier  */
  ------------------
  |  Branch (5796:3): [True: 807, False: 12.5M]
  ------------------
 5797|    807|#line 548 "MachineIndependent/glslang.y"
 5798|    807|                     {
 5799|       |        // Constructor
 5800|    807|        (yyval.interm).intermNode = 0;
 5801|    807|        (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
  ------------------
  |  |  756|    807|#define parseContext (*pParseContext)
  ------------------
 5802|    807|    }
 5803|    807|#line 5804 "MachineIndependent/glslang_tab.cpp"
 5804|    807|    break;
 5805|       |
 5806|  2.18k|  case 35: /* function_identifier: postfix_expression  */
  ------------------
  |  Branch (5806:3): [True: 2.18k, False: 12.5M]
  ------------------
 5807|  2.18k|#line 553 "MachineIndependent/glslang.y"
 5808|  2.18k|                         {
 5809|       |        //
 5810|       |        // Should be a method or subroutine call, but we haven't recognized the arguments yet.
 5811|       |        //
 5812|  2.18k|        (yyval.interm).function = 0;
 5813|  2.18k|        (yyval.interm).intermNode = 0;
 5814|       |
 5815|  2.18k|        TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode();
 5816|  2.18k|        if (method) {
  ------------------
  |  Branch (5816:13): [True: 0, False: 2.18k]
  ------------------
 5817|      0|            (yyval.interm).function = new TFunction(&method->getMethodName(), method->getType(), EOpArrayLength);
 5818|      0|            (yyval.interm).intermNode = method->getObject();
 5819|  2.18k|        } else {
 5820|  2.18k|            TIntermSymbol* symbol = (yyvsp[0].interm.intermTypedNode)->getAsSymbolNode();
 5821|  2.18k|            if (symbol) {
  ------------------
  |  Branch (5821:17): [True: 2.18k, False: 0]
  ------------------
 5822|  2.18k|                parseContext.reservedErrorCheck(symbol->getLoc(), symbol->getName());
  ------------------
  |  |  756|  2.18k|#define parseContext (*pParseContext)
  ------------------
 5823|  2.18k|                TFunction *function = new TFunction(&symbol->getName(), TType(EbtVoid));
 5824|  2.18k|                (yyval.interm).function = function;
 5825|  2.18k|            } else
 5826|      0|                parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "function call, method, or subroutine call expected", "", "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5827|  2.18k|        }
 5828|       |
 5829|  2.18k|        if ((yyval.interm).function == 0) {
  ------------------
  |  Branch (5829:13): [True: 0, False: 2.18k]
  ------------------
 5830|       |            // error recover
 5831|      0|            TString* empty = NewPoolTString("");
 5832|      0|            (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
 5833|      0|        }
 5834|  2.18k|    }
 5835|  2.18k|#line 5836 "MachineIndependent/glslang_tab.cpp"
 5836|  2.18k|    break;
 5837|       |
 5838|      0|  case 36: /* function_identifier: non_uniform_qualifier  */
  ------------------
  |  Branch (5838:3): [True: 0, False: 12.5M]
  ------------------
 5839|      0|#line 580 "MachineIndependent/glslang.y"
 5840|      0|                            {
 5841|       |        // Constructor
 5842|      0|        (yyval.interm).intermNode = 0;
 5843|      0|        (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5844|      0|    }
 5845|      0|#line 5846 "MachineIndependent/glslang_tab.cpp"
 5846|      0|    break;
 5847|       |
 5848|  20.6k|  case 37: /* unary_expression: postfix_expression  */
  ------------------
  |  Branch (5848:3): [True: 20.6k, False: 12.5M]
  ------------------
 5849|  20.6k|#line 588 "MachineIndependent/glslang.y"
 5850|  20.6k|                         {
 5851|  20.6k|        parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|  20.6k|#define parseContext (*pParseContext)
  ------------------
 5852|  20.6k|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 5853|  20.6k|        if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
  ------------------
  |  Branch (5853:28): [True: 0, False: 20.6k]
  ------------------
 5854|      0|            parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5855|  20.6k|    }
 5856|  20.6k|#line 5857 "MachineIndependent/glslang_tab.cpp"
 5857|  20.6k|    break;
 5858|       |
 5859|      0|  case 38: /* unary_expression: INC_OP unary_expression  */
  ------------------
  |  Branch (5859:3): [True: 0, False: 12.5M]
  ------------------
 5860|      0|#line 594 "MachineIndependent/glslang.y"
 5861|      0|                              {
 5862|      0|        parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5863|      0|        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5864|      0|    }
 5865|      0|#line 5866 "MachineIndependent/glslang_tab.cpp"
 5866|      0|    break;
 5867|       |
 5868|      0|  case 39: /* unary_expression: DEC_OP unary_expression  */
  ------------------
  |  Branch (5868:3): [True: 0, False: 12.5M]
  ------------------
 5869|      0|#line 598 "MachineIndependent/glslang.y"
 5870|      0|                              {
 5871|      0|        parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5872|      0|        (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5873|      0|    }
 5874|      0|#line 5875 "MachineIndependent/glslang_tab.cpp"
 5875|      0|    break;
 5876|       |
 5877|    103|  case 40: /* unary_expression: unary_operator unary_expression  */
  ------------------
  |  Branch (5877:3): [True: 103, False: 12.5M]
  ------------------
 5878|    103|#line 602 "MachineIndependent/glslang.y"
 5879|    103|                                      {
 5880|    103|        if ((yyvsp[-1].interm).op != EOpNull) {
  ------------------
  |  Branch (5880:13): [True: 103, False: 0]
  ------------------
 5881|    103|            char errorOp[2] = {0, 0};
 5882|    103|            switch((yyvsp[-1].interm).op) {
 5883|    103|            case EOpNegative:   errorOp[0] = '-'; break;
  ------------------
  |  Branch (5883:13): [True: 103, False: 0]
  ------------------
 5884|      0|            case EOpLogicalNot: errorOp[0] = '!'; break;
  ------------------
  |  Branch (5884:13): [True: 0, False: 103]
  ------------------
 5885|      0|            case EOpBitwiseNot: errorOp[0] = '~'; break;
  ------------------
  |  Branch (5885:13): [True: 0, False: 103]
  ------------------
 5886|      0|            default: break; // some compilers want this
  ------------------
  |  Branch (5886:13): [True: 0, False: 103]
  ------------------
 5887|    103|            }
 5888|    103|            (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].interm).loc, errorOp, (yyvsp[-1].interm).op, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|    103|#define parseContext (*pParseContext)
  ------------------
 5889|    103|        } else {
 5890|      0|            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 5891|      0|            if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
  ------------------
  |  Branch (5891:17): [True: 0, False: 0]
  ------------------
 5892|      0|                (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
 5893|      0|        }
 5894|    103|    }
 5895|    103|#line 5896 "MachineIndependent/glslang_tab.cpp"
 5896|    103|    break;
 5897|       |
 5898|    103|  case 41: /* unary_expression: LEFT_PAREN type_specifier_nonarray RIGHT_PAREN unary_expression  */
  ------------------
  |  Branch (5898:3): [True: 0, False: 12.5M]
  ------------------
 5899|      0|#line 618 "MachineIndependent/glslang.y"
 5900|      0|                                                                      {
 5901|      0|        (yyval.interm.intermTypedNode) = parseContext.handleTypeCast((yyvsp[-3].lex).loc, new TType((yyvsp[-2].interm.type)), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5902|      0|    }
 5903|      0|#line 5904 "MachineIndependent/glslang_tab.cpp"
 5904|      0|    break;
 5905|       |
 5906|      0|  case 42: /* unary_operator: PLUS  */
  ------------------
  |  Branch (5906:3): [True: 0, False: 12.5M]
  ------------------
 5907|      0|#line 625 "MachineIndependent/glslang.y"
 5908|      0|            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
 5909|      0|#line 5910 "MachineIndependent/glslang_tab.cpp"
 5910|      0|    break;
 5911|       |
 5912|    103|  case 43: /* unary_operator: DASH  */
  ------------------
  |  Branch (5912:3): [True: 103, False: 12.5M]
  ------------------
 5913|    103|#line 626 "MachineIndependent/glslang.y"
 5914|    103|            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
 5915|    103|#line 5916 "MachineIndependent/glslang_tab.cpp"
 5916|    103|    break;
 5917|       |
 5918|      0|  case 44: /* unary_operator: BANG  */
  ------------------
  |  Branch (5918:3): [True: 0, False: 12.5M]
  ------------------
 5919|      0|#line 627 "MachineIndependent/glslang.y"
 5920|      0|            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
 5921|      0|#line 5922 "MachineIndependent/glslang_tab.cpp"
 5922|      0|    break;
 5923|       |
 5924|      0|  case 45: /* unary_operator: TILDE  */
  ------------------
  |  Branch (5924:3): [True: 0, False: 12.5M]
  ------------------
 5925|      0|#line 628 "MachineIndependent/glslang.y"
 5926|      0|            { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
 5927|      0|              parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5928|      0|#line 5929 "MachineIndependent/glslang_tab.cpp"
 5929|      0|    break;
 5930|       |
 5931|  19.0k|  case 46: /* multiplicative_expression: unary_expression  */
  ------------------
  |  Branch (5931:3): [True: 19.0k, False: 12.5M]
  ------------------
 5932|  19.0k|#line 634 "MachineIndependent/glslang.y"
 5933|  19.0k|                       { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 5934|  19.0k|#line 5935 "MachineIndependent/glslang_tab.cpp"
 5935|  19.0k|    break;
 5936|       |
 5937|      0|  case 47: /* multiplicative_expression: multiplicative_expression STAR unary_expression  */
  ------------------
  |  Branch (5937:3): [True: 0, False: 12.5M]
  ------------------
 5938|      0|#line 635 "MachineIndependent/glslang.y"
 5939|      0|                                                      {
 5940|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5941|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (5941:13): [True: 0, False: 0]
  ------------------
 5942|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 5943|      0|    }
 5944|      0|#line 5945 "MachineIndependent/glslang_tab.cpp"
 5945|      0|    break;
 5946|       |
 5947|      0|  case 48: /* multiplicative_expression: multiplicative_expression SLASH unary_expression  */
  ------------------
  |  Branch (5947:3): [True: 0, False: 12.5M]
  ------------------
 5948|      0|#line 640 "MachineIndependent/glslang.y"
 5949|      0|                                                       {
 5950|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5951|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (5951:13): [True: 0, False: 0]
  ------------------
 5952|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 5953|      0|    }
 5954|      0|#line 5955 "MachineIndependent/glslang_tab.cpp"
 5955|      0|    break;
 5956|       |
 5957|      0|  case 49: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression  */
  ------------------
  |  Branch (5957:3): [True: 0, False: 12.5M]
  ------------------
 5958|      0|#line 645 "MachineIndependent/glslang.y"
 5959|      0|                                                         {
 5960|      0|        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5961|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5962|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (5962:13): [True: 0, False: 0]
  ------------------
 5963|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 5964|      0|    }
 5965|      0|#line 5966 "MachineIndependent/glslang_tab.cpp"
 5966|      0|    break;
 5967|       |
 5968|  19.0k|  case 50: /* additive_expression: multiplicative_expression  */
  ------------------
  |  Branch (5968:3): [True: 19.0k, False: 12.5M]
  ------------------
 5969|  19.0k|#line 654 "MachineIndependent/glslang.y"
 5970|  19.0k|                                { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 5971|  19.0k|#line 5972 "MachineIndependent/glslang_tab.cpp"
 5972|  19.0k|    break;
 5973|       |
 5974|      3|  case 51: /* additive_expression: additive_expression PLUS multiplicative_expression  */
  ------------------
  |  Branch (5974:3): [True: 3, False: 12.5M]
  ------------------
 5975|      3|#line 655 "MachineIndependent/glslang.y"
 5976|      3|                                                         {
 5977|      3|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      3|#define parseContext (*pParseContext)
  ------------------
 5978|      3|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (5978:13): [True: 0, False: 3]
  ------------------
 5979|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 5980|      3|    }
 5981|      3|#line 5982 "MachineIndependent/glslang_tab.cpp"
 5982|      3|    break;
 5983|       |
 5984|      0|  case 52: /* additive_expression: additive_expression DASH multiplicative_expression  */
  ------------------
  |  Branch (5984:3): [True: 0, False: 12.5M]
  ------------------
 5985|      0|#line 660 "MachineIndependent/glslang.y"
 5986|      0|                                                         {
 5987|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 5988|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (5988:13): [True: 0, False: 0]
  ------------------
 5989|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 5990|      0|    }
 5991|      0|#line 5992 "MachineIndependent/glslang_tab.cpp"
 5992|      0|    break;
 5993|       |
 5994|  19.0k|  case 53: /* shift_expression: additive_expression  */
  ------------------
  |  Branch (5994:3): [True: 19.0k, False: 12.5M]
  ------------------
 5995|  19.0k|#line 668 "MachineIndependent/glslang.y"
 5996|  19.0k|                          { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 5997|  19.0k|#line 5998 "MachineIndependent/glslang_tab.cpp"
 5998|  19.0k|    break;
 5999|       |
 6000|      0|  case 54: /* shift_expression: shift_expression LEFT_OP additive_expression  */
  ------------------
  |  Branch (6000:3): [True: 0, False: 12.5M]
  ------------------
 6001|      0|#line 669 "MachineIndependent/glslang.y"
 6002|      0|                                                   {
 6003|      0|        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6004|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6005|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6005:13): [True: 0, False: 0]
  ------------------
 6006|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6007|      0|    }
 6008|      0|#line 6009 "MachineIndependent/glslang_tab.cpp"
 6009|      0|    break;
 6010|       |
 6011|      0|  case 55: /* shift_expression: shift_expression RIGHT_OP additive_expression  */
  ------------------
  |  Branch (6011:3): [True: 0, False: 12.5M]
  ------------------
 6012|      0|#line 675 "MachineIndependent/glslang.y"
 6013|      0|                                                    {
 6014|      0|        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6015|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6016|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6016:13): [True: 0, False: 0]
  ------------------
 6017|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6018|      0|    }
 6019|      0|#line 6020 "MachineIndependent/glslang_tab.cpp"
 6020|      0|    break;
 6021|       |
 6022|  19.0k|  case 56: /* relational_expression: shift_expression  */
  ------------------
  |  Branch (6022:3): [True: 19.0k, False: 12.5M]
  ------------------
 6023|  19.0k|#line 684 "MachineIndependent/glslang.y"
 6024|  19.0k|                       { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6025|  19.0k|#line 6026 "MachineIndependent/glslang_tab.cpp"
 6026|  19.0k|    break;
 6027|       |
 6028|      0|  case 57: /* relational_expression: relational_expression LEFT_ANGLE shift_expression  */
  ------------------
  |  Branch (6028:3): [True: 0, False: 12.5M]
  ------------------
 6029|      0|#line 685 "MachineIndependent/glslang.y"
 6030|      0|                                                        {
 6031|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6032|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6032:13): [True: 0, False: 0]
  ------------------
 6033|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6034|      0|    }
 6035|      0|#line 6036 "MachineIndependent/glslang_tab.cpp"
 6036|      0|    break;
 6037|       |
 6038|      0|  case 58: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression  */
  ------------------
  |  Branch (6038:3): [True: 0, False: 12.5M]
  ------------------
 6039|      0|#line 690 "MachineIndependent/glslang.y"
 6040|      0|                                                          {
 6041|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6042|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6042:13): [True: 0, False: 0]
  ------------------
 6043|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6044|      0|    }
 6045|      0|#line 6046 "MachineIndependent/glslang_tab.cpp"
 6046|      0|    break;
 6047|       |
 6048|      0|  case 59: /* relational_expression: relational_expression LE_OP shift_expression  */
  ------------------
  |  Branch (6048:3): [True: 0, False: 12.5M]
  ------------------
 6049|      0|#line 695 "MachineIndependent/glslang.y"
 6050|      0|                                                    {
 6051|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6052|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6052:13): [True: 0, False: 0]
  ------------------
 6053|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6054|      0|    }
 6055|      0|#line 6056 "MachineIndependent/glslang_tab.cpp"
 6056|      0|    break;
 6057|       |
 6058|      0|  case 60: /* relational_expression: relational_expression GE_OP shift_expression  */
  ------------------
  |  Branch (6058:3): [True: 0, False: 12.5M]
  ------------------
 6059|      0|#line 700 "MachineIndependent/glslang.y"
 6060|      0|                                                    {
 6061|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6062|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6062:13): [True: 0, False: 0]
  ------------------
 6063|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6064|      0|    }
 6065|      0|#line 6066 "MachineIndependent/glslang_tab.cpp"
 6066|      0|    break;
 6067|       |
 6068|  19.0k|  case 61: /* equality_expression: relational_expression  */
  ------------------
  |  Branch (6068:3): [True: 19.0k, False: 12.5M]
  ------------------
 6069|  19.0k|#line 708 "MachineIndependent/glslang.y"
 6070|  19.0k|                            { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6071|  19.0k|#line 6072 "MachineIndependent/glslang_tab.cpp"
 6072|  19.0k|    break;
 6073|       |
 6074|      0|  case 62: /* equality_expression: equality_expression EQ_OP relational_expression  */
  ------------------
  |  Branch (6074:3): [True: 0, False: 12.5M]
  ------------------
 6075|      0|#line 709 "MachineIndependent/glslang.y"
 6076|      0|                                                       {
 6077|      0|        parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6078|      0|        parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6079|      0|        parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6080|      0|        parseContext.referenceCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6081|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "==", EOpEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6082|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6082:13): [True: 0, False: 0]
  ------------------
 6083|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6084|      0|    }
 6085|      0|#line 6086 "MachineIndependent/glslang_tab.cpp"
 6086|      0|    break;
 6087|       |
 6088|      0|  case 63: /* equality_expression: equality_expression NE_OP relational_expression  */
  ------------------
  |  Branch (6088:3): [True: 0, False: 12.5M]
  ------------------
 6089|      0|#line 718 "MachineIndependent/glslang.y"
 6090|      0|                                                      {
 6091|      0|        parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6092|      0|        parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6093|      0|        parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6094|      0|        parseContext.referenceCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6095|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "!=", EOpNotEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6096|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6096:13): [True: 0, False: 0]
  ------------------
 6097|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6098|      0|    }
 6099|      0|#line 6100 "MachineIndependent/glslang_tab.cpp"
 6100|      0|    break;
 6101|       |
 6102|  19.0k|  case 64: /* and_expression: equality_expression  */
  ------------------
  |  Branch (6102:3): [True: 19.0k, False: 12.5M]
  ------------------
 6103|  19.0k|#line 730 "MachineIndependent/glslang.y"
 6104|  19.0k|                          { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6105|  19.0k|#line 6106 "MachineIndependent/glslang_tab.cpp"
 6106|  19.0k|    break;
 6107|       |
 6108|      0|  case 65: /* and_expression: and_expression AMPERSAND equality_expression  */
  ------------------
  |  Branch (6108:3): [True: 0, False: 12.5M]
  ------------------
 6109|      0|#line 731 "MachineIndependent/glslang.y"
 6110|      0|                                                   {
 6111|      0|        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6112|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6113|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6113:13): [True: 0, False: 0]
  ------------------
 6114|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6115|      0|    }
 6116|      0|#line 6117 "MachineIndependent/glslang_tab.cpp"
 6117|      0|    break;
 6118|       |
 6119|  19.0k|  case 66: /* exclusive_or_expression: and_expression  */
  ------------------
  |  Branch (6119:3): [True: 19.0k, False: 12.5M]
  ------------------
 6120|  19.0k|#line 740 "MachineIndependent/glslang.y"
 6121|  19.0k|                     { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6122|  19.0k|#line 6123 "MachineIndependent/glslang_tab.cpp"
 6123|  19.0k|    break;
 6124|       |
 6125|      0|  case 67: /* exclusive_or_expression: exclusive_or_expression CARET and_expression  */
  ------------------
  |  Branch (6125:3): [True: 0, False: 12.5M]
  ------------------
 6126|      0|#line 741 "MachineIndependent/glslang.y"
 6127|      0|                                                   {
 6128|      0|        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6129|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6130|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6130:13): [True: 0, False: 0]
  ------------------
 6131|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6132|      0|    }
 6133|      0|#line 6134 "MachineIndependent/glslang_tab.cpp"
 6134|      0|    break;
 6135|       |
 6136|  19.0k|  case 68: /* inclusive_or_expression: exclusive_or_expression  */
  ------------------
  |  Branch (6136:3): [True: 19.0k, False: 12.5M]
  ------------------
 6137|  19.0k|#line 750 "MachineIndependent/glslang.y"
 6138|  19.0k|                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6139|  19.0k|#line 6140 "MachineIndependent/glslang_tab.cpp"
 6140|  19.0k|    break;
 6141|       |
 6142|      0|  case 69: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression  */
  ------------------
  |  Branch (6142:3): [True: 0, False: 12.5M]
  ------------------
 6143|      0|#line 751 "MachineIndependent/glslang.y"
 6144|      0|                                                                   {
 6145|      0|        parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6146|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6147|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6147:13): [True: 0, False: 0]
  ------------------
 6148|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6149|      0|    }
 6150|      0|#line 6151 "MachineIndependent/glslang_tab.cpp"
 6151|      0|    break;
 6152|       |
 6153|  19.0k|  case 70: /* logical_and_expression: inclusive_or_expression  */
  ------------------
  |  Branch (6153:3): [True: 19.0k, False: 12.5M]
  ------------------
 6154|  19.0k|#line 760 "MachineIndependent/glslang.y"
 6155|  19.0k|                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6156|  19.0k|#line 6157 "MachineIndependent/glslang_tab.cpp"
 6157|  19.0k|    break;
 6158|       |
 6159|      0|  case 71: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression  */
  ------------------
  |  Branch (6159:3): [True: 0, False: 12.5M]
  ------------------
 6160|      0|#line 761 "MachineIndependent/glslang.y"
 6161|      0|                                                            {
 6162|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6163|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6163:13): [True: 0, False: 0]
  ------------------
 6164|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6165|      0|    }
 6166|      0|#line 6167 "MachineIndependent/glslang_tab.cpp"
 6167|      0|    break;
 6168|       |
 6169|  19.0k|  case 72: /* logical_xor_expression: logical_and_expression  */
  ------------------
  |  Branch (6169:3): [True: 19.0k, False: 12.5M]
  ------------------
 6170|  19.0k|#line 769 "MachineIndependent/glslang.y"
 6171|  19.0k|                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6172|  19.0k|#line 6173 "MachineIndependent/glslang_tab.cpp"
 6173|  19.0k|    break;
 6174|       |
 6175|      0|  case 73: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression  */
  ------------------
  |  Branch (6175:3): [True: 0, False: 12.5M]
  ------------------
 6176|      0|#line 770 "MachineIndependent/glslang.y"
 6177|      0|                                                            {
 6178|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6179|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6179:13): [True: 0, False: 0]
  ------------------
 6180|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6181|      0|    }
 6182|      0|#line 6183 "MachineIndependent/glslang_tab.cpp"
 6183|      0|    break;
 6184|       |
 6185|  19.0k|  case 74: /* logical_or_expression: logical_xor_expression  */
  ------------------
  |  Branch (6185:3): [True: 19.0k, False: 12.5M]
  ------------------
 6186|  19.0k|#line 778 "MachineIndependent/glslang.y"
 6187|  19.0k|                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6188|  19.0k|#line 6189 "MachineIndependent/glslang_tab.cpp"
 6189|  19.0k|    break;
 6190|       |
 6191|      0|  case 75: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression  */
  ------------------
  |  Branch (6191:3): [True: 0, False: 12.5M]
  ------------------
 6192|      0|#line 779 "MachineIndependent/glslang.y"
 6193|      0|                                                          {
 6194|      0|        (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6195|      0|        if ((yyval.interm.intermTypedNode) == 0)
  ------------------
  |  Branch (6195:13): [True: 0, False: 0]
  ------------------
 6196|      0|            (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6197|      0|    }
 6198|      0|#line 6199 "MachineIndependent/glslang_tab.cpp"
 6199|      0|    break;
 6200|       |
 6201|  19.0k|  case 76: /* conditional_expression: logical_or_expression  */
  ------------------
  |  Branch (6201:3): [True: 19.0k, False: 12.5M]
  ------------------
 6202|  19.0k|#line 787 "MachineIndependent/glslang.y"
 6203|  19.0k|                            { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6204|  19.0k|#line 6205 "MachineIndependent/glslang_tab.cpp"
 6205|  19.0k|    break;
 6206|       |
 6207|      0|  case 77: /* $@1: %empty  */
  ------------------
  |  Branch (6207:3): [True: 0, False: 12.5M]
  ------------------
 6208|      0|#line 788 "MachineIndependent/glslang.y"
 6209|      0|                                     {
 6210|      0|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6211|      0|    }
 6212|      0|#line 6213 "MachineIndependent/glslang_tab.cpp"
 6213|      0|    break;
 6214|       |
 6215|      0|  case 78: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression  */
  ------------------
  |  Branch (6215:3): [True: 0, False: 12.5M]
  ------------------
 6216|      0|#line 791 "MachineIndependent/glslang.y"
 6217|      0|                                             {
 6218|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6219|      0|        parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6220|      0|        parseContext.rValueErrorCheck((yyvsp[-4].lex).loc, "?", (yyvsp[-5].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6221|      0|        parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6222|      0|        parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6223|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addSelection((yyvsp[-5].interm.intermTypedNode), (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-4].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6224|      0|        if ((yyval.interm.intermTypedNode) == 0) {
  ------------------
  |  Branch (6224:13): [True: 0, False: 0]
  ------------------
 6225|      0|            parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
  ------------------
  |  |  756|      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()));
  ------------------
  |  |  756|      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()));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6226|      0|            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6227|      0|        }
 6228|      0|    }
 6229|      0|#line 6230 "MachineIndependent/glslang_tab.cpp"
 6230|      0|    break;
 6231|       |
 6232|  15.2k|  case 79: /* assignment_expression: conditional_expression  */
  ------------------
  |  Branch (6232:3): [True: 15.2k, False: 12.5M]
  ------------------
 6233|  15.2k|#line 806 "MachineIndependent/glslang.y"
 6234|  15.2k|                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 6235|  15.2k|#line 6236 "MachineIndependent/glslang_tab.cpp"
 6236|  15.2k|    break;
 6237|       |
 6238|  1.62k|  case 80: /* assignment_expression: unary_expression assignment_operator assignment_expression  */
  ------------------
  |  Branch (6238:3): [True: 1.62k, False: 12.5M]
  ------------------
 6239|  1.62k|#line 807 "MachineIndependent/glslang.y"
 6240|  1.62k|                                                                 {
 6241|  1.62k|        parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
  ------------------
  |  |  756|  1.62k|#define parseContext (*pParseContext)
  ------------------
 6242|  1.62k|        parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
  ------------------
  |  |  756|  1.62k|#define parseContext (*pParseContext)
  ------------------
 6243|  1.62k|        parseContext.storage16BitAssignmentCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
  ------------------
  |  |  756|  1.62k|#define parseContext (*pParseContext)
  ------------------
 6244|  1.62k|        parseContext.specializationCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
  ------------------
  |  |  756|  1.62k|#define parseContext (*pParseContext)
  ------------------
 6245|  1.62k|        parseContext.lValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode));
  ------------------
  |  |  756|  1.62k|#define parseContext (*pParseContext)
  ------------------
 6246|  1.62k|        parseContext.rValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|  1.62k|#define parseContext (*pParseContext)
  ------------------
 6247|  1.62k|        (yyval.interm.intermTypedNode) = parseContext.addAssign((yyvsp[-1].interm).loc, (yyvsp[-1].interm).op, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|  1.62k|#define parseContext (*pParseContext)
  ------------------
 6248|  1.62k|        if ((yyval.interm.intermTypedNode) == 0) {
  ------------------
  |  Branch (6248:13): [True: 0, False: 1.62k]
  ------------------
 6249|      0|            parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
  ------------------
  |  |  756|      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()));
  ------------------
  |  |  756|      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()));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6250|      0|            (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
 6251|      0|        }
 6252|  1.62k|    }
 6253|  1.62k|#line 6254 "MachineIndependent/glslang_tab.cpp"
 6254|  1.62k|    break;
 6255|       |
 6256|      3|  case 81: /* assignment_operator: EQUAL  */
  ------------------
  |  Branch (6256:3): [True: 3, False: 12.5M]
  ------------------
 6257|      3|#line 823 "MachineIndependent/glslang.y"
 6258|      3|            {
 6259|      3|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6260|      3|        (yyval.interm).op = EOpAssign;
 6261|      3|    }
 6262|      3|#line 6263 "MachineIndependent/glslang_tab.cpp"
 6263|      3|    break;
 6264|       |
 6265|      0|  case 82: /* assignment_operator: MUL_ASSIGN  */
  ------------------
  |  Branch (6265:3): [True: 0, False: 12.5M]
  ------------------
 6266|      0|#line 827 "MachineIndependent/glslang.y"
 6267|      0|                 {
 6268|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6269|      0|        (yyval.interm).op = EOpMulAssign;
 6270|      0|    }
 6271|      0|#line 6272 "MachineIndependent/glslang_tab.cpp"
 6272|      0|    break;
 6273|       |
 6274|      0|  case 83: /* assignment_operator: DIV_ASSIGN  */
  ------------------
  |  Branch (6274:3): [True: 0, False: 12.5M]
  ------------------
 6275|      0|#line 831 "MachineIndependent/glslang.y"
 6276|      0|                 {
 6277|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6278|      0|        (yyval.interm).op = EOpDivAssign;
 6279|      0|    }
 6280|      0|#line 6281 "MachineIndependent/glslang_tab.cpp"
 6281|      0|    break;
 6282|       |
 6283|      0|  case 84: /* assignment_operator: MOD_ASSIGN  */
  ------------------
  |  Branch (6283:3): [True: 0, False: 12.5M]
  ------------------
 6284|      0|#line 835 "MachineIndependent/glslang.y"
 6285|      0|                 {
 6286|      0|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6287|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6288|      0|        (yyval.interm).op = EOpModAssign;
 6289|      0|    }
 6290|      0|#line 6291 "MachineIndependent/glslang_tab.cpp"
 6291|      0|    break;
 6292|       |
 6293|  1.62k|  case 85: /* assignment_operator: ADD_ASSIGN  */
  ------------------
  |  Branch (6293:3): [True: 1.62k, False: 12.5M]
  ------------------
 6294|  1.62k|#line 840 "MachineIndependent/glslang.y"
 6295|  1.62k|                 {
 6296|  1.62k|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6297|  1.62k|        (yyval.interm).op = EOpAddAssign;
 6298|  1.62k|    }
 6299|  1.62k|#line 6300 "MachineIndependent/glslang_tab.cpp"
 6300|  1.62k|    break;
 6301|       |
 6302|      0|  case 86: /* assignment_operator: SUB_ASSIGN  */
  ------------------
  |  Branch (6302:3): [True: 0, False: 12.5M]
  ------------------
 6303|      0|#line 844 "MachineIndependent/glslang.y"
 6304|      0|                 {
 6305|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6306|      0|        (yyval.interm).op = EOpSubAssign;
 6307|      0|    }
 6308|      0|#line 6309 "MachineIndependent/glslang_tab.cpp"
 6309|      0|    break;
 6310|       |
 6311|      0|  case 87: /* assignment_operator: LEFT_ASSIGN  */
  ------------------
  |  Branch (6311:3): [True: 0, False: 12.5M]
  ------------------
 6312|      0|#line 848 "MachineIndependent/glslang.y"
 6313|      0|                  {
 6314|      0|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6315|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
 6316|      0|    }
 6317|      0|#line 6318 "MachineIndependent/glslang_tab.cpp"
 6318|      0|    break;
 6319|       |
 6320|      0|  case 88: /* assignment_operator: RIGHT_ASSIGN  */
  ------------------
  |  Branch (6320:3): [True: 0, False: 12.5M]
  ------------------
 6321|      0|#line 852 "MachineIndependent/glslang.y"
 6322|      0|                   {
 6323|      0|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6324|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
 6325|      0|    }
 6326|      0|#line 6327 "MachineIndependent/glslang_tab.cpp"
 6327|      0|    break;
 6328|       |
 6329|      0|  case 89: /* assignment_operator: AND_ASSIGN  */
  ------------------
  |  Branch (6329:3): [True: 0, False: 12.5M]
  ------------------
 6330|      0|#line 856 "MachineIndependent/glslang.y"
 6331|      0|                 {
 6332|      0|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6333|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
 6334|      0|    }
 6335|      0|#line 6336 "MachineIndependent/glslang_tab.cpp"
 6336|      0|    break;
 6337|       |
 6338|      0|  case 90: /* assignment_operator: XOR_ASSIGN  */
  ------------------
  |  Branch (6338:3): [True: 0, False: 12.5M]
  ------------------
 6339|      0|#line 860 "MachineIndependent/glslang.y"
 6340|      0|                 {
 6341|      0|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6342|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
 6343|      0|    }
 6344|      0|#line 6345 "MachineIndependent/glslang_tab.cpp"
 6345|      0|    break;
 6346|       |
 6347|      0|  case 91: /* assignment_operator: OR_ASSIGN  */
  ------------------
  |  Branch (6347:3): [True: 0, False: 12.5M]
  ------------------
 6348|      0|#line 864 "MachineIndependent/glslang.y"
 6349|      0|                {
 6350|      0|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6351|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
 6352|      0|    }
 6353|      0|#line 6354 "MachineIndependent/glslang_tab.cpp"
 6354|      0|    break;
 6355|       |
 6356|  2.41k|  case 92: /* expression: assignment_expression  */
  ------------------
  |  Branch (6356:3): [True: 2.41k, False: 12.5M]
  ------------------
 6357|  2.41k|#line 871 "MachineIndependent/glslang.y"
 6358|  2.41k|                            {
 6359|  2.41k|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6360|  2.41k|    }
 6361|  2.41k|#line 6362 "MachineIndependent/glslang_tab.cpp"
 6362|  2.41k|    break;
 6363|       |
 6364|      0|  case 93: /* expression: expression COMMA assignment_expression  */
  ------------------
  |  Branch (6364:3): [True: 0, False: 12.5M]
  ------------------
 6365|      0|#line 874 "MachineIndependent/glslang.y"
 6366|      0|                                             {
 6367|      0|        parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6368|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6369|      0|        if ((yyval.interm.intermTypedNode) == 0) {
  ------------------
  |  Branch (6369:13): [True: 0, False: 0]
  ------------------
 6370|      0|            parseContext.binaryOpError((yyvsp[-1].lex).loc, ",", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()));
  ------------------
  |  |  756|      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()));
  ------------------
  |  |  756|      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()));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6371|      0|            (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6372|      0|        }
 6373|      0|    }
 6374|      0|#line 6375 "MachineIndependent/glslang_tab.cpp"
 6375|      0|    break;
 6376|       |
 6377|    612|  case 94: /* constant_expression: conditional_expression  */
  ------------------
  |  Branch (6377:3): [True: 612, False: 12.5M]
  ------------------
 6378|    612|#line 885 "MachineIndependent/glslang.y"
 6379|    612|                             {
 6380|    612|        parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
  ------------------
  |  |  756|    612|#define parseContext (*pParseContext)
  ------------------
 6381|    612|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
 6382|    612|    }
 6383|    612|#line 6384 "MachineIndependent/glslang_tab.cpp"
 6384|    612|    break;
 6385|       |
 6386|   466k|  case 95: /* declaration: function_prototype SEMICOLON  */
  ------------------
  |  Branch (6386:3): [True: 466k, False: 12.0M]
  ------------------
 6387|   466k|#line 892 "MachineIndependent/glslang.y"
 6388|   466k|                                   {
 6389|   466k|        parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
  ------------------
  |  |  756|   466k|#define parseContext (*pParseContext)
  ------------------
 6390|   466k|        (yyval.interm.intermNode) = 0;
 6391|       |        // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
 6392|   466k|    }
 6393|   466k|#line 6394 "MachineIndependent/glslang_tab.cpp"
 6394|   466k|    break;
 6395|       |
 6396|      0|  case 96: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON  */
  ------------------
  |  Branch (6396:3): [True: 0, False: 12.5M]
  ------------------
 6397|      0|#line 897 "MachineIndependent/glslang.y"
 6398|      0|                                                               {
 6399|      0|        parseContext.requireExtensions((yyvsp[-1].interm).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V instruction qualifier");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6400|      0|        (yyvsp[-1].interm).function->setSpirvInstruction(*(yyvsp[-2].interm.spirvInst)); // Attach SPIR-V intruction qualifier
 6401|      0|        parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6402|      0|        (yyval.interm.intermNode) = 0;
 6403|       |        // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
 6404|      0|    }
 6405|      0|#line 6406 "MachineIndependent/glslang_tab.cpp"
 6406|      0|    break;
 6407|       |
 6408|      0|  case 97: /* declaration: spirv_execution_mode_qualifier SEMICOLON  */
  ------------------
  |  Branch (6408:3): [True: 0, False: 12.5M]
  ------------------
 6409|      0|#line 904 "MachineIndependent/glslang.y"
 6410|      0|                                               {
 6411|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "SPIR-V execution mode qualifier");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6412|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6413|      0|        (yyval.interm.intermNode) = 0;
 6414|      0|    }
 6415|      0|#line 6416 "MachineIndependent/glslang_tab.cpp"
 6416|      0|    break;
 6417|       |
 6418|  13.7k|  case 98: /* declaration: init_declarator_list SEMICOLON  */
  ------------------
  |  Branch (6418:3): [True: 13.7k, False: 12.5M]
  ------------------
 6419|  13.7k|#line 909 "MachineIndependent/glslang.y"
 6420|  13.7k|                                     {
 6421|  13.7k|        if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
  ------------------
  |  Branch (6421:13): [True: 237, False: 13.5k]
  |  Branch (6421:46): [True: 237, False: 0]
  ------------------
 6422|    237|            (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
 6423|  13.7k|        (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
 6424|  13.7k|    }
 6425|  13.7k|#line 6426 "MachineIndependent/glslang_tab.cpp"
 6426|  13.7k|    break;
 6427|       |
 6428|      0|  case 99: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON  */
  ------------------
  |  Branch (6428:3): [True: 0, False: 12.5M]
  ------------------
 6429|      0|#line 914 "MachineIndependent/glslang.y"
 6430|      0|                                                             {
 6431|      0|        parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6432|       |        // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
 6433|      0|        parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6434|      0|        parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6435|      0|        (yyval.interm.intermNode) = 0;
 6436|      0|    }
 6437|      0|#line 6438 "MachineIndependent/glslang_tab.cpp"
 6438|      0|    break;
 6439|       |
 6440|     34|  case 100: /* declaration: block_structure SEMICOLON  */
  ------------------
  |  Branch (6440:3): [True: 34, False: 12.5M]
  ------------------
 6441|     34|#line 921 "MachineIndependent/glslang.y"
 6442|     34|                                {
 6443|     34|        (yyval.interm.intermNode) = parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
  ------------------
  |  |  756|     34|#define parseContext (*pParseContext)
  ------------------
 6444|     34|    }
 6445|     34|#line 6446 "MachineIndependent/glslang_tab.cpp"
 6446|     34|    break;
 6447|       |
 6448|      0|  case 101: /* declaration: block_structure IDENTIFIER SEMICOLON  */
  ------------------
  |  Branch (6448:3): [True: 0, False: 12.5M]
  ------------------
 6449|      0|#line 924 "MachineIndependent/glslang.y"
 6450|      0|                                           {
 6451|      0|        (yyval.interm.intermNode) = parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6452|      0|    }
 6453|      0|#line 6454 "MachineIndependent/glslang_tab.cpp"
 6454|      0|    break;
 6455|       |
 6456|     49|  case 102: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON  */
  ------------------
  |  Branch (6456:3): [True: 49, False: 12.5M]
  ------------------
 6457|     49|#line 927 "MachineIndependent/glslang.y"
 6458|     49|                                                           {
 6459|     49|        (yyval.interm.intermNode) = parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
  ------------------
  |  |  756|     49|#define parseContext (*pParseContext)
  ------------------
 6460|     49|    }
 6461|     49|#line 6462 "MachineIndependent/glslang_tab.cpp"
 6462|     49|    break;
 6463|       |
 6464|      0|  case 103: /* declaration: type_qualifier SEMICOLON  */
  ------------------
  |  Branch (6464:3): [True: 0, False: 12.5M]
  ------------------
 6465|      0|#line 930 "MachineIndependent/glslang.y"
 6466|      0|                               {
 6467|      0|        parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6468|      0|        parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6469|      0|        (yyval.interm.intermNode) = 0;
 6470|      0|    }
 6471|      0|#line 6472 "MachineIndependent/glslang_tab.cpp"
 6472|      0|    break;
 6473|       |
 6474|      0|  case 104: /* declaration: type_qualifier identifier_list SEMICOLON  */
  ------------------
  |  Branch (6474:3): [True: 0, False: 12.5M]
  ------------------
 6475|      0|#line 935 "MachineIndependent/glslang.y"
 6476|      0|                                               {
 6477|      0|        parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6478|      0|        parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6479|      0|        (yyval.interm.intermNode) = 0;
 6480|      0|    }
 6481|      0|#line 6482 "MachineIndependent/glslang_tab.cpp"
 6482|      0|    break;
 6483|       |
 6484|     88|  case 105: /* $@2: %empty  */
  ------------------
  |  Branch (6484:3): [True: 88, False: 12.5M]
  ------------------
 6485|     88|#line 943 "MachineIndependent/glslang.y"
 6486|     88|                                           { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
  ------------------
  |  |  756|     88|#define parseContext (*pParseContext)
  ------------------
 6487|     88|#line 6488 "MachineIndependent/glslang_tab.cpp"
 6488|     88|    break;
 6489|       |
 6490|     83|  case 106: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_without_heap RIGHT_BRACE  */
  ------------------
  |  Branch (6490:3): [True: 83, False: 12.5M]
  ------------------
 6491|     83|#line 943 "MachineIndependent/glslang.y"
 6492|     83|                                                                                                                                  {
 6493|     83|        --parseContext.blockNestingLevel;
  ------------------
  |  |  756|     83|#define parseContext (*pParseContext)
  ------------------
 6494|     83|        parseContext.blockName = (yyvsp[-4].lex).string;
  ------------------
  |  |  756|     83|#define parseContext (*pParseContext)
  ------------------
 6495|     83|        parseContext.globalQualifierFixCheck((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).qualifier);
  ------------------
  |  |  756|     83|#define parseContext (*pParseContext)
  ------------------
 6496|     83|        parseContext.checkNoShaderLayouts((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).shaderQualifiers);
  ------------------
  |  |  756|     83|#define parseContext (*pParseContext)
  ------------------
 6497|     83|        parseContext.currentBlockQualifier = (yyvsp[-5].interm.type).qualifier;
  ------------------
  |  |  756|    166|#define parseContext (*pParseContext)
  ------------------
 6498|     83|        (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
 6499|     83|        (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
 6500|     83|    }
 6501|     83|#line 6502 "MachineIndependent/glslang_tab.cpp"
 6502|     83|    break;
 6503|       |
 6504|      0|  case 107: /* identifier_list: IDENTIFIER  */
  ------------------
  |  Branch (6504:3): [True: 0, False: 12.5M]
  ------------------
 6505|      0|#line 955 "MachineIndependent/glslang.y"
 6506|      0|                 {
 6507|      0|        (yyval.interm.identifierList) = new TIdentifierList;
 6508|      0|        (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
 6509|      0|    }
 6510|      0|#line 6511 "MachineIndependent/glslang_tab.cpp"
 6511|      0|    break;
 6512|       |
 6513|      0|  case 108: /* identifier_list: identifier_list COMMA IDENTIFIER  */
  ------------------
  |  Branch (6513:3): [True: 0, False: 12.5M]
  ------------------
 6514|      0|#line 959 "MachineIndependent/glslang.y"
 6515|      0|                                       {
 6516|      0|        (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
 6517|      0|        (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
 6518|      0|    }
 6519|      0|#line 6520 "MachineIndependent/glslang_tab.cpp"
 6520|      0|    break;
 6521|       |
 6522|   467k|  case 109: /* function_prototype: function_declarator RIGHT_PAREN  */
  ------------------
  |  Branch (6522:3): [True: 467k, False: 12.0M]
  ------------------
 6523|   467k|#line 966 "MachineIndependent/glslang.y"
 6524|   467k|                                       {
 6525|   467k|        (yyval.interm).function = (yyvsp[-1].interm.function);
 6526|   467k|        if (parseContext.compileOnly) (yyval.interm).function->setExport();
  ------------------
  |  |  756|   467k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6526:13): [True: 0, False: 467k]
  ------------------
 6527|   467k|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6528|   467k|    }
 6529|   467k|#line 6530 "MachineIndependent/glslang_tab.cpp"
 6530|   467k|    break;
 6531|       |
 6532|      0|  case 110: /* function_prototype: function_declarator RIGHT_PAREN attribute  */
  ------------------
  |  Branch (6532:3): [True: 0, False: 12.5M]
  ------------------
 6533|      0|#line 971 "MachineIndependent/glslang.y"
 6534|      0|                                                {
 6535|      0|        (yyval.interm).function = (yyvsp[-2].interm.function);
 6536|      0|        if (parseContext.compileOnly) (yyval.interm).function->setExport();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6536:13): [True: 0, False: 0]
  ------------------
 6537|      0|        (yyval.interm).loc = (yyvsp[-1].lex).loc;
 6538|      0|        const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence };
 6539|      0|        parseContext.requireExtensions((yyvsp[-1].lex).loc, 2, extensions, "attribute");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6540|      0|        parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6541|      0|    }
 6542|      0|#line 6543 "MachineIndependent/glslang_tab.cpp"
 6543|      0|    break;
 6544|       |
 6545|      0|  case 111: /* function_prototype: attribute function_declarator RIGHT_PAREN  */
  ------------------
  |  Branch (6545:3): [True: 0, False: 12.5M]
  ------------------
 6546|      0|#line 979 "MachineIndependent/glslang.y"
 6547|      0|                                                {
 6548|      0|        (yyval.interm).function = (yyvsp[-1].interm.function);
 6549|      0|        if (parseContext.compileOnly) (yyval.interm).function->setExport();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6549:13): [True: 0, False: 0]
  ------------------
 6550|      0|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6551|      0|        const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence };
 6552|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 2, extensions, "attribute");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6553|      0|        parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6554|      0|    }
 6555|      0|#line 6556 "MachineIndependent/glslang_tab.cpp"
 6556|      0|    break;
 6557|       |
 6558|      0|  case 112: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute  */
  ------------------
  |  Branch (6558:3): [True: 0, False: 12.5M]
  ------------------
 6559|      0|#line 987 "MachineIndependent/glslang.y"
 6560|      0|                                                          {
 6561|      0|        (yyval.interm).function = (yyvsp[-2].interm.function);
 6562|      0|        if (parseContext.compileOnly) (yyval.interm).function->setExport();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6562:13): [True: 0, False: 0]
  ------------------
 6563|      0|        (yyval.interm).loc = (yyvsp[-1].lex).loc;
 6564|      0|        const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence };
 6565|      0|        parseContext.requireExtensions((yyvsp[-1].lex).loc, 2, extensions, "attribute");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6566|      0|        parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6567|      0|        parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6568|      0|    }
 6569|      0|#line 6570 "MachineIndependent/glslang_tab.cpp"
 6570|      0|    break;
 6571|       |
 6572|  1.49k|  case 113: /* function_declarator: function_header  */
  ------------------
  |  Branch (6572:3): [True: 1.49k, False: 12.5M]
  ------------------
 6573|  1.49k|#line 999 "MachineIndependent/glslang.y"
 6574|  1.49k|                      {
 6575|  1.49k|        (yyval.interm.function) = (yyvsp[0].interm.function);
 6576|  1.49k|    }
 6577|  1.49k|#line 6578 "MachineIndependent/glslang_tab.cpp"
 6578|  1.49k|    break;
 6579|       |
 6580|   465k|  case 114: /* function_declarator: function_header_with_parameters  */
  ------------------
  |  Branch (6580:3): [True: 465k, False: 12.0M]
  ------------------
 6581|   465k|#line 1002 "MachineIndependent/glslang.y"
 6582|   465k|                                      {
 6583|   465k|        (yyval.interm.function) = (yyvsp[0].interm.function);
 6584|   465k|    }
 6585|   465k|#line 6586 "MachineIndependent/glslang_tab.cpp"
 6586|   465k|    break;
 6587|       |
 6588|   465k|  case 115: /* function_header_with_parameters: function_header parameter_declaration  */
  ------------------
  |  Branch (6588:3): [True: 465k, False: 12.0M]
  ------------------
 6589|   465k|#line 1009 "MachineIndependent/glslang.y"
 6590|   465k|                                            {
 6591|       |        // Add the parameter
 6592|   465k|        (yyval.interm.function) = (yyvsp[-1].interm.function);
 6593|   465k|        if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid)
  ------------------
  |  Branch (6593:13): [True: 465k, False: 198]
  ------------------
 6594|   465k|        {
 6595|   465k|            if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed))
  ------------------
  |  |  756|   465k|#define parseContext (*pParseContext)
  ------------------
                          if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed))
  ------------------
  |  |  756|   465k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6595:19): [True: 465k, False: 0]
  |  Branch (6595:57): [True: 0, False: 465k]
  ------------------
 6596|   465k|                (yyvsp[-1].interm.function)->addParameter((yyvsp[0].interm).param);
 6597|      0|            else
 6598|      0|                parseContext.vkRelaxedRemapFunctionParameter((yyvsp[-1].interm.function), (yyvsp[0].interm).param);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6599|   465k|        }
 6600|    198|        else
 6601|    198|            delete (yyvsp[0].interm).param.type;
 6602|   465k|    }
 6603|   465k|#line 6604 "MachineIndependent/glslang_tab.cpp"
 6604|   465k|    break;
 6605|       |
 6606|   625k|  case 116: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration  */
  ------------------
  |  Branch (6606:3): [True: 625k, False: 11.9M]
  ------------------
 6607|   625k|#line 1022 "MachineIndependent/glslang.y"
 6608|   625k|                                                                  {
 6609|       |        //
 6610|       |        // Only first parameter of one-parameter functions can be void
 6611|       |        // The check for named parameters not being void is done in parameter_declarator
 6612|       |        //
 6613|   625k|        if ((yyvsp[0].interm).param.type->getBasicType() == EbtVoid) {
  ------------------
  |  Branch (6613:13): [True: 0, False: 625k]
  ------------------
 6614|       |            //
 6615|       |            // This parameter > first is void
 6616|       |            //
 6617|      0|            parseContext.error((yyvsp[-1].lex).loc, "cannot be an argument type except for '(void)'", "void", "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6618|      0|            delete (yyvsp[0].interm).param.type;
 6619|   625k|        } else {
 6620|       |            // Add the parameter
 6621|   625k|            (yyval.interm.function) = (yyvsp[-2].interm.function);
 6622|   625k|            if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed))
  ------------------
  |  |  756|   625k|#define parseContext (*pParseContext)
  ------------------
                          if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed))
  ------------------
  |  |  756|   625k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6622:19): [True: 625k, False: 0]
  |  Branch (6622:57): [True: 0, False: 625k]
  ------------------
 6623|   625k|                (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
 6624|      0|            else
 6625|      0|                parseContext.vkRelaxedRemapFunctionParameter((yyvsp[-2].interm.function), (yyvsp[0].interm).param);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6626|   625k|        }
 6627|   625k|    }
 6628|   625k|#line 6629 "MachineIndependent/glslang_tab.cpp"
 6629|   625k|    break;
 6630|       |
 6631|    300|  case 117: /* function_header_with_parameters: function_header_with_parameters COMMA DOT DOT DOT  */
  ------------------
  |  Branch (6631:3): [True: 300, False: 12.5M]
  ------------------
 6632|    300|#line 1042 "MachineIndependent/glslang.y"
 6633|    300|                                                        {
 6634|    300|        (yyval.interm.function) = (yyvsp[-4].interm.function);
 6635|    300|        parseContext.makeVariadic((yyvsp[-4].interm.function), (yyvsp[-2].lex).loc);
  ------------------
  |  |  756|    300|#define parseContext (*pParseContext)
  ------------------
 6636|    300|    }
 6637|    300|#line 6638 "MachineIndependent/glslang_tab.cpp"
 6638|    300|    break;
 6639|       |
 6640|   467k|  case 118: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN  */
  ------------------
  |  Branch (6640:3): [True: 467k, False: 12.0M]
  ------------------
 6641|   467k|#line 1049 "MachineIndependent/glslang.y"
 6642|   467k|                                                 {
 6643|   467k|        if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
  ------------------
  |  Branch (6643:13): [True: 0, False: 467k]
  |  Branch (6643:71): [True: 0, False: 0]
  ------------------
 6644|      0|            parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6645|      0|                               GetStorageQualifierString((yyvsp[-2].interm.type).qualifier.storage), "");
 6646|      0|        }
 6647|   467k|        if ((yyvsp[-2].interm.type).arraySizes)
  ------------------
  |  Branch (6647:13): [True: 0, False: 467k]
  ------------------
 6648|      0|            parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6649|       |
 6650|       |        // Add the function as a prototype after parsing it (we do not support recursion)
 6651|   467k|        TFunction *function;
 6652|   467k|        TType type((yyvsp[-2].interm.type));
 6653|       |
 6654|       |        // Potentially rename shader entry point function.  No-op most of the time.
 6655|   467k|        parseContext.renameShaderFunction((yyvsp[-1].lex).string);
  ------------------
  |  |  756|   467k|#define parseContext (*pParseContext)
  ------------------
 6656|       |
 6657|       |        // Make the function
 6658|   467k|        function = new TFunction((yyvsp[-1].lex).string, type);
 6659|   467k|        (yyval.interm.function) = function;
 6660|   467k|    }
 6661|   467k|#line 6662 "MachineIndependent/glslang_tab.cpp"
 6662|   467k|    break;
 6663|       |
 6664|   125k|  case 119: /* parameter_declarator: type_specifier IDENTIFIER  */
  ------------------
  |  Branch (6664:3): [True: 125k, False: 12.4M]
  ------------------
 6665|   125k|#line 1072 "MachineIndependent/glslang.y"
 6666|   125k|                                {
 6667|   125k|        if ((yyvsp[-1].interm.type).arraySizes) {
  ------------------
  |  Branch (6667:13): [True: 5.20k, False: 119k]
  ------------------
 6668|  5.20k|            parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
  ------------------
  |  |  756|  5.20k|#define parseContext (*pParseContext)
  ------------------
 6669|  5.20k|            parseContext.profileRequires((yyvsp[-1].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
  ------------------
  |  |  756|  5.20k|#define parseContext (*pParseContext)
  ------------------
 6670|  5.20k|            parseContext.arraySizeRequiredCheck((yyvsp[-1].interm.type).loc, *(yyvsp[-1].interm.type).arraySizes);
  ------------------
  |  |  756|  5.20k|#define parseContext (*pParseContext)
  ------------------
 6671|  5.20k|        }
 6672|   125k|        if ((yyvsp[-1].interm.type).basicType == EbtVoid) {
  ------------------
  |  Branch (6672:13): [True: 0, False: 125k]
  ------------------
 6673|      0|            parseContext.error((yyvsp[0].lex).loc, "illegal use of type 'void'", (yyvsp[0].lex).string->c_str(), "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6674|      0|        }
 6675|   125k|        parseContext.reservedErrorCheck((yyvsp[0].lex).loc, *(yyvsp[0].lex).string);
  ------------------
  |  |  756|   125k|#define parseContext (*pParseContext)
  ------------------
 6676|       |
 6677|   125k|        TParameter param = {(yyvsp[0].lex).string, new TType((yyvsp[-1].interm.type)), {}};
 6678|   125k|        (yyval.interm).loc = (yyvsp[0].lex).loc;
 6679|   125k|        (yyval.interm).param = param;
 6680|   125k|    }
 6681|   125k|#line 6682 "MachineIndependent/glslang_tab.cpp"
 6682|   125k|    break;
 6683|       |
 6684|  1.09k|  case 120: /* parameter_declarator: type_specifier IDENTIFIER array_specifier  */
  ------------------
  |  Branch (6684:3): [True: 1.09k, False: 12.5M]
  ------------------
 6685|  1.09k|#line 1087 "MachineIndependent/glslang.y"
 6686|  1.09k|                                                {
 6687|  1.09k|        if ((yyvsp[-2].interm.type).arraySizes) {
  ------------------
  |  Branch (6687:13): [True: 0, False: 1.09k]
  ------------------
 6688|      0|            parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6689|      0|            parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6690|      0|            parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6691|      0|        }
 6692|  1.09k|        TType* type = new TType((yyvsp[-2].interm.type));
 6693|  1.09k|        type->transferArraySizes((yyvsp[0].interm).arraySizes);
 6694|  1.09k|        type->copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
 6695|       |
 6696|  1.09k|        parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, type->getArraySizes());
  ------------------
  |  |  756|  1.09k|#define parseContext (*pParseContext)
  ------------------
 6697|  1.09k|        parseContext.arraySizeRequiredCheck((yyvsp[0].interm).loc, *(yyvsp[0].interm).arraySizes);
  ------------------
  |  |  756|  1.09k|#define parseContext (*pParseContext)
  ------------------
 6698|  1.09k|        parseContext.reservedErrorCheck((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string);
  ------------------
  |  |  756|  1.09k|#define parseContext (*pParseContext)
  ------------------
 6699|       |
 6700|  1.09k|        TParameter param = { (yyvsp[-1].lex).string, type, {} };
 6701|       |
 6702|  1.09k|        (yyval.interm).loc = (yyvsp[-1].lex).loc;
 6703|  1.09k|        (yyval.interm).param = param;
 6704|  1.09k|    }
 6705|  1.09k|#line 6706 "MachineIndependent/glslang_tab.cpp"
 6706|  1.09k|    break;
 6707|       |
 6708|    300|  case 121: /* parameter_declarator: type_specifier IDENTIFIER EQUAL initializer  */
  ------------------
  |  Branch (6708:3): [True: 300, False: 12.5M]
  ------------------
 6709|    300|#line 1106 "MachineIndependent/glslang.y"
 6710|    300|                                                  {
 6711|    300|        TParameter param = parseContext.getParamWithDefault((yyvsp[-3].interm.type), (yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|    300|#define parseContext (*pParseContext)
  ------------------
 6712|    300|        (yyval.interm).loc = (yyvsp[-2].lex).loc;
 6713|    300|        (yyval.interm).param = param;
 6714|    300|    }
 6715|    300|#line 6716 "MachineIndependent/glslang_tab.cpp"
 6716|    300|    break;
 6717|       |
 6718|  5.65k|  case 122: /* parameter_declaration: type_qualifier parameter_declarator  */
  ------------------
  |  Branch (6718:3): [True: 5.65k, False: 12.5M]
  ------------------
 6719|  5.65k|#line 1117 "MachineIndependent/glslang.y"
 6720|  5.65k|                                          {
 6721|  5.65k|        (yyval.interm) = (yyvsp[0].interm);
 6722|  5.65k|        if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
  ------------------
  |  Branch (6722:13): [True: 266, False: 5.39k]
  ------------------
 6723|    266|            (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision;
 6724|  5.65k|        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->hasTypeParameter());
  ------------------
  |  |  756|  5.65k|#define parseContext (*pParseContext)
  ------------------
 6725|       |
 6726|  5.65k|        parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
  ------------------
  |  |  756|  5.65k|#define parseContext (*pParseContext)
  ------------------
 6727|  5.65k|        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
  ------------------
  |  |  756|  5.65k|#define parseContext (*pParseContext)
  ------------------
 6728|  5.65k|        parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
  ------------------
  |  |  756|  5.65k|#define parseContext (*pParseContext)
  ------------------
 6729|       |
 6730|  5.65k|    }
 6731|  5.65k|#line 6732 "MachineIndependent/glslang_tab.cpp"
 6732|  5.65k|    break;
 6733|       |
 6734|   120k|  case 123: /* parameter_declaration: parameter_declarator  */
  ------------------
  |  Branch (6734:3): [True: 120k, False: 12.4M]
  ------------------
 6735|   120k|#line 1128 "MachineIndependent/glslang.y"
 6736|   120k|                           {
 6737|   120k|        (yyval.interm) = (yyvsp[0].interm);
 6738|       |
 6739|   120k|        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
  ------------------
  |  |  756|   120k|#define parseContext (*pParseContext)
  ------------------
 6740|   120k|        parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
  ------------------
  |  |  756|   120k|#define parseContext (*pParseContext)
  ------------------
 6741|   120k|        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->hasTypeParameter());
  ------------------
  |  |  756|   120k|#define parseContext (*pParseContext)
  ------------------
 6742|   120k|    }
 6743|   120k|#line 6744 "MachineIndependent/glslang_tab.cpp"
 6744|   120k|    break;
 6745|       |
 6746|   100k|  case 124: /* parameter_declaration: type_qualifier parameter_type_specifier  */
  ------------------
  |  Branch (6746:3): [True: 100k, False: 12.4M]
  ------------------
 6747|   100k|#line 1138 "MachineIndependent/glslang.y"
 6748|   100k|                                              {
 6749|   100k|        (yyval.interm) = (yyvsp[0].interm);
 6750|   100k|        if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
  ------------------
  |  Branch (6750:13): [True: 42.1k, False: 58.6k]
  ------------------
 6751|  42.1k|            (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision;
 6752|   100k|        parseContext.precisionQualifierCheck((yyvsp[-1].interm.type).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->hasTypeParameter());
  ------------------
  |  |  756|   100k|#define parseContext (*pParseContext)
  ------------------
 6753|       |
 6754|   100k|        parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
  ------------------
  |  |  756|   100k|#define parseContext (*pParseContext)
  ------------------
 6755|   100k|        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
  ------------------
  |  |  756|   100k|#define parseContext (*pParseContext)
  ------------------
 6756|   100k|        parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
  ------------------
  |  |  756|   100k|#define parseContext (*pParseContext)
  ------------------
 6757|   100k|    }
 6758|   100k|#line 6759 "MachineIndependent/glslang_tab.cpp"
 6759|   100k|    break;
 6760|       |
 6761|   864k|  case 125: /* parameter_declaration: parameter_type_specifier  */
  ------------------
  |  Branch (6761:3): [True: 864k, False: 11.7M]
  ------------------
 6762|   864k|#line 1148 "MachineIndependent/glslang.y"
 6763|   864k|                               {
 6764|   864k|        (yyval.interm) = (yyvsp[0].interm);
 6765|       |
 6766|   864k|        parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type);
  ------------------
  |  |  756|   864k|#define parseContext (*pParseContext)
  ------------------
 6767|   864k|        parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
  ------------------
  |  |  756|   864k|#define parseContext (*pParseContext)
  ------------------
 6768|   864k|        parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->hasTypeParameter());
  ------------------
  |  |  756|   864k|#define parseContext (*pParseContext)
  ------------------
 6769|   864k|    }
 6770|   864k|#line 6771 "MachineIndependent/glslang_tab.cpp"
 6771|   864k|    break;
 6772|       |
 6773|   964k|  case 126: /* parameter_type_specifier: type_specifier  */
  ------------------
  |  Branch (6773:3): [True: 964k, False: 11.5M]
  ------------------
 6774|   964k|#line 1158 "MachineIndependent/glslang.y"
 6775|   964k|                     {
 6776|   964k|        TParameter param = { 0, new TType((yyvsp[0].interm.type)), {} };
 6777|   964k|        (yyval.interm).param = param;
 6778|   964k|        if ((yyvsp[0].interm.type).arraySizes)
  ------------------
  |  Branch (6778:13): [True: 3.15k, False: 961k]
  ------------------
 6779|  3.15k|            parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
  ------------------
  |  |  756|  3.15k|#define parseContext (*pParseContext)
  ------------------
 6780|   964k|    }
 6781|   964k|#line 6782 "MachineIndependent/glslang_tab.cpp"
 6782|   964k|    break;
 6783|       |
 6784|  13.7k|  case 127: /* init_declarator_list: single_declaration  */
  ------------------
  |  Branch (6784:3): [True: 13.7k, False: 12.5M]
  ------------------
 6785|  13.7k|#line 1167 "MachineIndependent/glslang.y"
 6786|  13.7k|                         {
 6787|  13.7k|        (yyval.interm) = (yyvsp[0].interm);
 6788|  13.7k|    }
 6789|  13.7k|#line 6790 "MachineIndependent/glslang_tab.cpp"
 6790|  13.7k|    break;
 6791|       |
 6792|      0|  case 128: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER  */
  ------------------
  |  Branch (6792:3): [True: 0, False: 12.5M]
  ------------------
 6793|      0|#line 1170 "MachineIndependent/glslang.y"
 6794|      0|                                            {
 6795|      0|        (yyval.interm) = (yyvsp[-2].interm);
 6796|      0|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6797|      0|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, declNode, (yyvsp[0].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6798|      0|    }
 6799|      0|#line 6800 "MachineIndependent/glslang_tab.cpp"
 6800|      0|    break;
 6801|       |
 6802|      0|  case 129: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier  */
  ------------------
  |  Branch (6802:3): [True: 0, False: 12.5M]
  ------------------
 6803|      0|#line 1175 "MachineIndependent/glslang.y"
 6804|      0|                                                            {
 6805|      0|        (yyval.interm) = (yyvsp[-3].interm);
 6806|      0|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6807|      0|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-3].interm).intermNode, declNode, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6808|      0|    }
 6809|      0|#line 6810 "MachineIndependent/glslang_tab.cpp"
 6810|      0|    break;
 6811|       |
 6812|      0|  case 130: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer  */
  ------------------
  |  Branch (6812:3): [True: 0, False: 12.5M]
  ------------------
 6813|      0|#line 1180 "MachineIndependent/glslang.y"
 6814|      0|                                                                              {
 6815|      0|        (yyval.interm).type = (yyvsp[-5].interm).type;
 6816|      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));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6817|      0|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, declNode, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6818|      0|    }
 6819|      0|#line 6820 "MachineIndependent/glslang_tab.cpp"
 6820|      0|    break;
 6821|       |
 6822|      0|  case 131: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer  */
  ------------------
  |  Branch (6822:3): [True: 0, False: 12.5M]
  ------------------
 6823|      0|#line 1185 "MachineIndependent/glslang.y"
 6824|      0|                                                              {
 6825|      0|        (yyval.interm).type = (yyvsp[-4].interm).type;
 6826|      0|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6827|      0|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, declNode, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6828|      0|    }
 6829|      0|#line 6830 "MachineIndependent/glslang_tab.cpp"
 6830|      0|    break;
 6831|       |
 6832|     17|  case 132: /* single_declaration: fully_specified_type  */
  ------------------
  |  Branch (6832:3): [True: 17, False: 12.5M]
  ------------------
 6833|     17|#line 1193 "MachineIndependent/glslang.y"
 6834|     17|                           {
 6835|     17|        (yyval.interm).type = (yyvsp[0].interm.type);
 6836|     17|        (yyval.interm).intermNode = 0;
 6837|     17|        parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
  ------------------
  |  |  756|     17|#define parseContext (*pParseContext)
  ------------------
 6838|     17|    }
 6839|     17|#line 6840 "MachineIndependent/glslang_tab.cpp"
 6840|     17|    break;
 6841|       |
 6842|  8.85k|  case 133: /* single_declaration: fully_specified_type IDENTIFIER  */
  ------------------
  |  Branch (6842:3): [True: 8.85k, False: 12.5M]
  ------------------
 6843|  8.85k|#line 1198 "MachineIndependent/glslang.y"
 6844|  8.85k|                                      {
 6845|  8.85k|        (yyval.interm).type = (yyvsp[-1].interm.type);
 6846|  8.85k|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
  ------------------
  |  |  756|  8.85k|#define parseContext (*pParseContext)
  ------------------
 6847|  8.85k|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(nullptr, declNode, (yyvsp[0].lex).loc);
  ------------------
  |  |  756|  8.85k|#define parseContext (*pParseContext)
  ------------------
 6848|       |
 6849|  8.85k|    }
 6850|  8.85k|#line 6851 "MachineIndependent/glslang_tab.cpp"
 6851|  8.85k|    break;
 6852|       |
 6853|    494|  case 134: /* single_declaration: fully_specified_type IDENTIFIER array_specifier  */
  ------------------
  |  Branch (6853:3): [True: 494, False: 12.5M]
  ------------------
 6854|    494|#line 1204 "MachineIndependent/glslang.y"
 6855|    494|                                                      {
 6856|    494|        (yyval.interm).type = (yyvsp[-2].interm.type);
 6857|    494|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
  ------------------
  |  |  756|    494|#define parseContext (*pParseContext)
  ------------------
 6858|    494|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(nullptr, declNode, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|    494|#define parseContext (*pParseContext)
  ------------------
 6859|    494|    }
 6860|    494|#line 6861 "MachineIndependent/glslang_tab.cpp"
 6861|    494|    break;
 6862|       |
 6863|      9|  case 135: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer  */
  ------------------
  |  Branch (6863:3): [True: 9, False: 12.5M]
  ------------------
 6864|      9|#line 1209 "MachineIndependent/glslang.y"
 6865|      9|                                                                        {
 6866|      9|        (yyval.interm).type = (yyvsp[-4].interm.type);
 6867|      9|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      9|#define parseContext (*pParseContext)
  ------------------
 6868|      9|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(nullptr, declNode, (yyvsp[-3].lex).loc);
  ------------------
  |  |  756|      9|#define parseContext (*pParseContext)
  ------------------
 6869|      9|    }
 6870|      9|#line 6871 "MachineIndependent/glslang_tab.cpp"
 6871|      9|    break;
 6872|       |
 6873|  4.38k|  case 136: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer  */
  ------------------
  |  Branch (6873:3): [True: 4.38k, False: 12.5M]
  ------------------
 6874|  4.38k|#line 1214 "MachineIndependent/glslang.y"
 6875|  4.38k|                                                        {
 6876|  4.38k|        (yyval.interm).type = (yyvsp[-3].interm.type);
 6877|  4.38k|        TIntermNode* declNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|  4.38k|#define parseContext (*pParseContext)
  ------------------
 6878|  4.38k|        (yyval.interm).intermNode = parseContext.intermediate.growAggregate(nullptr, declNode, (yyvsp[-2].lex).loc);
  ------------------
  |  |  756|  4.38k|#define parseContext (*pParseContext)
  ------------------
 6879|  4.38k|    }
 6880|  4.38k|#line 6881 "MachineIndependent/glslang_tab.cpp"
 6881|  4.38k|    break;
 6882|       |
 6883|   430k|  case 137: /* fully_specified_type: type_specifier  */
  ------------------
  |  Branch (6883:3): [True: 430k, False: 12.1M]
  ------------------
 6884|   430k|#line 1223 "MachineIndependent/glslang.y"
 6885|   430k|                     {
 6886|   430k|        (yyval.interm.type) = (yyvsp[0].interm.type);
 6887|       |
 6888|   430k|        parseContext.globalQualifierTypeCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyval.interm.type));
  ------------------
  |  |  756|   430k|#define parseContext (*pParseContext)
  ------------------
 6889|   430k|        if ((yyvsp[0].interm.type).arraySizes) {
  ------------------
  |  Branch (6889:13): [True: 0, False: 430k]
  ------------------
 6890|      0|            parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6891|      0|            parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6892|      0|        }
 6893|   430k|        parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier, (yyval.interm.type).hasTypeParameter());
  ------------------
  |  |  756|   430k|#define parseContext (*pParseContext)
  ------------------
 6894|   430k|    }
 6895|   430k|#line 6896 "MachineIndependent/glslang_tab.cpp"
 6896|   430k|    break;
 6897|       |
 6898|  50.2k|  case 138: /* fully_specified_type: type_qualifier type_specifier  */
  ------------------
  |  Branch (6898:3): [True: 50.2k, False: 12.5M]
  ------------------
 6899|  50.2k|#line 1233 "MachineIndependent/glslang.y"
 6900|  50.2k|                                     {
 6901|  50.2k|        parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, false, &(yyvsp[0].interm.type));
  ------------------
  |  |  756|  50.2k|#define parseContext (*pParseContext)
  ------------------
 6902|  50.2k|        parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
  ------------------
  |  |  756|  50.2k|#define parseContext (*pParseContext)
  ------------------
 6903|       |
 6904|  50.2k|        if ((yyvsp[0].interm.type).arraySizes) {
  ------------------
  |  Branch (6904:13): [True: 0, False: 50.2k]
  ------------------
 6905|      0|            parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6906|      0|            parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6907|      0|        }
 6908|       |
 6909|  50.2k|        if ((yyvsp[0].interm.type).arraySizes && parseContext.arrayQualifierError((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).qualifier))
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6909:13): [True: 0, False: 50.2k]
  |  Branch (6909:50): [True: 0, False: 0]
  ------------------
 6910|      0|            (yyvsp[0].interm.type).arraySizes = nullptr;
 6911|       |
 6912|  50.2k|        parseContext.checkNoShaderLayouts((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers);
  ------------------
  |  |  756|  50.2k|#define parseContext (*pParseContext)
  ------------------
 6913|  50.2k|        (yyvsp[0].interm.type).shaderQualifiers.merge((yyvsp[-1].interm.type).shaderQualifiers);
 6914|  50.2k|        parseContext.mergeQualifiers((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyvsp[-1].interm.type).qualifier, true);
  ------------------
  |  |  756|  50.2k|#define parseContext (*pParseContext)
  ------------------
 6915|  50.2k|        parseContext.precisionQualifierCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).basicType, (yyvsp[0].interm.type).qualifier, (yyvsp[0].interm.type).hasTypeParameter());
  ------------------
  |  |  756|  50.2k|#define parseContext (*pParseContext)
  ------------------
 6916|       |
 6917|  50.2k|        (yyval.interm.type) = (yyvsp[0].interm.type);
 6918|       |
 6919|  50.2k|        if (! (yyval.interm.type).qualifier.isInterpolation() &&
  ------------------
  |  Branch (6919:13): [True: 48.2k, False: 2.04k]
  ------------------
 6920|  48.2k|            ((parseContext.language == EShLangVertex   && (yyval.interm.type).qualifier.storage == EvqVaryingOut) ||
  ------------------
  |  |  756|  48.2k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6920:15): [True: 42.2k, False: 5.95k]
  |  Branch (6920:59): [True: 166, False: 42.1k]
  ------------------
 6921|  48.0k|             (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
  ------------------
  |  |  756|  48.0k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (6921:15): [True: 972, False: 47.1k]
  |  Branch (6921:59): [True: 328, False: 644]
  ------------------
 6922|    494|            (yyval.interm.type).qualifier.smooth = true;
 6923|  50.2k|    }
 6924|  50.2k|#line 6925 "MachineIndependent/glslang_tab.cpp"
 6925|  50.2k|    break;
 6926|       |
 6927|      0|  case 139: /* invariant_qualifier: INVARIANT  */
  ------------------
  |  Branch (6927:3): [True: 0, False: 12.5M]
  ------------------
 6928|      0|#line 1260 "MachineIndependent/glslang.y"
 6929|      0|                {
 6930|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6931|      0|        parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6932|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 6933|      0|        (yyval.interm.type).qualifier.invariant = true;
 6934|      0|    }
 6935|      0|#line 6936 "MachineIndependent/glslang_tab.cpp"
 6936|      0|    break;
 6937|       |
 6938|      0|  case 140: /* interpolation_qualifier: SMOOTH  */
  ------------------
  |  Branch (6938:3): [True: 0, False: 12.5M]
  ------------------
 6939|      0|#line 1269 "MachineIndependent/glslang.y"
 6940|      0|             {
 6941|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6942|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6943|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "smooth");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6944|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 6945|      0|        (yyval.interm.type).qualifier.smooth = true;
 6946|      0|    }
 6947|      0|#line 6948 "MachineIndependent/glslang_tab.cpp"
 6948|      0|    break;
 6949|       |
 6950|  2.04k|  case 141: /* interpolation_qualifier: FLAT  */
  ------------------
  |  Branch (6950:3): [True: 2.04k, False: 12.5M]
  ------------------
 6951|  2.04k|#line 1276 "MachineIndependent/glslang.y"
 6952|  2.04k|           {
 6953|  2.04k|        parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
  ------------------
  |  |  756|  2.04k|#define parseContext (*pParseContext)
  ------------------
 6954|  2.04k|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
  ------------------
  |  |  756|  2.04k|#define parseContext (*pParseContext)
  ------------------
 6955|  2.04k|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "flat");
  ------------------
  |  |  756|  2.04k|#define parseContext (*pParseContext)
  ------------------
 6956|  2.04k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 6957|  2.04k|        (yyval.interm.type).qualifier.flat = true;
 6958|  2.04k|    }
 6959|  2.04k|#line 6960 "MachineIndependent/glslang_tab.cpp"
 6960|  2.04k|    break;
 6961|       |
 6962|      0|  case 142: /* interpolation_qualifier: NOPERSPECTIVE  */
  ------------------
  |  Branch (6962:3): [True: 0, False: 12.5M]
  ------------------
 6963|      0|#line 1283 "MachineIndependent/glslang.y"
 6964|      0|                    {
 6965|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6966|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6967|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "noperspective");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6968|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 6969|      0|        (yyval.interm.type).qualifier.nopersp = true;
 6970|      0|    }
 6971|      0|#line 6972 "MachineIndependent/glslang_tab.cpp"
 6972|      0|    break;
 6973|       |
 6974|      0|  case 143: /* interpolation_qualifier: EXPLICITINTERPAMD  */
  ------------------
  |  Branch (6974:3): [True: 0, False: 12.5M]
  ------------------
 6975|      0|#line 1290 "MachineIndependent/glslang.y"
 6976|      0|                        {
 6977|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6978|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6979|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6980|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 6981|      0|        (yyval.interm.type).qualifier.explicitInterp = true;
 6982|      0|    }
 6983|      0|#line 6984 "MachineIndependent/glslang_tab.cpp"
 6984|      0|    break;
 6985|       |
 6986|      0|  case 144: /* interpolation_qualifier: PERVERTEXNV  */
  ------------------
  |  Branch (6986:3): [True: 0, False: 12.5M]
  ------------------
 6987|      0|#line 1297 "MachineIndependent/glslang.y"
 6988|      0|                  {
 6989|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6990|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6991|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6992|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 6993|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 6994|      0|        (yyval.interm.type).qualifier.pervertexNV = true;
 6995|      0|    }
 6996|      0|#line 6997 "MachineIndependent/glslang_tab.cpp"
 6997|      0|    break;
 6998|       |
 6999|      0|  case 145: /* interpolation_qualifier: PERVERTEXEXT  */
  ------------------
  |  Branch (6999:3): [True: 0, False: 12.5M]
  ------------------
 7000|      0|#line 1305 "MachineIndependent/glslang.y"
 7001|      0|                   {
 7002|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7003|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7004|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7005|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7006|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7007|      0|        (yyval.interm.type).qualifier.pervertexEXT = true;
 7008|      0|    }
 7009|      0|#line 7010 "MachineIndependent/glslang_tab.cpp"
 7010|      0|    break;
 7011|       |
 7012|      5|  case 146: /* interpolation_qualifier: PERPRIMITIVENV  */
  ------------------
  |  Branch (7012:3): [True: 5, False: 12.5M]
  ------------------
 7013|      5|#line 1313 "MachineIndependent/glslang.y"
 7014|      5|                     {
 7015|       |        // No need for profile version or extension check. Shader stage already checks both.
 7016|      5|        parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
  ------------------
  |  |  756|      5|#define parseContext (*pParseContext)
  ------------------
 7017|      5|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveNV");
  ------------------
  |  |  756|      5|#define parseContext (*pParseContext)
  ------------------
 7018|       |        // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
 7019|      5|        if (parseContext.language == EShLangFragment)
  ------------------
  |  |  756|      5|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7019:13): [True: 0, False: 5]
  ------------------
 7020|      0|            parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7021|      5|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7022|      5|        (yyval.interm.type).qualifier.perPrimitiveNV = true;
 7023|      5|    }
 7024|      5|#line 7025 "MachineIndependent/glslang_tab.cpp"
 7025|      5|    break;
 7026|       |
 7027|      5|  case 147: /* interpolation_qualifier: PERPRIMITIVEEXT  */
  ------------------
  |  Branch (7027:3): [True: 5, False: 12.5M]
  ------------------
 7028|      5|#line 1323 "MachineIndependent/glslang.y"
 7029|      5|                      {
 7030|       |        // No need for profile version or extension check. Shader stage already checks both.
 7031|      5|        parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveEXT");
  ------------------
  |  |  756|      5|#define parseContext (*pParseContext)
  ------------------
 7032|      5|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveEXT");
  ------------------
  |  |  756|      5|#define parseContext (*pParseContext)
  ------------------
 7033|       |        // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
 7034|      5|        if (parseContext.language == EShLangFragment)
  ------------------
  |  |  756|      5|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7034:13): [True: 0, False: 5]
  ------------------
 7035|      0|            parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_mesh_shader, "perprimitiveEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7036|      5|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7037|      5|        (yyval.interm.type).qualifier.perPrimitiveNV = true;
 7038|      5|    }
 7039|      5|#line 7040 "MachineIndependent/glslang_tab.cpp"
 7040|      5|    break;
 7041|       |
 7042|     35|  case 148: /* interpolation_qualifier: PERVIEWNV  */
  ------------------
  |  Branch (7042:3): [True: 35, False: 12.5M]
  ------------------
 7043|     35|#line 1333 "MachineIndependent/glslang.y"
 7044|     35|                {
 7045|       |        // No need for profile version or extension check. Shader stage already checks both.
 7046|     35|        parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
  ------------------
  |  |  756|     35|#define parseContext (*pParseContext)
  ------------------
 7047|     35|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangMesh, "perviewNV");
  ------------------
  |  |  756|     35|#define parseContext (*pParseContext)
  ------------------
 7048|     35|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7049|     35|        (yyval.interm.type).qualifier.perViewNV = true;
 7050|     35|    }
 7051|     35|#line 7052 "MachineIndependent/glslang_tab.cpp"
 7052|     35|    break;
 7053|       |
 7054|      0|  case 149: /* interpolation_qualifier: PERTASKNV  */
  ------------------
  |  Branch (7054:3): [True: 0, False: 12.5M]
  ------------------
 7055|      0|#line 1340 "MachineIndependent/glslang.y"
 7056|      0|                {
 7057|       |        // No need for profile version or extension check. Shader stage already checks both.
 7058|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7059|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7060|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7061|      0|        (yyval.interm.type).qualifier.perTaskNV = true;
 7062|      0|    }
 7063|      0|#line 7064 "MachineIndependent/glslang_tab.cpp"
 7064|      0|    break;
 7065|       |
 7066|    402|  case 150: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN  */
  ------------------
  |  Branch (7066:3): [True: 402, False: 12.5M]
  ------------------
 7067|    402|#line 1350 "MachineIndependent/glslang.y"
 7068|    402|                                                             {
 7069|    402|        (yyval.interm.type) = (yyvsp[-1].interm.type);
 7070|    402|    }
 7071|    402|#line 7072 "MachineIndependent/glslang_tab.cpp"
 7072|    402|    break;
 7073|       |
 7074|    402|  case 151: /* layout_qualifier_id_list: layout_qualifier_id  */
  ------------------
  |  Branch (7074:3): [True: 402, False: 12.5M]
  ------------------
 7075|    402|#line 1356 "MachineIndependent/glslang.y"
 7076|    402|                          {
 7077|    402|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7078|    402|    }
 7079|    402|#line 7080 "MachineIndependent/glslang_tab.cpp"
 7080|    402|    break;
 7081|       |
 7082|    276|  case 152: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id  */
  ------------------
  |  Branch (7082:3): [True: 276, False: 12.5M]
  ------------------
 7083|    276|#line 1359 "MachineIndependent/glslang.y"
 7084|    276|                                                         {
 7085|    276|        (yyval.interm.type) = (yyvsp[-2].interm.type);
 7086|    276|        (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
 7087|    276|        parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
  ------------------
  |  |  756|    276|#define parseContext (*pParseContext)
  ------------------
 7088|    276|    }
 7089|    276|#line 7090 "MachineIndependent/glslang_tab.cpp"
 7090|    276|    break;
 7091|       |
 7092|     66|  case 153: /* layout_qualifier_id: IDENTIFIER  */
  ------------------
  |  Branch (7092:3): [True: 66, False: 12.5M]
  ------------------
 7093|     66|#line 1366 "MachineIndependent/glslang.y"
 7094|     66|                 {
 7095|     66|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7096|     66|        parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
  ------------------
  |  |  756|     66|#define parseContext (*pParseContext)
  ------------------
 7097|     66|    }
 7098|     66|#line 7099 "MachineIndependent/glslang_tab.cpp"
 7099|     66|    break;
 7100|       |
 7101|    612|  case 154: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression  */
  ------------------
  |  Branch (7101:3): [True: 612, False: 12.5M]
  ------------------
 7102|    612|#line 1370 "MachineIndependent/glslang.y"
 7103|    612|                                           {
 7104|    612|        (yyval.interm.type).init((yyvsp[-2].lex).loc);
 7105|    612|        parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|    612|#define parseContext (*pParseContext)
  ------------------
 7106|    612|    }
 7107|    612|#line 7108 "MachineIndependent/glslang_tab.cpp"
 7108|    612|    break;
 7109|       |
 7110|      0|  case 155: /* layout_qualifier_id: SHARED  */
  ------------------
  |  Branch (7110:3): [True: 0, False: 12.5M]
  ------------------
 7111|      0|#line 1374 "MachineIndependent/glslang.y"
 7112|      0|             { // because "shared" is both an identifier and a keyword
 7113|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7114|      0|        TString strShared("shared");
 7115|      0|        parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7116|      0|    }
 7117|      0|#line 7118 "MachineIndependent/glslang_tab.cpp"
 7118|      0|    break;
 7119|       |
 7120|      0|  case 156: /* precise_qualifier: PRECISE  */
  ------------------
  |  Branch (7120:3): [True: 0, False: 12.5M]
  ------------------
 7121|      0|#line 1382 "MachineIndependent/glslang.y"
 7122|      0|              {
 7123|      0|        parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7124|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7125|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7126|      0|        (yyval.interm.type).qualifier.noContraction = true;
 7127|      0|    }
 7128|      0|#line 7129 "MachineIndependent/glslang_tab.cpp"
 7129|      0|    break;
 7130|       |
 7131|   156k|  case 157: /* type_qualifier: single_type_qualifier  */
  ------------------
  |  Branch (7131:3): [True: 156k, False: 12.4M]
  ------------------
 7132|   156k|#line 1391 "MachineIndependent/glslang.y"
 7133|   156k|                            {
 7134|   156k|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7135|   156k|    }
 7136|   156k|#line 7137 "MachineIndependent/glslang_tab.cpp"
 7137|   156k|    break;
 7138|       |
 7139|   122k|  case 158: /* type_qualifier: type_qualifier single_type_qualifier  */
  ------------------
  |  Branch (7139:3): [True: 122k, False: 12.4M]
  ------------------
 7140|   122k|#line 1394 "MachineIndependent/glslang.y"
 7141|   122k|                                           {
 7142|   122k|        (yyval.interm.type) = (yyvsp[-1].interm.type);
 7143|   122k|        if ((yyval.interm.type).basicType == EbtVoid)
  ------------------
  |  Branch (7143:13): [True: 122k, False: 0]
  ------------------
 7144|   122k|            (yyval.interm.type).basicType = (yyvsp[0].interm.type).basicType;
 7145|       |
 7146|   122k|        (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
 7147|   122k|        parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
  ------------------
  |  |  756|   122k|#define parseContext (*pParseContext)
  ------------------
 7148|   122k|    }
 7149|   122k|#line 7150 "MachineIndependent/glslang_tab.cpp"
 7150|   122k|    break;
 7151|       |
 7152|   190k|  case 159: /* single_type_qualifier: storage_qualifier  */
  ------------------
  |  Branch (7152:3): [True: 190k, False: 12.3M]
  ------------------
 7153|   190k|#line 1405 "MachineIndependent/glslang.y"
 7154|   190k|                        {
 7155|   190k|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7156|   190k|    }
 7157|   190k|#line 7158 "MachineIndependent/glslang_tab.cpp"
 7158|   190k|    break;
 7159|       |
 7160|    402|  case 160: /* single_type_qualifier: layout_qualifier  */
  ------------------
  |  Branch (7160:3): [True: 402, False: 12.5M]
  ------------------
 7161|    402|#line 1408 "MachineIndependent/glslang.y"
 7162|    402|                       {
 7163|    402|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7164|    402|    }
 7165|    402|#line 7166 "MachineIndependent/glslang_tab.cpp"
 7166|    402|    break;
 7167|       |
 7168|  86.5k|  case 161: /* single_type_qualifier: precision_qualifier  */
  ------------------
  |  Branch (7168:3): [True: 86.5k, False: 12.4M]
  ------------------
 7169|  86.5k|#line 1411 "MachineIndependent/glslang.y"
 7170|  86.5k|                          {
 7171|  86.5k|        parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
  ------------------
  |  |  756|  86.5k|#define parseContext (*pParseContext)
  ------------------
 7172|  86.5k|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7173|  86.5k|    }
 7174|  86.5k|#line 7175 "MachineIndependent/glslang_tab.cpp"
 7175|  86.5k|    break;
 7176|       |
 7177|  2.09k|  case 162: /* single_type_qualifier: interpolation_qualifier  */
  ------------------
  |  Branch (7177:3): [True: 2.09k, False: 12.5M]
  ------------------
 7178|  2.09k|#line 1415 "MachineIndependent/glslang.y"
 7179|  2.09k|                              {
 7180|       |        // allow inheritance of storage qualifier from block declaration
 7181|  2.09k|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7182|  2.09k|    }
 7183|  2.09k|#line 7184 "MachineIndependent/glslang_tab.cpp"
 7184|  2.09k|    break;
 7185|       |
 7186|      0|  case 163: /* single_type_qualifier: invariant_qualifier  */
  ------------------
  |  Branch (7186:3): [True: 0, False: 12.5M]
  ------------------
 7187|      0|#line 1419 "MachineIndependent/glslang.y"
 7188|      0|                          {
 7189|       |        // allow inheritance of storage qualifier from block declaration
 7190|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7191|      0|    }
 7192|      0|#line 7193 "MachineIndependent/glslang_tab.cpp"
 7193|      0|    break;
 7194|       |
 7195|      0|  case 164: /* single_type_qualifier: precise_qualifier  */
  ------------------
  |  Branch (7195:3): [True: 0, False: 12.5M]
  ------------------
 7196|      0|#line 1423 "MachineIndependent/glslang.y"
 7197|      0|                        {
 7198|       |        // allow inheritance of storage qualifier from block declaration
 7199|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7200|      0|    }
 7201|      0|#line 7202 "MachineIndependent/glslang_tab.cpp"
 7202|      0|    break;
 7203|       |
 7204|      0|  case 165: /* single_type_qualifier: non_uniform_qualifier  */
  ------------------
  |  Branch (7204:3): [True: 0, False: 12.5M]
  ------------------
 7205|      0|#line 1427 "MachineIndependent/glslang.y"
 7206|      0|                            {
 7207|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7208|      0|    }
 7209|      0|#line 7210 "MachineIndependent/glslang_tab.cpp"
 7210|      0|    break;
 7211|       |
 7212|      0|  case 166: /* single_type_qualifier: spirv_storage_class_qualifier  */
  ------------------
  |  Branch (7212:3): [True: 0, False: 12.5M]
  ------------------
 7213|      0|#line 1430 "MachineIndependent/glslang.y"
 7214|      0|                                    {
 7215|      0|        parseContext.globalCheck((yyvsp[0].interm.type).loc, "spirv_storage_class");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7216|      0|        parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V storage class qualifier");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7217|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7218|      0|    }
 7219|      0|#line 7220 "MachineIndependent/glslang_tab.cpp"
 7220|      0|    break;
 7221|       |
 7222|      0|  case 167: /* single_type_qualifier: spirv_decorate_qualifier  */
  ------------------
  |  Branch (7222:3): [True: 0, False: 12.5M]
  ------------------
 7223|      0|#line 1435 "MachineIndependent/glslang.y"
 7224|      0|                               {
 7225|      0|        parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V decorate qualifier");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7226|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
 7227|      0|    }
 7228|      0|#line 7229 "MachineIndependent/glslang_tab.cpp"
 7229|      0|    break;
 7230|       |
 7231|      0|  case 168: /* single_type_qualifier: SPIRV_BY_REFERENCE  */
  ------------------
  |  Branch (7231:3): [True: 0, False: 12.5M]
  ------------------
 7232|      0|#line 1439 "MachineIndependent/glslang.y"
 7233|      0|                         {
 7234|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_reference");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7235|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7236|      0|        (yyval.interm.type).qualifier.setSpirvByReference();
 7237|      0|    }
 7238|      0|#line 7239 "MachineIndependent/glslang_tab.cpp"
 7239|      0|    break;
 7240|       |
 7241|      0|  case 169: /* single_type_qualifier: SPIRV_LITERAL  */
  ------------------
  |  Branch (7241:3): [True: 0, False: 12.5M]
  ------------------
 7242|      0|#line 1444 "MachineIndependent/glslang.y"
 7243|      0|                    {
 7244|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_literal");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7245|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7246|      0|        (yyval.interm.type).qualifier.setSpirvLiteral();
 7247|      0|    }
 7248|      0|#line 7249 "MachineIndependent/glslang_tab.cpp"
 7249|      0|    break;
 7250|       |
 7251|  4.15k|  case 170: /* storage_qualifier: CONST  */
  ------------------
  |  Branch (7251:3): [True: 4.15k, False: 12.5M]
  ------------------
 7252|  4.15k|#line 1452 "MachineIndependent/glslang.y"
 7253|  4.15k|            {
 7254|  4.15k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7255|  4.15k|        (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
 7256|  4.15k|    }
 7257|  4.15k|#line 7258 "MachineIndependent/glslang_tab.cpp"
 7258|  4.15k|    break;
 7259|       |
 7260|    652|  case 171: /* storage_qualifier: INOUT  */
  ------------------
  |  Branch (7260:3): [True: 652, False: 12.5M]
  ------------------
 7261|    652|#line 1456 "MachineIndependent/glslang.y"
 7262|    652|            {
 7263|    652|        parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
  ------------------
  |  |  756|    652|#define parseContext (*pParseContext)
  ------------------
 7264|    652|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7265|    652|        (yyval.interm.type).qualifier.storage = EvqInOut;
 7266|    652|    }
 7267|    652|#line 7268 "MachineIndependent/glslang_tab.cpp"
 7268|    652|    break;
 7269|       |
 7270|  7.77k|  case 172: /* storage_qualifier: IN  */
  ------------------
  |  Branch (7270:3): [True: 7.77k, False: 12.5M]
  ------------------
 7271|  7.77k|#line 1461 "MachineIndependent/glslang.y"
 7272|  7.77k|         {
 7273|  7.77k|        parseContext.globalCheck((yyvsp[0].lex).loc, "in");
  ------------------
  |  |  756|  7.77k|#define parseContext (*pParseContext)
  ------------------
 7274|  7.77k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7275|       |        // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
 7276|  7.77k|        (yyval.interm.type).qualifier.storage = EvqIn;
 7277|  7.77k|    }
 7278|  7.77k|#line 7279 "MachineIndependent/glslang_tab.cpp"
 7279|  7.77k|    break;
 7280|       |
 7281|  12.5k|  case 173: /* storage_qualifier: OUT  */
  ------------------
  |  Branch (7281:3): [True: 12.5k, False: 12.5M]
  ------------------
 7282|  12.5k|#line 1467 "MachineIndependent/glslang.y"
 7283|  12.5k|          {
 7284|  12.5k|        parseContext.globalCheck((yyvsp[0].lex).loc, "out");
  ------------------
  |  |  756|  12.5k|#define parseContext (*pParseContext)
  ------------------
 7285|  12.5k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7286|       |        // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
 7287|  12.5k|        (yyval.interm.type).qualifier.storage = EvqOut;
 7288|  12.5k|    }
 7289|  12.5k|#line 7290 "MachineIndependent/glslang_tab.cpp"
 7290|  12.5k|    break;
 7291|       |
 7292|      0|  case 174: /* storage_qualifier: CENTROID  */
  ------------------
  |  Branch (7292:3): [True: 0, False: 12.5M]
  ------------------
 7293|      0|#line 1473 "MachineIndependent/glslang.y"
 7294|      0|               {
 7295|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7296|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7297|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "centroid");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7298|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7299|      0|        (yyval.interm.type).qualifier.centroid = true;
 7300|      0|    }
 7301|      0|#line 7302 "MachineIndependent/glslang_tab.cpp"
 7302|      0|    break;
 7303|       |
 7304|    399|  case 175: /* storage_qualifier: UNIFORM  */
  ------------------
  |  Branch (7304:3): [True: 399, False: 12.5M]
  ------------------
 7305|    399|#line 1480 "MachineIndependent/glslang.y"
 7306|    399|              {
 7307|    399|        parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
  ------------------
  |  |  756|    399|#define parseContext (*pParseContext)
  ------------------
 7308|    399|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7309|    399|        (yyval.interm.type).qualifier.storage = EvqUniform;
 7310|    399|    }
 7311|    399|#line 7312 "MachineIndependent/glslang_tab.cpp"
 7312|    399|    break;
 7313|       |
 7314|      0|  case 176: /* storage_qualifier: TILEIMAGEEXT  */
  ------------------
  |  Branch (7314:3): [True: 0, False: 12.5M]
  ------------------
 7315|      0|#line 1485 "MachineIndependent/glslang.y"
 7316|      0|                   {
 7317|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "tileImageEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7318|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7319|      0|        (yyval.interm.type).qualifier.storage = EvqTileImageEXT;
 7320|      0|    }
 7321|      0|#line 7322 "MachineIndependent/glslang_tab.cpp"
 7322|      0|    break;
 7323|       |
 7324|      0|  case 177: /* storage_qualifier: SHARED  */
  ------------------
  |  Branch (7324:3): [True: 0, False: 12.5M]
  ------------------
 7325|      0|#line 1490 "MachineIndependent/glslang.y"
 7326|      0|             {
 7327|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7328|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7329|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7330|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshMask | EShLangTaskMask), "shared");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7331|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7332|      0|        (yyval.interm.type).qualifier.storage = EvqShared;
 7333|      0|    }
 7334|      0|#line 7335 "MachineIndependent/glslang_tab.cpp"
 7335|      0|    break;
 7336|       |
 7337|      0|  case 178: /* storage_qualifier: BUFFER  */
  ------------------
  |  Branch (7337:3): [True: 0, False: 12.5M]
  ------------------
 7338|      0|#line 1498 "MachineIndependent/glslang.y"
 7339|      0|             {
 7340|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7341|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7342|      0|        (yyval.interm.type).qualifier.storage = EvqBuffer;
 7343|      0|    }
 7344|      0|#line 7345 "MachineIndependent/glslang_tab.cpp"
 7345|      0|    break;
 7346|       |
 7347|      0|  case 179: /* storage_qualifier: ATTRIBUTE  */
  ------------------
  |  Branch (7347:3): [True: 0, False: 12.5M]
  ------------------
 7348|      0|#line 1503 "MachineIndependent/glslang.y"
 7349|      0|                {
 7350|      0|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7351|      0|        parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7352|      0|        parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "attribute");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7353|      0|        parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "attribute");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7354|      0|        parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "attribute");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7355|       |
 7356|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "attribute");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7357|       |
 7358|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7359|      0|        (yyval.interm.type).qualifier.storage = EvqVaryingIn;
 7360|      0|    }
 7361|      0|#line 7362 "MachineIndependent/glslang_tab.cpp"
 7362|      0|    break;
 7363|       |
 7364|      0|  case 180: /* storage_qualifier: VARYING  */
  ------------------
  |  Branch (7364:3): [True: 0, False: 12.5M]
  ------------------
 7365|      0|#line 1515 "MachineIndependent/glslang.y"
 7366|      0|              {
 7367|      0|        parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7368|      0|        parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7369|      0|        parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "varying");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7370|      0|        parseContext.requireNotRemoved((yyvsp[0].lex).loc, EEsProfile, 300, "varying");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7371|       |
 7372|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "varying");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7373|       |
 7374|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7375|      0|        if (parseContext.language == EShLangVertex)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (7375:13): [True: 0, False: 0]
  ------------------
 7376|      0|            (yyval.interm.type).qualifier.storage = EvqVaryingOut;
 7377|      0|        else
 7378|      0|            (yyval.interm.type).qualifier.storage = EvqVaryingIn;
 7379|      0|    }
 7380|      0|#line 7381 "MachineIndependent/glslang_tab.cpp"
 7381|      0|    break;
 7382|       |
 7383|     52|  case 181: /* storage_qualifier: PATCH  */
  ------------------
  |  Branch (7383:3): [True: 52, False: 12.5M]
  ------------------
 7384|     52|#line 1529 "MachineIndependent/glslang.y"
 7385|     52|            {
 7386|     52|        parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
  ------------------
  |  |  756|     52|#define parseContext (*pParseContext)
  ------------------
 7387|     52|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
  ------------------
  |  |  756|     52|#define parseContext (*pParseContext)
  ------------------
 7388|     52|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7389|     52|        (yyval.interm.type).qualifier.patch = true;
 7390|     52|    }
 7391|     52|#line 7392 "MachineIndependent/glslang_tab.cpp"
 7392|     52|    break;
 7393|       |
 7394|      0|  case 182: /* storage_qualifier: SAMPLE  */
  ------------------
  |  Branch (7394:3): [True: 0, False: 12.5M]
  ------------------
 7395|      0|#line 1535 "MachineIndependent/glslang.y"
 7396|      0|             {
 7397|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7398|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7399|      0|        (yyval.interm.type).qualifier.sample = true;
 7400|      0|    }
 7401|      0|#line 7402 "MachineIndependent/glslang_tab.cpp"
 7402|      0|    break;
 7403|       |
 7404|      0|  case 183: /* storage_qualifier: RESOURCEHEAP  */
  ------------------
  |  Branch (7404:3): [True: 0, False: 12.5M]
  ------------------
 7405|      0|#line 1540 "MachineIndependent/glslang.y"
 7406|      0|                   {
 7407|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "resourceHeap");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7408|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7409|      0|        (yyval.interm.type).qualifier.storage = EvqResourceHeap;
 7410|      0|    }
 7411|      0|#line 7412 "MachineIndependent/glslang_tab.cpp"
 7412|      0|    break;
 7413|       |
 7414|      0|  case 184: /* storage_qualifier: SAMPLERHEAP  */
  ------------------
  |  Branch (7414:3): [True: 0, False: 12.5M]
  ------------------
 7415|      0|#line 1545 "MachineIndependent/glslang.y"
 7416|      0|                  {
 7417|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "samplerHeap");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7418|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7419|      0|        (yyval.interm.type).qualifier.storage = EvqSamplerHeap;
 7420|      0|    }
 7421|      0|#line 7422 "MachineIndependent/glslang_tab.cpp"
 7422|      0|    break;
 7423|       |
 7424|      0|  case 185: /* storage_qualifier: HITATTRNV  */
  ------------------
  |  Branch (7424:3): [True: 0, False: 12.5M]
  ------------------
 7425|      0|#line 1550 "MachineIndependent/glslang.y"
 7426|      0|                {
 7427|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7428|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7429|      0|            | EShLangAnyHitMask), "hitAttributeNV");
 7430|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "hitAttributeNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7431|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7432|      0|        (yyval.interm.type).qualifier.storage = EvqHitAttr;
 7433|      0|    }
 7434|      0|#line 7435 "MachineIndependent/glslang_tab.cpp"
 7435|      0|    break;
 7436|       |
 7437|      0|  case 186: /* storage_qualifier: HITOBJECTATTRNV  */
  ------------------
  |  Branch (7437:3): [True: 0, False: 12.5M]
  ------------------
 7438|      0|#line 1558 "MachineIndependent/glslang.y"
 7439|      0|                      {
 7440|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7441|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7442|      0|            | EShLangMissMask), "hitObjectAttributeNV");
 7443|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_shader_invocation_reorder, "hitObjectAttributeNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7444|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7445|      0|        (yyval.interm.type).qualifier.storage = EvqHitObjectAttrNV;
 7446|      0|    }
 7447|      0|#line 7448 "MachineIndependent/glslang_tab.cpp"
 7448|      0|    break;
 7449|       |
 7450|      0|  case 187: /* storage_qualifier: HITOBJECTATTREXT  */
  ------------------
  |  Branch (7450:3): [True: 0, False: 12.5M]
  ------------------
 7451|      0|#line 1566 "MachineIndependent/glslang.y"
 7452|      0|                       {
 7453|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7454|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7455|      0|            | EShLangMissMask), "hitObjectAttributeEXT");
 7456|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_shader_invocation_reorder, "hitObjectAttributeEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7457|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7458|      0|        (yyval.interm.type).qualifier.storage = EvqHitObjectAttrEXT;
 7459|      0|    }
 7460|      0|#line 7461 "MachineIndependent/glslang_tab.cpp"
 7461|      0|    break;
 7462|       |
 7463|      0|  case 188: /* storage_qualifier: HITATTREXT  */
  ------------------
  |  Branch (7463:3): [True: 0, False: 12.5M]
  ------------------
 7464|      0|#line 1574 "MachineIndependent/glslang.y"
 7465|      0|                 {
 7466|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7467|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7468|      0|            | EShLangAnyHitMask), "hitAttributeEXT");
 7469|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "hitAttributeNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7470|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7471|      0|        (yyval.interm.type).qualifier.storage = EvqHitAttr;
 7472|      0|    }
 7473|      0|#line 7474 "MachineIndependent/glslang_tab.cpp"
 7474|      0|    break;
 7475|       |
 7476|      0|  case 189: /* storage_qualifier: PAYLOADNV  */
  ------------------
  |  Branch (7476:3): [True: 0, False: 12.5M]
  ------------------
 7477|      0|#line 1582 "MachineIndependent/glslang.y"
 7478|      0|                {
 7479|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7480|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7481|      0|            EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV");
 7482|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7483|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7484|      0|        (yyval.interm.type).qualifier.storage = EvqPayload;
 7485|      0|    }
 7486|      0|#line 7487 "MachineIndependent/glslang_tab.cpp"
 7487|      0|    break;
 7488|       |
 7489|      0|  case 190: /* storage_qualifier: PAYLOADEXT  */
  ------------------
  |  Branch (7489:3): [True: 0, False: 12.5M]
  ------------------
 7490|      0|#line 1590 "MachineIndependent/glslang.y"
 7491|      0|                 {
 7492|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7493|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7494|      0|            EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT");
 7495|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7496|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7497|      0|        (yyval.interm.type).qualifier.storage = EvqPayload;
 7498|      0|    }
 7499|      0|#line 7500 "MachineIndependent/glslang_tab.cpp"
 7500|      0|    break;
 7501|       |
 7502|      0|  case 191: /* storage_qualifier: PAYLOADINNV  */
  ------------------
  |  Branch (7502:3): [True: 0, False: 12.5M]
  ------------------
 7503|      0|#line 1598 "MachineIndependent/glslang.y"
 7504|      0|                  {
 7505|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7506|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7507|      0|            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV");
 7508|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "rayPayloadInNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7509|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7510|      0|        (yyval.interm.type).qualifier.storage = EvqPayloadIn;
 7511|      0|    }
 7512|      0|#line 7513 "MachineIndependent/glslang_tab.cpp"
 7513|      0|    break;
 7514|       |
 7515|      0|  case 192: /* storage_qualifier: PAYLOADINEXT  */
  ------------------
  |  Branch (7515:3): [True: 0, False: 12.5M]
  ------------------
 7516|      0|#line 1606 "MachineIndependent/glslang.y"
 7517|      0|                   {
 7518|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7519|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7520|      0|            EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT");
 7521|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "rayPayloadInEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7522|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7523|      0|        (yyval.interm.type).qualifier.storage = EvqPayloadIn;
 7524|      0|    }
 7525|      0|#line 7526 "MachineIndependent/glslang_tab.cpp"
 7526|      0|    break;
 7527|       |
 7528|      0|  case 193: /* storage_qualifier: CALLDATANV  */
  ------------------
  |  Branch (7528:3): [True: 0, False: 12.5M]
  ------------------
 7529|      0|#line 1614 "MachineIndependent/glslang.y"
 7530|      0|                 {
 7531|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7532|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7533|      0|            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV");
 7534|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7535|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7536|      0|        (yyval.interm.type).qualifier.storage = EvqCallableData;
 7537|      0|    }
 7538|      0|#line 7539 "MachineIndependent/glslang_tab.cpp"
 7539|      0|    break;
 7540|       |
 7541|      0|  case 194: /* storage_qualifier: CALLDATAEXT  */
  ------------------
  |  Branch (7541:3): [True: 0, False: 12.5M]
  ------------------
 7542|      0|#line 1622 "MachineIndependent/glslang.y"
 7543|      0|                  {
 7544|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7545|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7546|      0|            EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT");
 7547|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7548|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7549|      0|        (yyval.interm.type).qualifier.storage = EvqCallableData;
 7550|      0|    }
 7551|      0|#line 7552 "MachineIndependent/glslang_tab.cpp"
 7552|      0|    break;
 7553|       |
 7554|      0|  case 195: /* storage_qualifier: CALLDATAINNV  */
  ------------------
  |  Branch (7554:3): [True: 0, False: 12.5M]
  ------------------
 7555|      0|#line 1630 "MachineIndependent/glslang.y"
 7556|      0|                   {
 7557|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7558|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7559|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7560|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7561|      0|        (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
 7562|      0|    }
 7563|      0|#line 7564 "MachineIndependent/glslang_tab.cpp"
 7564|      0|    break;
 7565|       |
 7566|      0|  case 196: /* storage_qualifier: CALLDATAINEXT  */
  ------------------
  |  Branch (7566:3): [True: 0, False: 12.5M]
  ------------------
 7567|      0|#line 1637 "MachineIndependent/glslang.y"
 7568|      0|                    {
 7569|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7570|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7571|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataInEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7572|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7573|      0|        (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
 7574|      0|    }
 7575|      0|#line 7576 "MachineIndependent/glslang_tab.cpp"
 7576|      0|    break;
 7577|       |
 7578|  52.0k|  case 197: /* storage_qualifier: COHERENT  */
  ------------------
  |  Branch (7578:3): [True: 52.0k, False: 12.5M]
  ------------------
 7579|  52.0k|#line 1644 "MachineIndependent/glslang.y"
 7580|  52.0k|               {
 7581|  52.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7582|  52.0k|        (yyval.interm.type).qualifier.coherent = true;
 7583|  52.0k|    }
 7584|  52.0k|#line 7585 "MachineIndependent/glslang_tab.cpp"
 7585|  52.0k|    break;
 7586|       |
 7587|      0|  case 198: /* storage_qualifier: DEVICECOHERENT  */
  ------------------
  |  Branch (7587:3): [True: 0, False: 12.5M]
  ------------------
 7588|      0|#line 1648 "MachineIndependent/glslang.y"
 7589|      0|                     {
 7590|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7591|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7592|      0|        (yyval.interm.type).qualifier.devicecoherent = true;
 7593|      0|    }
 7594|      0|#line 7595 "MachineIndependent/glslang_tab.cpp"
 7595|      0|    break;
 7596|       |
 7597|      0|  case 199: /* storage_qualifier: QUEUEFAMILYCOHERENT  */
  ------------------
  |  Branch (7597:3): [True: 0, False: 12.5M]
  ------------------
 7598|      0|#line 1653 "MachineIndependent/glslang.y"
 7599|      0|                          {
 7600|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7601|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7602|      0|        (yyval.interm.type).qualifier.queuefamilycoherent = true;
 7603|      0|    }
 7604|      0|#line 7605 "MachineIndependent/glslang_tab.cpp"
 7605|      0|    break;
 7606|       |
 7607|      0|  case 200: /* storage_qualifier: WORKGROUPCOHERENT  */
  ------------------
  |  Branch (7607:3): [True: 0, False: 12.5M]
  ------------------
 7608|      0|#line 1658 "MachineIndependent/glslang.y"
 7609|      0|                        {
 7610|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7611|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7612|      0|        (yyval.interm.type).qualifier.workgroupcoherent = true;
 7613|      0|    }
 7614|      0|#line 7615 "MachineIndependent/glslang_tab.cpp"
 7615|      0|    break;
 7616|       |
 7617|      0|  case 201: /* storage_qualifier: SUBGROUPCOHERENT  */
  ------------------
  |  Branch (7617:3): [True: 0, False: 12.5M]
  ------------------
 7618|      0|#line 1663 "MachineIndependent/glslang.y"
 7619|      0|                       {
 7620|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7621|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7622|      0|        (yyval.interm.type).qualifier.subgroupcoherent = true;
 7623|      0|    }
 7624|      0|#line 7625 "MachineIndependent/glslang_tab.cpp"
 7625|      0|    break;
 7626|       |
 7627|      0|  case 202: /* storage_qualifier: NONPRIVATE  */
  ------------------
  |  Branch (7627:3): [True: 0, False: 12.5M]
  ------------------
 7628|      0|#line 1668 "MachineIndependent/glslang.y"
 7629|      0|                 {
 7630|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7631|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7632|      0|        (yyval.interm.type).qualifier.nonprivate = true;
 7633|      0|    }
 7634|      0|#line 7635 "MachineIndependent/glslang_tab.cpp"
 7635|      0|    break;
 7636|       |
 7637|      0|  case 203: /* storage_qualifier: SHADERCALLCOHERENT  */
  ------------------
  |  Branch (7637:3): [True: 0, False: 12.5M]
  ------------------
 7638|      0|#line 1673 "MachineIndependent/glslang.y"
 7639|      0|                         {
 7640|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7641|      0|        parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7642|      0|        (yyval.interm.type).qualifier.shadercallcoherent = true;
 7643|      0|    }
 7644|      0|#line 7645 "MachineIndependent/glslang_tab.cpp"
 7645|      0|    break;
 7646|       |
 7647|  52.8k|  case 204: /* storage_qualifier: VOLATILE  */
  ------------------
  |  Branch (7647:3): [True: 52.8k, False: 12.5M]
  ------------------
 7648|  52.8k|#line 1678 "MachineIndependent/glslang.y"
 7649|  52.8k|               {
 7650|  52.8k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7651|  52.8k|        (yyval.interm.type).qualifier.volatil = true;
 7652|  52.8k|    }
 7653|  52.8k|#line 7654 "MachineIndependent/glslang_tab.cpp"
 7654|  52.8k|    break;
 7655|       |
 7656|      0|  case 205: /* storage_qualifier: RESTRICT  */
  ------------------
  |  Branch (7656:3): [True: 0, False: 12.5M]
  ------------------
 7657|      0|#line 1682 "MachineIndependent/glslang.y"
 7658|      0|               {
 7659|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7660|      0|        (yyval.interm.type).qualifier.restrict = true;
 7661|      0|    }
 7662|      0|#line 7663 "MachineIndependent/glslang_tab.cpp"
 7663|      0|    break;
 7664|       |
 7665|  4.52k|  case 206: /* storage_qualifier: READONLY  */
  ------------------
  |  Branch (7665:3): [True: 4.52k, False: 12.5M]
  ------------------
 7666|  4.52k|#line 1686 "MachineIndependent/glslang.y"
 7667|  4.52k|               {
 7668|  4.52k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7669|  4.52k|        (yyval.interm.type).qualifier.readonly = true;
 7670|  4.52k|    }
 7671|  4.52k|#line 7672 "MachineIndependent/glslang_tab.cpp"
 7672|  4.52k|    break;
 7673|       |
 7674|  4.13k|  case 207: /* storage_qualifier: WRITEONLY  */
  ------------------
  |  Branch (7674:3): [True: 4.13k, False: 12.5M]
  ------------------
 7675|  4.13k|#line 1690 "MachineIndependent/glslang.y"
 7676|  4.13k|                {
 7677|  4.13k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7678|  4.13k|        (yyval.interm.type).qualifier.writeonly = true;
 7679|  4.13k|    }
 7680|  4.13k|#line 7681 "MachineIndependent/glslang_tab.cpp"
 7681|  4.13k|    break;
 7682|       |
 7683|  51.1k|  case 208: /* storage_qualifier: NONTEMPORAL  */
  ------------------
  |  Branch (7683:3): [True: 51.1k, False: 12.5M]
  ------------------
 7684|  51.1k|#line 1694 "MachineIndependent/glslang.y"
 7685|  51.1k|                  {
 7686|  51.1k|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7687|  51.1k|        (yyval.interm.type).qualifier.nontemporal  = true;
 7688|  51.1k|    }
 7689|  51.1k|#line 7690 "MachineIndependent/glslang_tab.cpp"
 7690|  51.1k|    break;
 7691|       |
 7692|      0|  case 209: /* storage_qualifier: SUBROUTINE  */
  ------------------
  |  Branch (7692:3): [True: 0, False: 12.5M]
  ------------------
 7693|      0|#line 1698 "MachineIndependent/glslang.y"
 7694|      0|                 {
 7695|      0|        parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7696|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7697|      0|        parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7698|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7699|      0|    }
 7700|      0|#line 7701 "MachineIndependent/glslang_tab.cpp"
 7701|      0|    break;
 7702|       |
 7703|      0|  case 210: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN  */
  ------------------
  |  Branch (7703:3): [True: 0, False: 12.5M]
  ------------------
 7704|      0|#line 1704 "MachineIndependent/glslang.y"
 7705|      0|                                                       {
 7706|      0|        parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7707|      0|        parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7708|      0|        parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7709|      0|        (yyval.interm.type).init((yyvsp[-3].lex).loc);
 7710|      0|    }
 7711|      0|#line 7712 "MachineIndependent/glslang_tab.cpp"
 7712|      0|    break;
 7713|       |
 7714|      0|  case 211: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT  */
  ------------------
  |  Branch (7714:3): [True: 0, False: 12.5M]
  ------------------
 7715|      0|#line 1710 "MachineIndependent/glslang.y"
 7716|      0|                              {
 7717|       |        // No need for profile version or extension check. Shader stage already checks both.
 7718|      0|        parseContext.globalCheck((yyvsp[0].lex).loc, "taskPayloadSharedEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7719|      0|        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskPayloadSharedEXT  ");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7720|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7721|      0|        (yyval.interm.type).qualifier.storage = EvqtaskPayloadSharedEXT;
 7722|      0|    }
 7723|      0|#line 7724 "MachineIndependent/glslang_tab.cpp"
 7724|      0|    break;
 7725|       |
 7726|      0|  case 212: /* non_uniform_qualifier: NONUNIFORM  */
  ------------------
  |  Branch (7726:3): [True: 0, False: 12.5M]
  ------------------
 7727|      0|#line 1720 "MachineIndependent/glslang.y"
 7728|      0|                 {
 7729|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc);
 7730|      0|        (yyval.interm.type).qualifier.nonUniform = true;
 7731|      0|    }
 7732|      0|#line 7733 "MachineIndependent/glslang_tab.cpp"
 7733|      0|    break;
 7734|       |
 7735|      0|  case 213: /* type_name_list: IDENTIFIER  */
  ------------------
  |  Branch (7735:3): [True: 0, False: 12.5M]
  ------------------
 7736|      0|#line 1727 "MachineIndependent/glslang.y"
 7737|      0|                 {
 7738|       |        // TODO
 7739|      0|    }
 7740|      0|#line 7741 "MachineIndependent/glslang_tab.cpp"
 7741|      0|    break;
 7742|       |
 7743|      0|  case 214: /* type_name_list: type_name_list COMMA IDENTIFIER  */
  ------------------
  |  Branch (7743:3): [True: 0, False: 12.5M]
  ------------------
 7744|      0|#line 1730 "MachineIndependent/glslang.y"
 7745|      0|                                      {
 7746|       |        // TODO: 4.0 semantics: subroutines
 7747|       |        // 1) make sure each identifier is a type declared earlier with SUBROUTINE
 7748|       |        // 2) save all of the identifiers for future comparison with the declared function
 7749|      0|    }
 7750|      0|#line 7751 "MachineIndependent/glslang_tab.cpp"
 7751|      0|    break;
 7752|       |
 7753|  1.56M|  case 215: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt  */
  ------------------
  |  Branch (7753:3): [True: 1.56M, False: 10.9M]
  ------------------
 7754|  1.56M|#line 1738 "MachineIndependent/glslang.y"
 7755|  1.56M|                                                           {
 7756|  1.56M|        (yyval.interm.type) = (yyvsp[-1].interm.type);
 7757|  1.56M|        (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
  ------------------
  |  |  756|  1.56M|#define parseContext (*pParseContext)
  ------------------
 7758|  1.56M|        (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters);
 7759|  1.56M|        parseContext.typeParametersCheck((yyvsp[-1].interm.type).loc, (yyval.interm.type));
  ------------------
  |  |  756|  1.56M|#define parseContext (*pParseContext)
  ------------------
 7760|       |
 7761|  1.56M|    }
 7762|  1.56M|#line 7763 "MachineIndependent/glslang_tab.cpp"
 7763|  1.56M|    break;
 7764|       |
 7765|  8.36k|  case 216: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier  */
  ------------------
  |  Branch (7765:3): [True: 8.36k, False: 12.5M]
  ------------------
 7766|  8.36k|#line 1745 "MachineIndependent/glslang.y"
 7767|  8.36k|                                                                           {
 7768|  8.36k|        parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
  ------------------
  |  |  756|  8.36k|#define parseContext (*pParseContext)
  ------------------
 7769|  8.36k|        (yyval.interm.type) = (yyvsp[-2].interm.type);
 7770|  8.36k|        (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
  ------------------
  |  |  756|  8.36k|#define parseContext (*pParseContext)
  ------------------
 7771|  8.36k|        (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters);
 7772|  8.36k|        (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
 7773|  8.36k|        parseContext.typeParametersCheck((yyvsp[-2].interm.type).loc, (yyval.interm.type));
  ------------------
  |  |  756|  8.36k|#define parseContext (*pParseContext)
  ------------------
 7774|  8.36k|    }
 7775|  8.36k|#line 7776 "MachineIndependent/glslang_tab.cpp"
 7776|  8.36k|    break;
 7777|       |
 7778|  6.98k|  case 217: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET  */
  ------------------
  |  Branch (7778:3): [True: 6.98k, False: 12.5M]
  ------------------
 7779|  6.98k|#line 1756 "MachineIndependent/glslang.y"
 7780|  6.98k|                                 {
 7781|  6.98k|        (yyval.interm).loc = (yyvsp[-1].lex).loc;
 7782|  6.98k|        (yyval.interm).arraySizes = new TArraySizes;
 7783|  6.98k|        (yyval.interm).arraySizes->addInnerSize();
 7784|  6.98k|    }
 7785|  6.98k|#line 7786 "MachineIndependent/glslang_tab.cpp"
 7786|  6.98k|    break;
 7787|       |
 7788|  3.24k|  case 218: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
  ------------------
  |  Branch (7788:3): [True: 3.24k, False: 12.5M]
  ------------------
 7789|  3.24k|#line 1761 "MachineIndependent/glslang.y"
 7790|  3.24k|                                                        {
 7791|  3.24k|        (yyval.interm).loc = (yyvsp[-2].lex).loc;
 7792|  3.24k|        (yyval.interm).arraySizes = new TArraySizes;
 7793|       |
 7794|  3.24k|        TArraySize size;
 7795|  3.24k|        parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
  ------------------
  |  |  756|  3.24k|#define parseContext (*pParseContext)
  ------------------
 7796|  3.24k|        (yyval.interm).arraySizes->addInnerSize(size);
 7797|  3.24k|    }
 7798|  3.24k|#line 7799 "MachineIndependent/glslang_tab.cpp"
 7799|  3.24k|    break;
 7800|       |
 7801|     20|  case 219: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET  */
  ------------------
  |  Branch (7801:3): [True: 20, False: 12.5M]
  ------------------
 7802|     20|#line 1769 "MachineIndependent/glslang.y"
 7803|     20|                                                 {
 7804|     20|        (yyval.interm) = (yyvsp[-2].interm);
 7805|     20|        (yyval.interm).arraySizes->addInnerSize();
 7806|     20|    }
 7807|     20|#line 7808 "MachineIndependent/glslang_tab.cpp"
 7808|     20|    break;
 7809|       |
 7810|      0|  case 220: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
  ------------------
  |  Branch (7810:3): [True: 0, False: 12.5M]
  ------------------
 7811|      0|#line 1773 "MachineIndependent/glslang.y"
 7812|      0|                                                                        {
 7813|      0|        (yyval.interm) = (yyvsp[-3].interm);
 7814|       |
 7815|      0|        TArraySize size;
 7816|      0|        parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7817|      0|        (yyval.interm).arraySizes->addInnerSize(size);
 7818|      0|    }
 7819|      0|#line 7820 "MachineIndependent/glslang_tab.cpp"
 7820|      0|    break;
 7821|       |
 7822|      0|  case 221: /* type_parameter_specifier_opt: type_parameter_specifier  */
  ------------------
  |  Branch (7822:3): [True: 0, False: 12.5M]
  ------------------
 7823|      0|#line 1783 "MachineIndependent/glslang.y"
 7824|      0|                               {
 7825|      0|        (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
 7826|      0|    }
 7827|      0|#line 7828 "MachineIndependent/glslang_tab.cpp"
 7828|      0|    break;
 7829|       |
 7830|  1.57M|  case 222: /* type_parameter_specifier_opt: %empty  */
  ------------------
  |  Branch (7830:3): [True: 1.57M, False: 10.9M]
  ------------------
 7831|  1.57M|#line 1786 "MachineIndependent/glslang.y"
 7832|  1.57M|                        {
 7833|  1.57M|        (yyval.interm.typeParameters) = 0;
 7834|  1.57M|    }
 7835|  1.57M|#line 7836 "MachineIndependent/glslang_tab.cpp"
 7836|  1.57M|    break;
 7837|       |
 7838|      0|  case 223: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE  */
  ------------------
  |  Branch (7838:3): [True: 0, False: 12.5M]
  ------------------
 7839|      0|#line 1792 "MachineIndependent/glslang.y"
 7840|      0|                                                           {
 7841|      0|        (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
 7842|      0|    }
 7843|      0|#line 7844 "MachineIndependent/glslang_tab.cpp"
 7844|      0|    break;
 7845|       |
 7846|      0|  case 224: /* type_parameter_specifier_list: type_specifier  */
  ------------------
  |  Branch (7846:3): [True: 0, False: 12.5M]
  ------------------
 7847|      0|#line 1798 "MachineIndependent/glslang.y"
 7848|      0|                     {
 7849|      0|        (yyval.interm.typeParameters) = new TTypeParameters;
 7850|      0|        (yyval.interm.typeParameters)->arraySizes = new TArraySizes;
 7851|      0|        (yyval.interm.typeParameters)->spirvType = (yyvsp[0].interm.type).spirvType;
 7852|      0|        (yyval.interm.typeParameters)->basicType = (yyvsp[0].interm.type).basicType;
 7853|      0|    }
 7854|      0|#line 7855 "MachineIndependent/glslang_tab.cpp"
 7855|      0|    break;
 7856|       |
 7857|      0|  case 225: /* type_parameter_specifier_list: unary_expression  */
  ------------------
  |  Branch (7857:3): [True: 0, False: 12.5M]
  ------------------
 7858|      0|#line 1804 "MachineIndependent/glslang.y"
 7859|      0|                       {
 7860|      0|        (yyval.interm.typeParameters) = new TTypeParameters;
 7861|      0|        (yyval.interm.typeParameters)->arraySizes = new TArraySizes;
 7862|       |
 7863|      0|        TArraySize size;
 7864|      0|        parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7865|      0|        (yyval.interm.typeParameters)->arraySizes->addInnerSize(size);
 7866|      0|    }
 7867|      0|#line 7868 "MachineIndependent/glslang_tab.cpp"
 7868|      0|    break;
 7869|       |
 7870|      0|  case 226: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression  */
  ------------------
  |  Branch (7870:3): [True: 0, False: 12.5M]
  ------------------
 7871|      0|#line 1812 "MachineIndependent/glslang.y"
 7872|      0|                                                           {
 7873|      0|        (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters);
 7874|       |
 7875|      0|        TArraySize size;
 7876|      0|        parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 7877|      0|        (yyval.interm.typeParameters)->arraySizes->addInnerSize(size);
 7878|      0|    }
 7879|      0|#line 7880 "MachineIndependent/glslang_tab.cpp"
 7880|      0|    break;
 7881|       |
 7882|  12.1k|  case 227: /* type_specifier_nonarray: VOID  */
  ------------------
  |  Branch (7882:3): [True: 12.1k, False: 12.5M]
  ------------------
 7883|  12.1k|#line 1822 "MachineIndependent/glslang.y"
 7884|  12.1k|           {
 7885|  12.1k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  12.1k|#define parseContext (*pParseContext)
  ------------------
 7886|  12.1k|        (yyval.interm.type).basicType = EbtVoid;
 7887|  12.1k|    }
 7888|  12.1k|#line 7889 "MachineIndependent/glslang_tab.cpp"
 7889|  12.1k|    break;
 7890|       |
 7891|  80.7k|  case 228: /* type_specifier_nonarray: FLOAT  */
  ------------------
  |  Branch (7891:3): [True: 80.7k, False: 12.4M]
  ------------------
 7892|  80.7k|#line 1826 "MachineIndependent/glslang.y"
 7893|  80.7k|            {
 7894|  80.7k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  80.7k|#define parseContext (*pParseContext)
  ------------------
 7895|  80.7k|        (yyval.interm.type).basicType = EbtFloat;
 7896|  80.7k|    }
 7897|  80.7k|#line 7898 "MachineIndependent/glslang_tab.cpp"
 7898|  80.7k|    break;
 7899|       |
 7900|   208k|  case 229: /* type_specifier_nonarray: INT  */
  ------------------
  |  Branch (7900:3): [True: 208k, False: 12.3M]
  ------------------
 7901|   208k|#line 1830 "MachineIndependent/glslang.y"
 7902|   208k|          {
 7903|   208k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|   208k|#define parseContext (*pParseContext)
  ------------------
 7904|   208k|        (yyval.interm.type).basicType = EbtInt;
 7905|   208k|    }
 7906|   208k|#line 7907 "MachineIndependent/glslang_tab.cpp"
 7907|   208k|    break;
 7908|       |
 7909|   134k|  case 230: /* type_specifier_nonarray: UINT  */
  ------------------
  |  Branch (7909:3): [True: 134k, False: 12.4M]
  ------------------
 7910|   134k|#line 1834 "MachineIndependent/glslang.y"
 7911|   134k|           {
 7912|   134k|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
  ------------------
  |  |  756|   134k|#define parseContext (*pParseContext)
  ------------------
 7913|   134k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|   134k|#define parseContext (*pParseContext)
  ------------------
 7914|   134k|        (yyval.interm.type).basicType = EbtUint;
 7915|   134k|    }
 7916|   134k|#line 7917 "MachineIndependent/glslang_tab.cpp"
 7917|   134k|    break;
 7918|       |
 7919|  15.8k|  case 231: /* type_specifier_nonarray: BOOL  */
  ------------------
  |  Branch (7919:3): [True: 15.8k, False: 12.5M]
  ------------------
 7920|  15.8k|#line 1839 "MachineIndependent/glslang.y"
 7921|  15.8k|           {
 7922|  15.8k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  15.8k|#define parseContext (*pParseContext)
  ------------------
 7923|  15.8k|        (yyval.interm.type).basicType = EbtBool;
 7924|  15.8k|    }
 7925|  15.8k|#line 7926 "MachineIndependent/glslang_tab.cpp"
 7926|  15.8k|    break;
 7927|       |
 7928|  61.4k|  case 232: /* type_specifier_nonarray: VEC2  */
  ------------------
  |  Branch (7928:3): [True: 61.4k, False: 12.5M]
  ------------------
 7929|  61.4k|#line 1843 "MachineIndependent/glslang.y"
 7930|  61.4k|           {
 7931|  61.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  61.4k|#define parseContext (*pParseContext)
  ------------------
 7932|  61.4k|        (yyval.interm.type).basicType = EbtFloat;
 7933|  61.4k|        (yyval.interm.type).setVector(2);
 7934|  61.4k|    }
 7935|  61.4k|#line 7936 "MachineIndependent/glslang_tab.cpp"
 7936|  61.4k|    break;
 7937|       |
 7938|  52.0k|  case 233: /* type_specifier_nonarray: VEC3  */
  ------------------
  |  Branch (7938:3): [True: 52.0k, False: 12.5M]
  ------------------
 7939|  52.0k|#line 1848 "MachineIndependent/glslang.y"
 7940|  52.0k|           {
 7941|  52.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  52.0k|#define parseContext (*pParseContext)
  ------------------
 7942|  52.0k|        (yyval.interm.type).basicType = EbtFloat;
 7943|  52.0k|        (yyval.interm.type).setVector(3);
 7944|  52.0k|    }
 7945|  52.0k|#line 7946 "MachineIndependent/glslang_tab.cpp"
 7946|  52.0k|    break;
 7947|       |
 7948|  67.5k|  case 234: /* type_specifier_nonarray: VEC4  */
  ------------------
  |  Branch (7948:3): [True: 67.5k, False: 12.4M]
  ------------------
 7949|  67.5k|#line 1853 "MachineIndependent/glslang.y"
 7950|  67.5k|           {
 7951|  67.5k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  67.5k|#define parseContext (*pParseContext)
  ------------------
 7952|  67.5k|        (yyval.interm.type).basicType = EbtFloat;
 7953|  67.5k|        (yyval.interm.type).setVector(4);
 7954|  67.5k|    }
 7955|  67.5k|#line 7956 "MachineIndependent/glslang_tab.cpp"
 7956|  67.5k|    break;
 7957|       |
 7958|  10.2k|  case 235: /* type_specifier_nonarray: BVEC2  */
  ------------------
  |  Branch (7958:3): [True: 10.2k, False: 12.5M]
  ------------------
 7959|  10.2k|#line 1858 "MachineIndependent/glslang.y"
 7960|  10.2k|            {
 7961|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  10.2k|#define parseContext (*pParseContext)
  ------------------
 7962|  10.2k|        (yyval.interm.type).basicType = EbtBool;
 7963|  10.2k|        (yyval.interm.type).setVector(2);
 7964|  10.2k|    }
 7965|  10.2k|#line 7966 "MachineIndependent/glslang_tab.cpp"
 7966|  10.2k|    break;
 7967|       |
 7968|  10.2k|  case 236: /* type_specifier_nonarray: BVEC3  */
  ------------------
  |  Branch (7968:3): [True: 10.2k, False: 12.5M]
  ------------------
 7969|  10.2k|#line 1863 "MachineIndependent/glslang.y"
 7970|  10.2k|            {
 7971|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  10.2k|#define parseContext (*pParseContext)
  ------------------
 7972|  10.2k|        (yyval.interm.type).basicType = EbtBool;
 7973|  10.2k|        (yyval.interm.type).setVector(3);
 7974|  10.2k|    }
 7975|  10.2k|#line 7976 "MachineIndependent/glslang_tab.cpp"
 7976|  10.2k|    break;
 7977|       |
 7978|  10.2k|  case 237: /* type_specifier_nonarray: BVEC4  */
  ------------------
  |  Branch (7978:3): [True: 10.2k, False: 12.5M]
  ------------------
 7979|  10.2k|#line 1868 "MachineIndependent/glslang.y"
 7980|  10.2k|            {
 7981|  10.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  10.2k|#define parseContext (*pParseContext)
  ------------------
 7982|  10.2k|        (yyval.interm.type).basicType = EbtBool;
 7983|  10.2k|        (yyval.interm.type).setVector(4);
 7984|  10.2k|    }
 7985|  10.2k|#line 7986 "MachineIndependent/glslang_tab.cpp"
 7986|  10.2k|    break;
 7987|       |
 7988|  66.7k|  case 238: /* type_specifier_nonarray: IVEC2  */
  ------------------
  |  Branch (7988:3): [True: 66.7k, False: 12.4M]
  ------------------
 7989|  66.7k|#line 1873 "MachineIndependent/glslang.y"
 7990|  66.7k|            {
 7991|  66.7k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  66.7k|#define parseContext (*pParseContext)
  ------------------
 7992|  66.7k|        (yyval.interm.type).basicType = EbtInt;
 7993|  66.7k|        (yyval.interm.type).setVector(2);
 7994|  66.7k|    }
 7995|  66.7k|#line 7996 "MachineIndependent/glslang_tab.cpp"
 7996|  66.7k|    break;
 7997|       |
 7998|  52.9k|  case 239: /* type_specifier_nonarray: IVEC3  */
  ------------------
  |  Branch (7998:3): [True: 52.9k, False: 12.5M]
  ------------------
 7999|  52.9k|#line 1878 "MachineIndependent/glslang.y"
 8000|  52.9k|            {
 8001|  52.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  52.9k|#define parseContext (*pParseContext)
  ------------------
 8002|  52.9k|        (yyval.interm.type).basicType = EbtInt;
 8003|  52.9k|        (yyval.interm.type).setVector(3);
 8004|  52.9k|    }
 8005|  52.9k|#line 8006 "MachineIndependent/glslang_tab.cpp"
 8006|  52.9k|    break;
 8007|       |
 8008|  40.8k|  case 240: /* type_specifier_nonarray: IVEC4  */
  ------------------
  |  Branch (8008:3): [True: 40.8k, False: 12.5M]
  ------------------
 8009|  40.8k|#line 1883 "MachineIndependent/glslang.y"
 8010|  40.8k|            {
 8011|  40.8k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  40.8k|#define parseContext (*pParseContext)
  ------------------
 8012|  40.8k|        (yyval.interm.type).basicType = EbtInt;
 8013|  40.8k|        (yyval.interm.type).setVector(4);
 8014|  40.8k|    }
 8015|  40.8k|#line 8016 "MachineIndependent/glslang_tab.cpp"
 8016|  40.8k|    break;
 8017|       |
 8018|  19.2k|  case 241: /* type_specifier_nonarray: UVEC2  */
  ------------------
  |  Branch (8018:3): [True: 19.2k, False: 12.5M]
  ------------------
 8019|  19.2k|#line 1888 "MachineIndependent/glslang.y"
 8020|  19.2k|            {
 8021|  19.2k|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
  ------------------
  |  |  756|  19.2k|#define parseContext (*pParseContext)
  ------------------
 8022|  19.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  19.2k|#define parseContext (*pParseContext)
  ------------------
 8023|  19.2k|        (yyval.interm.type).basicType = EbtUint;
 8024|  19.2k|        (yyval.interm.type).setVector(2);
 8025|  19.2k|    }
 8026|  19.2k|#line 8027 "MachineIndependent/glslang_tab.cpp"
 8027|  19.2k|    break;
 8028|       |
 8029|  17.6k|  case 242: /* type_specifier_nonarray: UVEC3  */
  ------------------
  |  Branch (8029:3): [True: 17.6k, False: 12.5M]
  ------------------
 8030|  17.6k|#line 1894 "MachineIndependent/glslang.y"
 8031|  17.6k|            {
 8032|  17.6k|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
  ------------------
  |  |  756|  17.6k|#define parseContext (*pParseContext)
  ------------------
 8033|  17.6k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  17.6k|#define parseContext (*pParseContext)
  ------------------
 8034|  17.6k|        (yyval.interm.type).basicType = EbtUint;
 8035|  17.6k|        (yyval.interm.type).setVector(3);
 8036|  17.6k|    }
 8037|  17.6k|#line 8038 "MachineIndependent/glslang_tab.cpp"
 8038|  17.6k|    break;
 8039|       |
 8040|   124k|  case 243: /* type_specifier_nonarray: UVEC4  */
  ------------------
  |  Branch (8040:3): [True: 124k, False: 12.4M]
  ------------------
 8041|   124k|#line 1900 "MachineIndependent/glslang.y"
 8042|   124k|            {
 8043|   124k|        parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
  ------------------
  |  |  756|   124k|#define parseContext (*pParseContext)
  ------------------
 8044|   124k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|   124k|#define parseContext (*pParseContext)
  ------------------
 8045|   124k|        (yyval.interm.type).basicType = EbtUint;
 8046|   124k|        (yyval.interm.type).setVector(4);
 8047|   124k|    }
 8048|   124k|#line 8049 "MachineIndependent/glslang_tab.cpp"
 8049|   124k|    break;
 8050|       |
 8051|    588|  case 244: /* type_specifier_nonarray: MAT2  */
  ------------------
  |  Branch (8051:3): [True: 588, False: 12.5M]
  ------------------
 8052|    588|#line 1906 "MachineIndependent/glslang.y"
 8053|    588|           {
 8054|    588|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    588|#define parseContext (*pParseContext)
  ------------------
 8055|    588|        (yyval.interm.type).basicType = EbtFloat;
 8056|    588|        (yyval.interm.type).setMatrix(2, 2);
 8057|    588|    }
 8058|    588|#line 8059 "MachineIndependent/glslang_tab.cpp"
 8059|    588|    break;
 8060|       |
 8061|    588|  case 245: /* type_specifier_nonarray: MAT3  */
  ------------------
  |  Branch (8061:3): [True: 588, False: 12.5M]
  ------------------
 8062|    588|#line 1911 "MachineIndependent/glslang.y"
 8063|    588|           {
 8064|    588|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    588|#define parseContext (*pParseContext)
  ------------------
 8065|    588|        (yyval.interm.type).basicType = EbtFloat;
 8066|    588|        (yyval.interm.type).setMatrix(3, 3);
 8067|    588|    }
 8068|    588|#line 8069 "MachineIndependent/glslang_tab.cpp"
 8069|    588|    break;
 8070|       |
 8071|    588|  case 246: /* type_specifier_nonarray: MAT4  */
  ------------------
  |  Branch (8071:3): [True: 588, False: 12.5M]
  ------------------
 8072|    588|#line 1916 "MachineIndependent/glslang.y"
 8073|    588|           {
 8074|    588|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    588|#define parseContext (*pParseContext)
  ------------------
 8075|    588|        (yyval.interm.type).basicType = EbtFloat;
 8076|    588|        (yyval.interm.type).setMatrix(4, 4);
 8077|    588|    }
 8078|    588|#line 8079 "MachineIndependent/glslang_tab.cpp"
 8079|    588|    break;
 8080|       |
 8081|      0|  case 247: /* type_specifier_nonarray: MAT2X2  */
  ------------------
  |  Branch (8081:3): [True: 0, False: 12.5M]
  ------------------
 8082|      0|#line 1921 "MachineIndependent/glslang.y"
 8083|      0|             {
 8084|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8085|      0|        (yyval.interm.type).basicType = EbtFloat;
 8086|      0|        (yyval.interm.type).setMatrix(2, 2);
 8087|      0|    }
 8088|      0|#line 8089 "MachineIndependent/glslang_tab.cpp"
 8089|      0|    break;
 8090|       |
 8091|    564|  case 248: /* type_specifier_nonarray: MAT2X3  */
  ------------------
  |  Branch (8091:3): [True: 564, False: 12.5M]
  ------------------
 8092|    564|#line 1926 "MachineIndependent/glslang.y"
 8093|    564|             {
 8094|    564|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    564|#define parseContext (*pParseContext)
  ------------------
 8095|    564|        (yyval.interm.type).basicType = EbtFloat;
 8096|    564|        (yyval.interm.type).setMatrix(2, 3);
 8097|    564|    }
 8098|    564|#line 8099 "MachineIndependent/glslang_tab.cpp"
 8099|    564|    break;
 8100|       |
 8101|    564|  case 249: /* type_specifier_nonarray: MAT2X4  */
  ------------------
  |  Branch (8101:3): [True: 564, False: 12.5M]
  ------------------
 8102|    564|#line 1931 "MachineIndependent/glslang.y"
 8103|    564|             {
 8104|    564|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    564|#define parseContext (*pParseContext)
  ------------------
 8105|    564|        (yyval.interm.type).basicType = EbtFloat;
 8106|    564|        (yyval.interm.type).setMatrix(2, 4);
 8107|    564|    }
 8108|    564|#line 8109 "MachineIndependent/glslang_tab.cpp"
 8109|    564|    break;
 8110|       |
 8111|    564|  case 250: /* type_specifier_nonarray: MAT3X2  */
  ------------------
  |  Branch (8111:3): [True: 564, False: 12.5M]
  ------------------
 8112|    564|#line 1936 "MachineIndependent/glslang.y"
 8113|    564|             {
 8114|    564|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    564|#define parseContext (*pParseContext)
  ------------------
 8115|    564|        (yyval.interm.type).basicType = EbtFloat;
 8116|    564|        (yyval.interm.type).setMatrix(3, 2);
 8117|    564|    }
 8118|    564|#line 8119 "MachineIndependent/glslang_tab.cpp"
 8119|    564|    break;
 8120|       |
 8121|      0|  case 251: /* type_specifier_nonarray: MAT3X3  */
  ------------------
  |  Branch (8121:3): [True: 0, False: 12.5M]
  ------------------
 8122|      0|#line 1941 "MachineIndependent/glslang.y"
 8123|      0|             {
 8124|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8125|      0|        (yyval.interm.type).basicType = EbtFloat;
 8126|      0|        (yyval.interm.type).setMatrix(3, 3);
 8127|      0|    }
 8128|      0|#line 8129 "MachineIndependent/glslang_tab.cpp"
 8129|      0|    break;
 8130|       |
 8131|    564|  case 252: /* type_specifier_nonarray: MAT3X4  */
  ------------------
  |  Branch (8131:3): [True: 564, False: 12.5M]
  ------------------
 8132|    564|#line 1946 "MachineIndependent/glslang.y"
 8133|    564|             {
 8134|    564|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    564|#define parseContext (*pParseContext)
  ------------------
 8135|    564|        (yyval.interm.type).basicType = EbtFloat;
 8136|    564|        (yyval.interm.type).setMatrix(3, 4);
 8137|    564|    }
 8138|    564|#line 8139 "MachineIndependent/glslang_tab.cpp"
 8139|    564|    break;
 8140|       |
 8141|    564|  case 253: /* type_specifier_nonarray: MAT4X2  */
  ------------------
  |  Branch (8141:3): [True: 564, False: 12.5M]
  ------------------
 8142|    564|#line 1951 "MachineIndependent/glslang.y"
 8143|    564|             {
 8144|    564|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    564|#define parseContext (*pParseContext)
  ------------------
 8145|    564|        (yyval.interm.type).basicType = EbtFloat;
 8146|    564|        (yyval.interm.type).setMatrix(4, 2);
 8147|    564|    }
 8148|    564|#line 8149 "MachineIndependent/glslang_tab.cpp"
 8149|    564|    break;
 8150|       |
 8151|    564|  case 254: /* type_specifier_nonarray: MAT4X3  */
  ------------------
  |  Branch (8151:3): [True: 564, False: 12.5M]
  ------------------
 8152|    564|#line 1956 "MachineIndependent/glslang.y"
 8153|    564|             {
 8154|    564|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    564|#define parseContext (*pParseContext)
  ------------------
 8155|    564|        (yyval.interm.type).basicType = EbtFloat;
 8156|    564|        (yyval.interm.type).setMatrix(4, 3);
 8157|    564|    }
 8158|    564|#line 8159 "MachineIndependent/glslang_tab.cpp"
 8159|    564|    break;
 8160|       |
 8161|      0|  case 255: /* type_specifier_nonarray: MAT4X4  */
  ------------------
  |  Branch (8161:3): [True: 0, False: 12.5M]
  ------------------
 8162|      0|#line 1961 "MachineIndependent/glslang.y"
 8163|      0|             {
 8164|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8165|      0|        (yyval.interm.type).basicType = EbtFloat;
 8166|      0|        (yyval.interm.type).setMatrix(4, 4);
 8167|      0|    }
 8168|      0|#line 8169 "MachineIndependent/glslang_tab.cpp"
 8169|      0|    break;
 8170|       |
 8171|  1.98k|  case 256: /* type_specifier_nonarray: DOUBLE  */
  ------------------
  |  Branch (8171:3): [True: 1.98k, False: 12.5M]
  ------------------
 8172|  1.98k|#line 1966 "MachineIndependent/glslang.y"
 8173|  1.98k|             {
 8174|  1.98k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double");
  ------------------
  |  |  756|  1.98k|#define parseContext (*pParseContext)
  ------------------
 8175|  1.98k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|  1.98k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8175:13): [True: 0, False: 1.98k]
  ------------------
 8176|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8177|  1.98k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.98k|#define parseContext (*pParseContext)
  ------------------
 8178|  1.98k|        (yyval.interm.type).basicType = EbtDouble;
 8179|  1.98k|    }
 8180|  1.98k|#line 8181 "MachineIndependent/glslang_tab.cpp"
 8181|  1.98k|    break;
 8182|       |
 8183|     90|  case 257: /* type_specifier_nonarray: BFLOAT16_T  */
  ------------------
  |  Branch (8183:3): [True: 90, False: 12.5M]
  ------------------
 8184|     90|#line 1973 "MachineIndependent/glslang.y"
 8185|     90|                 {
 8186|     90|        parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "bfloat16_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     90|#define parseContext (*pParseContext)
  ------------------
                      parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "bfloat16_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     90|#define parseContext (*pParseContext)
  ------------------
 8187|     90|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     90|#define parseContext (*pParseContext)
  ------------------
 8188|     90|        (yyval.interm.type).basicType = EbtBFloat16;
 8189|     90|    }
 8190|     90|#line 8191 "MachineIndependent/glslang_tab.cpp"
 8191|     90|    break;
 8192|       |
 8193|     60|  case 258: /* type_specifier_nonarray: FLOATE5M2_T  */
  ------------------
  |  Branch (8193:3): [True: 60, False: 12.5M]
  ------------------
 8194|     60|#line 1978 "MachineIndependent/glslang.y"
 8195|     60|                  {
 8196|     60|        parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "floate5m2_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     60|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "floate5m2_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     60|#define parseContext (*pParseContext)
  ------------------
 8197|     60|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     60|#define parseContext (*pParseContext)
  ------------------
 8198|     60|        (yyval.interm.type).basicType = EbtFloatE5M2;
 8199|     60|    }
 8200|     60|#line 8201 "MachineIndependent/glslang_tab.cpp"
 8201|     60|    break;
 8202|       |
 8203|     60|  case 259: /* type_specifier_nonarray: FLOATE4M3_T  */
  ------------------
  |  Branch (8203:3): [True: 60, False: 12.5M]
  ------------------
 8204|     60|#line 1983 "MachineIndependent/glslang.y"
 8205|     60|                  {
 8206|     60|        parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "floate4m3_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     60|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "floate4m3_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     60|#define parseContext (*pParseContext)
  ------------------
 8207|     60|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     60|#define parseContext (*pParseContext)
  ------------------
 8208|     60|        (yyval.interm.type).basicType = EbtFloatE4M3;
 8209|     60|    }
 8210|     60|#line 8211 "MachineIndependent/glslang_tab.cpp"
 8211|     60|    break;
 8212|       |
 8213|  17.4k|  case 260: /* type_specifier_nonarray: FLOAT16_T  */
  ------------------
  |  Branch (8213:3): [True: 17.4k, False: 12.5M]
  ------------------
 8214|  17.4k|#line 1988 "MachineIndependent/glslang.y"
 8215|  17.4k|                {
 8216|  17.4k|        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  17.4k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  17.4k|#define parseContext (*pParseContext)
  ------------------
 8217|  17.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  17.4k|#define parseContext (*pParseContext)
  ------------------
 8218|  17.4k|        (yyval.interm.type).basicType = EbtFloat16;
 8219|  17.4k|    }
 8220|  17.4k|#line 8221 "MachineIndependent/glslang_tab.cpp"
 8221|  17.4k|    break;
 8222|       |
 8223|    380|  case 261: /* type_specifier_nonarray: FLOAT32_T  */
  ------------------
  |  Branch (8223:3): [True: 380, False: 12.5M]
  ------------------
 8224|    380|#line 1993 "MachineIndependent/glslang.y"
 8225|    380|                {
 8226|    380|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    380|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    380|#define parseContext (*pParseContext)
  ------------------
 8227|    380|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    380|#define parseContext (*pParseContext)
  ------------------
 8228|    380|        (yyval.interm.type).basicType = EbtFloat;
 8229|    380|    }
 8230|    380|#line 8231 "MachineIndependent/glslang_tab.cpp"
 8231|    380|    break;
 8232|       |
 8233|  1.10k|  case 262: /* type_specifier_nonarray: FLOAT64_T  */
  ------------------
  |  Branch (8233:3): [True: 1.10k, False: 12.5M]
  ------------------
 8234|  1.10k|#line 1998 "MachineIndependent/glslang.y"
 8235|  1.10k|                {
 8236|  1.10k|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  1.10k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  1.10k|#define parseContext (*pParseContext)
  ------------------
 8237|  1.10k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.10k|#define parseContext (*pParseContext)
  ------------------
 8238|  1.10k|        (yyval.interm.type).basicType = EbtDouble;
 8239|  1.10k|    }
 8240|  1.10k|#line 8241 "MachineIndependent/glslang_tab.cpp"
 8241|  1.10k|    break;
 8242|       |
 8243|  12.4k|  case 263: /* type_specifier_nonarray: INT8_T  */
  ------------------
  |  Branch (8243:3): [True: 12.4k, False: 12.5M]
  ------------------
 8244|  12.4k|#line 2003 "MachineIndependent/glslang.y"
 8245|  12.4k|             {
 8246|  12.4k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  12.4k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  12.4k|#define parseContext (*pParseContext)
  ------------------
 8247|  12.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  12.4k|#define parseContext (*pParseContext)
  ------------------
 8248|  12.4k|        (yyval.interm.type).basicType = EbtInt8;
 8249|  12.4k|    }
 8250|  12.4k|#line 8251 "MachineIndependent/glslang_tab.cpp"
 8251|  12.4k|    break;
 8252|       |
 8253|  12.3k|  case 264: /* type_specifier_nonarray: UINT8_T  */
  ------------------
  |  Branch (8253:3): [True: 12.3k, False: 12.5M]
  ------------------
 8254|  12.3k|#line 2008 "MachineIndependent/glslang.y"
 8255|  12.3k|              {
 8256|  12.3k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  12.3k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  12.3k|#define parseContext (*pParseContext)
  ------------------
 8257|  12.3k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  12.3k|#define parseContext (*pParseContext)
  ------------------
 8258|  12.3k|        (yyval.interm.type).basicType = EbtUint8;
 8259|  12.3k|    }
 8260|  12.3k|#line 8261 "MachineIndependent/glslang_tab.cpp"
 8261|  12.3k|    break;
 8262|       |
 8263|  14.0k|  case 265: /* type_specifier_nonarray: INT16_T  */
  ------------------
  |  Branch (8263:3): [True: 14.0k, False: 12.5M]
  ------------------
 8264|  14.0k|#line 2013 "MachineIndependent/glslang.y"
 8265|  14.0k|              {
 8266|  14.0k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  14.0k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  14.0k|#define parseContext (*pParseContext)
  ------------------
 8267|  14.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  14.0k|#define parseContext (*pParseContext)
  ------------------
 8268|  14.0k|        (yyval.interm.type).basicType = EbtInt16;
 8269|  14.0k|    }
 8270|  14.0k|#line 8271 "MachineIndependent/glslang_tab.cpp"
 8271|  14.0k|    break;
 8272|       |
 8273|  14.0k|  case 266: /* type_specifier_nonarray: UINT16_T  */
  ------------------
  |  Branch (8273:3): [True: 14.0k, False: 12.5M]
  ------------------
 8274|  14.0k|#line 2018 "MachineIndependent/glslang.y"
 8275|  14.0k|               {
 8276|  14.0k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  14.0k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  14.0k|#define parseContext (*pParseContext)
  ------------------
 8277|  14.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  14.0k|#define parseContext (*pParseContext)
  ------------------
 8278|  14.0k|        (yyval.interm.type).basicType = EbtUint16;
 8279|  14.0k|    }
 8280|  14.0k|#line 8281 "MachineIndependent/glslang_tab.cpp"
 8281|  14.0k|    break;
 8282|       |
 8283|    400|  case 267: /* type_specifier_nonarray: INT32_T  */
  ------------------
  |  Branch (8283:3): [True: 400, False: 12.5M]
  ------------------
 8284|    400|#line 2023 "MachineIndependent/glslang.y"
 8285|    400|              {
 8286|    400|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    400|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    400|#define parseContext (*pParseContext)
  ------------------
 8287|    400|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    400|#define parseContext (*pParseContext)
  ------------------
 8288|    400|        (yyval.interm.type).basicType = EbtInt;
 8289|    400|    }
 8290|    400|#line 8291 "MachineIndependent/glslang_tab.cpp"
 8291|    400|    break;
 8292|       |
 8293|    400|  case 268: /* type_specifier_nonarray: UINT32_T  */
  ------------------
  |  Branch (8293:3): [True: 400, False: 12.5M]
  ------------------
 8294|    400|#line 2028 "MachineIndependent/glslang.y"
 8295|    400|               {
 8296|    400|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    400|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    400|#define parseContext (*pParseContext)
  ------------------
 8297|    400|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    400|#define parseContext (*pParseContext)
  ------------------
 8298|    400|        (yyval.interm.type).basicType = EbtUint;
 8299|    400|    }
 8300|    400|#line 8301 "MachineIndependent/glslang_tab.cpp"
 8301|    400|    break;
 8302|       |
 8303|  16.1k|  case 269: /* type_specifier_nonarray: INT64_T  */
  ------------------
  |  Branch (8303:3): [True: 16.1k, False: 12.5M]
  ------------------
 8304|  16.1k|#line 2033 "MachineIndependent/glslang.y"
 8305|  16.1k|              {
 8306|  16.1k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  16.1k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  16.1k|#define parseContext (*pParseContext)
  ------------------
 8307|  16.1k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  16.1k|#define parseContext (*pParseContext)
  ------------------
 8308|  16.1k|        (yyval.interm.type).basicType = EbtInt64;
 8309|  16.1k|    }
 8310|  16.1k|#line 8311 "MachineIndependent/glslang_tab.cpp"
 8311|  16.1k|    break;
 8312|       |
 8313|  19.2k|  case 270: /* type_specifier_nonarray: UINT64_T  */
  ------------------
  |  Branch (8313:3): [True: 19.2k, False: 12.5M]
  ------------------
 8314|  19.2k|#line 2038 "MachineIndependent/glslang.y"
 8315|  19.2k|               {
 8316|  19.2k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  19.2k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  19.2k|#define parseContext (*pParseContext)
  ------------------
 8317|  19.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  19.2k|#define parseContext (*pParseContext)
  ------------------
 8318|  19.2k|        (yyval.interm.type).basicType = EbtUint64;
 8319|  19.2k|    }
 8320|  19.2k|#line 8321 "MachineIndependent/glslang_tab.cpp"
 8321|  19.2k|    break;
 8322|       |
 8323|  1.70k|  case 271: /* type_specifier_nonarray: DVEC2  */
  ------------------
  |  Branch (8323:3): [True: 1.70k, False: 12.5M]
  ------------------
 8324|  1.70k|#line 2043 "MachineIndependent/glslang.y"
 8325|  1.70k|            {
 8326|  1.70k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
  ------------------
  |  |  756|  1.70k|#define parseContext (*pParseContext)
  ------------------
 8327|  1.70k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|  1.70k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8327:13): [True: 0, False: 1.70k]
  ------------------
 8328|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8329|  1.70k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.70k|#define parseContext (*pParseContext)
  ------------------
 8330|  1.70k|        (yyval.interm.type).basicType = EbtDouble;
 8331|  1.70k|        (yyval.interm.type).setVector(2);
 8332|  1.70k|    }
 8333|  1.70k|#line 8334 "MachineIndependent/glslang_tab.cpp"
 8334|  1.70k|    break;
 8335|       |
 8336|  1.70k|  case 272: /* type_specifier_nonarray: DVEC3  */
  ------------------
  |  Branch (8336:3): [True: 1.70k, False: 12.5M]
  ------------------
 8337|  1.70k|#line 2051 "MachineIndependent/glslang.y"
 8338|  1.70k|            {
 8339|  1.70k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
  ------------------
  |  |  756|  1.70k|#define parseContext (*pParseContext)
  ------------------
 8340|  1.70k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|  1.70k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8340:13): [True: 0, False: 1.70k]
  ------------------
 8341|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8342|  1.70k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.70k|#define parseContext (*pParseContext)
  ------------------
 8343|  1.70k|        (yyval.interm.type).basicType = EbtDouble;
 8344|  1.70k|        (yyval.interm.type).setVector(3);
 8345|  1.70k|    }
 8346|  1.70k|#line 8347 "MachineIndependent/glslang_tab.cpp"
 8347|  1.70k|    break;
 8348|       |
 8349|  1.70k|  case 273: /* type_specifier_nonarray: DVEC4  */
  ------------------
  |  Branch (8349:3): [True: 1.70k, False: 12.5M]
  ------------------
 8350|  1.70k|#line 2059 "MachineIndependent/glslang.y"
 8351|  1.70k|            {
 8352|  1.70k|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
  ------------------
  |  |  756|  1.70k|#define parseContext (*pParseContext)
  ------------------
 8353|  1.70k|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|  1.70k|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8353:13): [True: 0, False: 1.70k]
  ------------------
 8354|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8355|  1.70k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.70k|#define parseContext (*pParseContext)
  ------------------
 8356|  1.70k|        (yyval.interm.type).basicType = EbtDouble;
 8357|  1.70k|        (yyval.interm.type).setVector(4);
 8358|  1.70k|    }
 8359|  1.70k|#line 8360 "MachineIndependent/glslang_tab.cpp"
 8360|  1.70k|    break;
 8361|       |
 8362|     50|  case 274: /* type_specifier_nonarray: BF16VEC2  */
  ------------------
  |  Branch (8362:3): [True: 50, False: 12.5M]
  ------------------
 8363|     50|#line 2067 "MachineIndependent/glslang.y"
 8364|     50|               {
 8365|     50|        parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
                      parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
 8366|     50|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
 8367|     50|        (yyval.interm.type).basicType = EbtBFloat16;
 8368|     50|        (yyval.interm.type).setVector(2);
 8369|     50|    }
 8370|     50|#line 8371 "MachineIndependent/glslang_tab.cpp"
 8371|     50|    break;
 8372|       |
 8373|     30|  case 275: /* type_specifier_nonarray: BF16VEC3  */
  ------------------
  |  Branch (8373:3): [True: 30, False: 12.5M]
  ------------------
 8374|     30|#line 2073 "MachineIndependent/glslang.y"
 8375|     30|               {
 8376|     30|        parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 8377|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 8378|     30|        (yyval.interm.type).basicType = EbtBFloat16;
 8379|     30|        (yyval.interm.type).setVector(3);
 8380|     30|    }
 8381|     30|#line 8382 "MachineIndependent/glslang_tab.cpp"
 8382|     30|    break;
 8383|       |
 8384|     50|  case 276: /* type_specifier_nonarray: BF16VEC4  */
  ------------------
  |  Branch (8384:3): [True: 50, False: 12.5M]
  ------------------
 8385|     50|#line 2079 "MachineIndependent/glslang.y"
 8386|     50|               {
 8387|     50|        parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
                      parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
 8388|     50|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
 8389|     50|        (yyval.interm.type).basicType = EbtBFloat16;
 8390|     50|        (yyval.interm.type).setVector(4);
 8391|     50|    }
 8392|     50|#line 8393 "MachineIndependent/glslang_tab.cpp"
 8393|     50|    break;
 8394|       |
 8395|     40|  case 277: /* type_specifier_nonarray: FE5M2VEC2  */
  ------------------
  |  Branch (8395:3): [True: 40, False: 12.5M]
  ------------------
 8396|     40|#line 2085 "MachineIndependent/glslang.y"
 8397|     40|                {
 8398|     40|        parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     40|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     40|#define parseContext (*pParseContext)
  ------------------
 8399|     40|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     40|#define parseContext (*pParseContext)
  ------------------
 8400|     40|        (yyval.interm.type).basicType = EbtFloatE5M2;
 8401|     40|        (yyval.interm.type).setVector(2);
 8402|     40|    }
 8403|     40|#line 8404 "MachineIndependent/glslang_tab.cpp"
 8404|     40|    break;
 8405|       |
 8406|     20|  case 278: /* type_specifier_nonarray: FE5M2VEC3  */
  ------------------
  |  Branch (8406:3): [True: 20, False: 12.5M]
  ------------------
 8407|     20|#line 2091 "MachineIndependent/glslang.y"
 8408|     20|                {
 8409|     20|        parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8410|     20|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8411|     20|        (yyval.interm.type).basicType = EbtFloatE5M2;
 8412|     20|        (yyval.interm.type).setVector(3);
 8413|     20|    }
 8414|     20|#line 8415 "MachineIndependent/glslang_tab.cpp"
 8415|     20|    break;
 8416|       |
 8417|     40|  case 279: /* type_specifier_nonarray: FE5M2VEC4  */
  ------------------
  |  Branch (8417:3): [True: 40, False: 12.5M]
  ------------------
 8418|     40|#line 2097 "MachineIndependent/glslang.y"
 8419|     40|                {
 8420|     40|        parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     40|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     40|#define parseContext (*pParseContext)
  ------------------
 8421|     40|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     40|#define parseContext (*pParseContext)
  ------------------
 8422|     40|        (yyval.interm.type).basicType = EbtFloatE5M2;
 8423|     40|        (yyval.interm.type).setVector(4);
 8424|     40|    }
 8425|     40|#line 8426 "MachineIndependent/glslang_tab.cpp"
 8426|     40|    break;
 8427|       |
 8428|     40|  case 280: /* type_specifier_nonarray: FE4M3VEC2  */
  ------------------
  |  Branch (8428:3): [True: 40, False: 12.5M]
  ------------------
 8429|     40|#line 2103 "MachineIndependent/glslang.y"
 8430|     40|                {
 8431|     40|        parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     40|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     40|#define parseContext (*pParseContext)
  ------------------
 8432|     40|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     40|#define parseContext (*pParseContext)
  ------------------
 8433|     40|        (yyval.interm.type).basicType = EbtFloatE4M3;
 8434|     40|        (yyval.interm.type).setVector(2);
 8435|     40|    }
 8436|     40|#line 8437 "MachineIndependent/glslang_tab.cpp"
 8437|     40|    break;
 8438|       |
 8439|     20|  case 281: /* type_specifier_nonarray: FE4M3VEC3  */
  ------------------
  |  Branch (8439:3): [True: 20, False: 12.5M]
  ------------------
 8440|     20|#line 2109 "MachineIndependent/glslang.y"
 8441|     20|                {
 8442|     20|        parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8443|     20|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8444|     20|        (yyval.interm.type).basicType = EbtFloatE4M3;
 8445|     20|        (yyval.interm.type).setVector(3);
 8446|     20|    }
 8447|     20|#line 8448 "MachineIndependent/glslang_tab.cpp"
 8448|     20|    break;
 8449|       |
 8450|     40|  case 282: /* type_specifier_nonarray: FE4M3VEC4  */
  ------------------
  |  Branch (8450:3): [True: 40, False: 12.5M]
  ------------------
 8451|     40|#line 2115 "MachineIndependent/glslang.y"
 8452|     40|                {
 8453|     40|        parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     40|#define parseContext (*pParseContext)
  ------------------
                      parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     40|#define parseContext (*pParseContext)
  ------------------
 8454|     40|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     40|#define parseContext (*pParseContext)
  ------------------
 8455|     40|        (yyval.interm.type).basicType = EbtFloatE4M3;
 8456|     40|        (yyval.interm.type).setVector(4);
 8457|     40|    }
 8458|     40|#line 8459 "MachineIndependent/glslang_tab.cpp"
 8459|     40|    break;
 8460|       |
 8461|  13.4k|  case 283: /* type_specifier_nonarray: F16VEC2  */
  ------------------
  |  Branch (8461:3): [True: 13.4k, False: 12.5M]
  ------------------
 8462|  13.4k|#line 2121 "MachineIndependent/glslang.y"
 8463|  13.4k|              {
 8464|  13.4k|        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.4k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.4k|#define parseContext (*pParseContext)
  ------------------
 8465|  13.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.4k|#define parseContext (*pParseContext)
  ------------------
 8466|  13.4k|        (yyval.interm.type).basicType = EbtFloat16;
 8467|  13.4k|        (yyval.interm.type).setVector(2);
 8468|  13.4k|    }
 8469|  13.4k|#line 8470 "MachineIndependent/glslang_tab.cpp"
 8470|  13.4k|    break;
 8471|       |
 8472|  11.8k|  case 284: /* type_specifier_nonarray: F16VEC3  */
  ------------------
  |  Branch (8472:3): [True: 11.8k, False: 12.5M]
  ------------------
 8473|  11.8k|#line 2127 "MachineIndependent/glslang.y"
 8474|  11.8k|              {
 8475|  11.8k|        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  11.8k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  11.8k|#define parseContext (*pParseContext)
  ------------------
 8476|  11.8k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  11.8k|#define parseContext (*pParseContext)
  ------------------
 8477|  11.8k|        (yyval.interm.type).basicType = EbtFloat16;
 8478|  11.8k|        (yyval.interm.type).setVector(3);
 8479|  11.8k|    }
 8480|  11.8k|#line 8481 "MachineIndependent/glslang_tab.cpp"
 8481|  11.8k|    break;
 8482|       |
 8483|  18.7k|  case 285: /* type_specifier_nonarray: F16VEC4  */
  ------------------
  |  Branch (8483:3): [True: 18.7k, False: 12.5M]
  ------------------
 8484|  18.7k|#line 2133 "MachineIndependent/glslang.y"
 8485|  18.7k|              {
 8486|  18.7k|        parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  18.7k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  18.7k|#define parseContext (*pParseContext)
  ------------------
 8487|  18.7k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  18.7k|#define parseContext (*pParseContext)
  ------------------
 8488|  18.7k|        (yyval.interm.type).basicType = EbtFloat16;
 8489|  18.7k|        (yyval.interm.type).setVector(4);
 8490|  18.7k|    }
 8491|  18.7k|#line 8492 "MachineIndependent/glslang_tab.cpp"
 8492|  18.7k|    break;
 8493|       |
 8494|     20|  case 286: /* type_specifier_nonarray: F32VEC2  */
  ------------------
  |  Branch (8494:3): [True: 20, False: 12.5M]
  ------------------
 8495|     20|#line 2139 "MachineIndependent/glslang.y"
 8496|     20|              {
 8497|     20|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8498|     20|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8499|     20|        (yyval.interm.type).basicType = EbtFloat;
 8500|     20|        (yyval.interm.type).setVector(2);
 8501|     20|    }
 8502|     20|#line 8503 "MachineIndependent/glslang_tab.cpp"
 8503|     20|    break;
 8504|       |
 8505|     20|  case 287: /* type_specifier_nonarray: F32VEC3  */
  ------------------
  |  Branch (8505:3): [True: 20, False: 12.5M]
  ------------------
 8506|     20|#line 2145 "MachineIndependent/glslang.y"
 8507|     20|              {
 8508|     20|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8509|     20|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8510|     20|        (yyval.interm.type).basicType = EbtFloat;
 8511|     20|        (yyval.interm.type).setVector(3);
 8512|     20|    }
 8513|     20|#line 8514 "MachineIndependent/glslang_tab.cpp"
 8514|     20|    break;
 8515|       |
 8516|     20|  case 288: /* type_specifier_nonarray: F32VEC4  */
  ------------------
  |  Branch (8516:3): [True: 20, False: 12.5M]
  ------------------
 8517|     20|#line 2151 "MachineIndependent/glslang.y"
 8518|     20|              {
 8519|     20|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8520|     20|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8521|     20|        (yyval.interm.type).basicType = EbtFloat;
 8522|     20|        (yyval.interm.type).setVector(4);
 8523|     20|    }
 8524|     20|#line 8525 "MachineIndependent/glslang_tab.cpp"
 8525|     20|    break;
 8526|       |
 8527|    860|  case 289: /* type_specifier_nonarray: F64VEC2  */
  ------------------
  |  Branch (8527:3): [True: 860, False: 12.5M]
  ------------------
 8528|    860|#line 2157 "MachineIndependent/glslang.y"
 8529|    860|              {
 8530|    860|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    860|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    860|#define parseContext (*pParseContext)
  ------------------
 8531|    860|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    860|#define parseContext (*pParseContext)
  ------------------
 8532|    860|        (yyval.interm.type).basicType = EbtDouble;
 8533|    860|        (yyval.interm.type).setVector(2);
 8534|    860|    }
 8535|    860|#line 8536 "MachineIndependent/glslang_tab.cpp"
 8536|    860|    break;
 8537|       |
 8538|    820|  case 290: /* type_specifier_nonarray: F64VEC3  */
  ------------------
  |  Branch (8538:3): [True: 820, False: 12.5M]
  ------------------
 8539|    820|#line 2163 "MachineIndependent/glslang.y"
 8540|    820|              {
 8541|    820|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    820|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    820|#define parseContext (*pParseContext)
  ------------------
 8542|    820|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    820|#define parseContext (*pParseContext)
  ------------------
 8543|    820|        (yyval.interm.type).basicType = EbtDouble;
 8544|    820|        (yyval.interm.type).setVector(3);
 8545|    820|    }
 8546|    820|#line 8547 "MachineIndependent/glslang_tab.cpp"
 8547|    820|    break;
 8548|       |
 8549|    820|  case 291: /* type_specifier_nonarray: F64VEC4  */
  ------------------
  |  Branch (8549:3): [True: 820, False: 12.5M]
  ------------------
 8550|    820|#line 2169 "MachineIndependent/glslang.y"
 8551|    820|              {
 8552|    820|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    820|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    820|#define parseContext (*pParseContext)
  ------------------
 8553|    820|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    820|#define parseContext (*pParseContext)
  ------------------
 8554|    820|        (yyval.interm.type).basicType = EbtDouble;
 8555|    820|        (yyval.interm.type).setVector(4);
 8556|    820|    }
 8557|    820|#line 8558 "MachineIndependent/glslang_tab.cpp"
 8558|    820|    break;
 8559|       |
 8560|  12.0k|  case 292: /* type_specifier_nonarray: I8VEC2  */
  ------------------
  |  Branch (8560:3): [True: 12.0k, False: 12.5M]
  ------------------
 8561|  12.0k|#line 2175 "MachineIndependent/glslang.y"
 8562|  12.0k|             {
 8563|  12.0k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  12.0k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  12.0k|#define parseContext (*pParseContext)
  ------------------
 8564|  12.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  12.0k|#define parseContext (*pParseContext)
  ------------------
 8565|  12.0k|        (yyval.interm.type).basicType = EbtInt8;
 8566|  12.0k|        (yyval.interm.type).setVector(2);
 8567|  12.0k|    }
 8568|  12.0k|#line 8569 "MachineIndependent/glslang_tab.cpp"
 8569|  12.0k|    break;
 8570|       |
 8571|  12.0k|  case 293: /* type_specifier_nonarray: I8VEC3  */
  ------------------
  |  Branch (8571:3): [True: 12.0k, False: 12.5M]
  ------------------
 8572|  12.0k|#line 2181 "MachineIndependent/glslang.y"
 8573|  12.0k|             {
 8574|  12.0k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  12.0k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  12.0k|#define parseContext (*pParseContext)
  ------------------
 8575|  12.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  12.0k|#define parseContext (*pParseContext)
  ------------------
 8576|  12.0k|        (yyval.interm.type).basicType = EbtInt8;
 8577|  12.0k|        (yyval.interm.type).setVector(3);
 8578|  12.0k|    }
 8579|  12.0k|#line 8580 "MachineIndependent/glslang_tab.cpp"
 8580|  12.0k|    break;
 8581|       |
 8582|  12.0k|  case 294: /* type_specifier_nonarray: I8VEC4  */
  ------------------
  |  Branch (8582:3): [True: 12.0k, False: 12.5M]
  ------------------
 8583|  12.0k|#line 2187 "MachineIndependent/glslang.y"
 8584|  12.0k|             {
 8585|  12.0k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  12.0k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  12.0k|#define parseContext (*pParseContext)
  ------------------
 8586|  12.0k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  12.0k|#define parseContext (*pParseContext)
  ------------------
 8587|  12.0k|        (yyval.interm.type).basicType = EbtInt8;
 8588|  12.0k|        (yyval.interm.type).setVector(4);
 8589|  12.0k|    }
 8590|  12.0k|#line 8591 "MachineIndependent/glslang_tab.cpp"
 8591|  12.0k|    break;
 8592|       |
 8593|  13.6k|  case 295: /* type_specifier_nonarray: I16VEC2  */
  ------------------
  |  Branch (8593:3): [True: 13.6k, False: 12.5M]
  ------------------
 8594|  13.6k|#line 2193 "MachineIndependent/glslang.y"
 8595|  13.6k|              {
 8596|  13.6k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.6k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.6k|#define parseContext (*pParseContext)
  ------------------
 8597|  13.6k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.6k|#define parseContext (*pParseContext)
  ------------------
 8598|  13.6k|        (yyval.interm.type).basicType = EbtInt16;
 8599|  13.6k|        (yyval.interm.type).setVector(2);
 8600|  13.6k|    }
 8601|  13.6k|#line 8602 "MachineIndependent/glslang_tab.cpp"
 8602|  13.6k|    break;
 8603|       |
 8604|  13.5k|  case 296: /* type_specifier_nonarray: I16VEC3  */
  ------------------
  |  Branch (8604:3): [True: 13.5k, False: 12.5M]
  ------------------
 8605|  13.5k|#line 2199 "MachineIndependent/glslang.y"
 8606|  13.5k|              {
 8607|  13.5k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.5k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.5k|#define parseContext (*pParseContext)
  ------------------
 8608|  13.5k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.5k|#define parseContext (*pParseContext)
  ------------------
 8609|  13.5k|        (yyval.interm.type).basicType = EbtInt16;
 8610|  13.5k|        (yyval.interm.type).setVector(3);
 8611|  13.5k|    }
 8612|  13.5k|#line 8613 "MachineIndependent/glslang_tab.cpp"
 8613|  13.5k|    break;
 8614|       |
 8615|  13.6k|  case 297: /* type_specifier_nonarray: I16VEC4  */
  ------------------
  |  Branch (8615:3): [True: 13.6k, False: 12.5M]
  ------------------
 8616|  13.6k|#line 2205 "MachineIndependent/glslang.y"
 8617|  13.6k|              {
 8618|  13.6k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.6k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.6k|#define parseContext (*pParseContext)
  ------------------
 8619|  13.6k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.6k|#define parseContext (*pParseContext)
  ------------------
 8620|  13.6k|        (yyval.interm.type).basicType = EbtInt16;
 8621|  13.6k|        (yyval.interm.type).setVector(4);
 8622|  13.6k|    }
 8623|  13.6k|#line 8624 "MachineIndependent/glslang_tab.cpp"
 8624|  13.6k|    break;
 8625|       |
 8626|     30|  case 298: /* type_specifier_nonarray: I32VEC2  */
  ------------------
  |  Branch (8626:3): [True: 30, False: 12.5M]
  ------------------
 8627|     30|#line 2211 "MachineIndependent/glslang.y"
 8628|     30|              {
 8629|     30|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 8630|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 8631|     30|        (yyval.interm.type).basicType = EbtInt;
 8632|     30|        (yyval.interm.type).setVector(2);
 8633|     30|    }
 8634|     30|#line 8635 "MachineIndependent/glslang_tab.cpp"
 8635|     30|    break;
 8636|       |
 8637|     20|  case 299: /* type_specifier_nonarray: I32VEC3  */
  ------------------
  |  Branch (8637:3): [True: 20, False: 12.5M]
  ------------------
 8638|     20|#line 2217 "MachineIndependent/glslang.y"
 8639|     20|              {
 8640|     20|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8641|     20|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8642|     20|        (yyval.interm.type).basicType = EbtInt;
 8643|     20|        (yyval.interm.type).setVector(3);
 8644|     20|    }
 8645|     20|#line 8646 "MachineIndependent/glslang_tab.cpp"
 8646|     20|    break;
 8647|       |
 8648|     20|  case 300: /* type_specifier_nonarray: I32VEC4  */
  ------------------
  |  Branch (8648:3): [True: 20, False: 12.5M]
  ------------------
 8649|     20|#line 2223 "MachineIndependent/glslang.y"
 8650|     20|              {
 8651|     20|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8652|     20|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8653|     20|        (yyval.interm.type).basicType = EbtInt;
 8654|     20|        (yyval.interm.type).setVector(4);
 8655|     20|    }
 8656|     20|#line 8657 "MachineIndependent/glslang_tab.cpp"
 8657|     20|    break;
 8658|       |
 8659|  13.5k|  case 301: /* type_specifier_nonarray: I64VEC2  */
  ------------------
  |  Branch (8659:3): [True: 13.5k, False: 12.5M]
  ------------------
 8660|  13.5k|#line 2229 "MachineIndependent/glslang.y"
 8661|  13.5k|              {
 8662|  13.5k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.5k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.5k|#define parseContext (*pParseContext)
  ------------------
 8663|  13.5k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.5k|#define parseContext (*pParseContext)
  ------------------
 8664|  13.5k|        (yyval.interm.type).basicType = EbtInt64;
 8665|  13.5k|        (yyval.interm.type).setVector(2);
 8666|  13.5k|    }
 8667|  13.5k|#line 8668 "MachineIndependent/glslang_tab.cpp"
 8668|  13.5k|    break;
 8669|       |
 8670|  13.4k|  case 302: /* type_specifier_nonarray: I64VEC3  */
  ------------------
  |  Branch (8670:3): [True: 13.4k, False: 12.5M]
  ------------------
 8671|  13.4k|#line 2235 "MachineIndependent/glslang.y"
 8672|  13.4k|              {
 8673|  13.4k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.4k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.4k|#define parseContext (*pParseContext)
  ------------------
 8674|  13.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.4k|#define parseContext (*pParseContext)
  ------------------
 8675|  13.4k|        (yyval.interm.type).basicType = EbtInt64;
 8676|  13.4k|        (yyval.interm.type).setVector(3);
 8677|  13.4k|    }
 8678|  13.4k|#line 8679 "MachineIndependent/glslang_tab.cpp"
 8679|  13.4k|    break;
 8680|       |
 8681|  13.7k|  case 303: /* type_specifier_nonarray: I64VEC4  */
  ------------------
  |  Branch (8681:3): [True: 13.7k, False: 12.5M]
  ------------------
 8682|  13.7k|#line 2241 "MachineIndependent/glslang.y"
 8683|  13.7k|              {
 8684|  13.7k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.7k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.7k|#define parseContext (*pParseContext)
  ------------------
 8685|  13.7k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.7k|#define parseContext (*pParseContext)
  ------------------
 8686|  13.7k|        (yyval.interm.type).basicType = EbtInt64;
 8687|  13.7k|        (yyval.interm.type).setVector(4);
 8688|  13.7k|    }
 8689|  13.7k|#line 8690 "MachineIndependent/glslang_tab.cpp"
 8690|  13.7k|    break;
 8691|       |
 8692|  11.9k|  case 304: /* type_specifier_nonarray: U8VEC2  */
  ------------------
  |  Branch (8692:3): [True: 11.9k, False: 12.5M]
  ------------------
 8693|  11.9k|#line 2247 "MachineIndependent/glslang.y"
 8694|  11.9k|             {
 8695|  11.9k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  11.9k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  11.9k|#define parseContext (*pParseContext)
  ------------------
 8696|  11.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  11.9k|#define parseContext (*pParseContext)
  ------------------
 8697|  11.9k|        (yyval.interm.type).basicType = EbtUint8;
 8698|  11.9k|        (yyval.interm.type).setVector(2);
 8699|  11.9k|    }
 8700|  11.9k|#line 8701 "MachineIndependent/glslang_tab.cpp"
 8701|  11.9k|    break;
 8702|       |
 8703|  11.9k|  case 305: /* type_specifier_nonarray: U8VEC3  */
  ------------------
  |  Branch (8703:3): [True: 11.9k, False: 12.5M]
  ------------------
 8704|  11.9k|#line 2253 "MachineIndependent/glslang.y"
 8705|  11.9k|             {
 8706|  11.9k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  11.9k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  11.9k|#define parseContext (*pParseContext)
  ------------------
 8707|  11.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  11.9k|#define parseContext (*pParseContext)
  ------------------
 8708|  11.9k|        (yyval.interm.type).basicType = EbtUint8;
 8709|  11.9k|        (yyval.interm.type).setVector(3);
 8710|  11.9k|    }
 8711|  11.9k|#line 8712 "MachineIndependent/glslang_tab.cpp"
 8712|  11.9k|    break;
 8713|       |
 8714|  11.9k|  case 306: /* type_specifier_nonarray: U8VEC4  */
  ------------------
  |  Branch (8714:3): [True: 11.9k, False: 12.5M]
  ------------------
 8715|  11.9k|#line 2259 "MachineIndependent/glslang.y"
 8716|  11.9k|             {
 8717|  11.9k|        parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  11.9k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  11.9k|#define parseContext (*pParseContext)
  ------------------
 8718|  11.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  11.9k|#define parseContext (*pParseContext)
  ------------------
 8719|  11.9k|        (yyval.interm.type).basicType = EbtUint8;
 8720|  11.9k|        (yyval.interm.type).setVector(4);
 8721|  11.9k|    }
 8722|  11.9k|#line 8723 "MachineIndependent/glslang_tab.cpp"
 8723|  11.9k|    break;
 8724|       |
 8725|  13.7k|  case 307: /* type_specifier_nonarray: U16VEC2  */
  ------------------
  |  Branch (8725:3): [True: 13.7k, False: 12.5M]
  ------------------
 8726|  13.7k|#line 2265 "MachineIndependent/glslang.y"
 8727|  13.7k|              {
 8728|  13.7k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.7k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.7k|#define parseContext (*pParseContext)
  ------------------
 8729|  13.7k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.7k|#define parseContext (*pParseContext)
  ------------------
 8730|  13.7k|        (yyval.interm.type).basicType = EbtUint16;
 8731|  13.7k|        (yyval.interm.type).setVector(2);
 8732|  13.7k|    }
 8733|  13.7k|#line 8734 "MachineIndependent/glslang_tab.cpp"
 8734|  13.7k|    break;
 8735|       |
 8736|  13.7k|  case 308: /* type_specifier_nonarray: U16VEC3  */
  ------------------
  |  Branch (8736:3): [True: 13.7k, False: 12.5M]
  ------------------
 8737|  13.7k|#line 2271 "MachineIndependent/glslang.y"
 8738|  13.7k|              {
 8739|  13.7k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.7k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.7k|#define parseContext (*pParseContext)
  ------------------
 8740|  13.7k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.7k|#define parseContext (*pParseContext)
  ------------------
 8741|  13.7k|        (yyval.interm.type).basicType = EbtUint16;
 8742|  13.7k|        (yyval.interm.type).setVector(3);
 8743|  13.7k|    }
 8744|  13.7k|#line 8745 "MachineIndependent/glslang_tab.cpp"
 8745|  13.7k|    break;
 8746|       |
 8747|  13.7k|  case 309: /* type_specifier_nonarray: U16VEC4  */
  ------------------
  |  Branch (8747:3): [True: 13.7k, False: 12.5M]
  ------------------
 8748|  13.7k|#line 2277 "MachineIndependent/glslang.y"
 8749|  13.7k|              {
 8750|  13.7k|        parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.7k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.7k|#define parseContext (*pParseContext)
  ------------------
 8751|  13.7k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.7k|#define parseContext (*pParseContext)
  ------------------
 8752|  13.7k|        (yyval.interm.type).basicType = EbtUint16;
 8753|  13.7k|        (yyval.interm.type).setVector(4);
 8754|  13.7k|    }
 8755|  13.7k|#line 8756 "MachineIndependent/glslang_tab.cpp"
 8756|  13.7k|    break;
 8757|       |
 8758|     30|  case 310: /* type_specifier_nonarray: U32VEC2  */
  ------------------
  |  Branch (8758:3): [True: 30, False: 12.5M]
  ------------------
 8759|     30|#line 2283 "MachineIndependent/glslang.y"
 8760|     30|              {
 8761|     30|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 8762|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 8763|     30|        (yyval.interm.type).basicType = EbtUint;
 8764|     30|        (yyval.interm.type).setVector(2);
 8765|     30|    }
 8766|     30|#line 8767 "MachineIndependent/glslang_tab.cpp"
 8767|     30|    break;
 8768|       |
 8769|     20|  case 311: /* type_specifier_nonarray: U32VEC3  */
  ------------------
  |  Branch (8769:3): [True: 20, False: 12.5M]
  ------------------
 8770|     20|#line 2289 "MachineIndependent/glslang.y"
 8771|     20|              {
 8772|     20|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8773|     20|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8774|     20|        (yyval.interm.type).basicType = EbtUint;
 8775|     20|        (yyval.interm.type).setVector(3);
 8776|     20|    }
 8777|     20|#line 8778 "MachineIndependent/glslang_tab.cpp"
 8778|     20|    break;
 8779|       |
 8780|     20|  case 312: /* type_specifier_nonarray: U32VEC4  */
  ------------------
  |  Branch (8780:3): [True: 20, False: 12.5M]
  ------------------
 8781|     20|#line 2295 "MachineIndependent/glslang.y"
 8782|     20|              {
 8783|     20|        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8784|     20|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     20|#define parseContext (*pParseContext)
  ------------------
 8785|     20|        (yyval.interm.type).basicType = EbtUint;
 8786|     20|        (yyval.interm.type).setVector(4);
 8787|     20|    }
 8788|     20|#line 8789 "MachineIndependent/glslang_tab.cpp"
 8789|     20|    break;
 8790|       |
 8791|  13.6k|  case 313: /* type_specifier_nonarray: U64VEC2  */
  ------------------
  |  Branch (8791:3): [True: 13.6k, False: 12.5M]
  ------------------
 8792|  13.6k|#line 2301 "MachineIndependent/glslang.y"
 8793|  13.6k|              {
 8794|  13.6k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.6k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.6k|#define parseContext (*pParseContext)
  ------------------
 8795|  13.6k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.6k|#define parseContext (*pParseContext)
  ------------------
 8796|  13.6k|        (yyval.interm.type).basicType = EbtUint64;
 8797|  13.6k|        (yyval.interm.type).setVector(2);
 8798|  13.6k|    }
 8799|  13.6k|#line 8800 "MachineIndependent/glslang_tab.cpp"
 8800|  13.6k|    break;
 8801|       |
 8802|  13.6k|  case 314: /* type_specifier_nonarray: U64VEC3  */
  ------------------
  |  Branch (8802:3): [True: 13.6k, False: 12.5M]
  ------------------
 8803|  13.6k|#line 2307 "MachineIndependent/glslang.y"
 8804|  13.6k|              {
 8805|  13.6k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.6k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.6k|#define parseContext (*pParseContext)
  ------------------
 8806|  13.6k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.6k|#define parseContext (*pParseContext)
  ------------------
 8807|  13.6k|        (yyval.interm.type).basicType = EbtUint64;
 8808|  13.6k|        (yyval.interm.type).setVector(3);
 8809|  13.6k|    }
 8810|  13.6k|#line 8811 "MachineIndependent/glslang_tab.cpp"
 8811|  13.6k|    break;
 8812|       |
 8813|  13.9k|  case 315: /* type_specifier_nonarray: U64VEC4  */
  ------------------
  |  Branch (8813:3): [True: 13.9k, False: 12.5M]
  ------------------
 8814|  13.9k|#line 2313 "MachineIndependent/glslang.y"
 8815|  13.9k|              {
 8816|  13.9k|        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.9k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  13.9k|#define parseContext (*pParseContext)
  ------------------
 8817|  13.9k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  13.9k|#define parseContext (*pParseContext)
  ------------------
 8818|  13.9k|        (yyval.interm.type).basicType = EbtUint64;
 8819|  13.9k|        (yyval.interm.type).setVector(4);
 8820|  13.9k|    }
 8821|  13.9k|#line 8822 "MachineIndependent/glslang_tab.cpp"
 8822|  13.9k|    break;
 8823|       |
 8824|     72|  case 316: /* type_specifier_nonarray: DMAT2  */
  ------------------
  |  Branch (8824:3): [True: 72, False: 12.5M]
  ------------------
 8825|     72|#line 2319 "MachineIndependent/glslang.y"
 8826|     72|            {
 8827|     72|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  756|     72|#define parseContext (*pParseContext)
  ------------------
 8828|     72|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|     72|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8828:13): [True: 0, False: 72]
  ------------------
 8829|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8830|     72|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     72|#define parseContext (*pParseContext)
  ------------------
 8831|     72|        (yyval.interm.type).basicType = EbtDouble;
 8832|     72|        (yyval.interm.type).setMatrix(2, 2);
 8833|     72|    }
 8834|     72|#line 8835 "MachineIndependent/glslang_tab.cpp"
 8835|     72|    break;
 8836|       |
 8837|     72|  case 317: /* type_specifier_nonarray: DMAT3  */
  ------------------
  |  Branch (8837:3): [True: 72, False: 12.5M]
  ------------------
 8838|     72|#line 2327 "MachineIndependent/glslang.y"
 8839|     72|            {
 8840|     72|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  756|     72|#define parseContext (*pParseContext)
  ------------------
 8841|     72|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|     72|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8841:13): [True: 0, False: 72]
  ------------------
 8842|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8843|     72|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     72|#define parseContext (*pParseContext)
  ------------------
 8844|     72|        (yyval.interm.type).basicType = EbtDouble;
 8845|     72|        (yyval.interm.type).setMatrix(3, 3);
 8846|     72|    }
 8847|     72|#line 8848 "MachineIndependent/glslang_tab.cpp"
 8848|     72|    break;
 8849|       |
 8850|     72|  case 318: /* type_specifier_nonarray: DMAT4  */
  ------------------
  |  Branch (8850:3): [True: 72, False: 12.5M]
  ------------------
 8851|     72|#line 2335 "MachineIndependent/glslang.y"
 8852|     72|            {
 8853|     72|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  756|     72|#define parseContext (*pParseContext)
  ------------------
 8854|     72|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|     72|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8854:13): [True: 0, False: 72]
  ------------------
 8855|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8856|     72|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     72|#define parseContext (*pParseContext)
  ------------------
 8857|     72|        (yyval.interm.type).basicType = EbtDouble;
 8858|     72|        (yyval.interm.type).setMatrix(4, 4);
 8859|     72|    }
 8860|     72|#line 8861 "MachineIndependent/glslang_tab.cpp"
 8861|     72|    break;
 8862|       |
 8863|      0|  case 319: /* type_specifier_nonarray: DMAT2X2  */
  ------------------
  |  Branch (8863:3): [True: 0, False: 12.5M]
  ------------------
 8864|      0|#line 2343 "MachineIndependent/glslang.y"
 8865|      0|              {
 8866|      0|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8867|      0|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8867:13): [True: 0, False: 0]
  ------------------
 8868|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8869|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8870|      0|        (yyval.interm.type).basicType = EbtDouble;
 8871|      0|        (yyval.interm.type).setMatrix(2, 2);
 8872|      0|    }
 8873|      0|#line 8874 "MachineIndependent/glslang_tab.cpp"
 8874|      0|    break;
 8875|       |
 8876|     48|  case 320: /* type_specifier_nonarray: DMAT2X3  */
  ------------------
  |  Branch (8876:3): [True: 48, False: 12.5M]
  ------------------
 8877|     48|#line 2351 "MachineIndependent/glslang.y"
 8878|     48|              {
 8879|     48|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
 8880|     48|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8880:13): [True: 0, False: 48]
  ------------------
 8881|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8882|     48|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
 8883|     48|        (yyval.interm.type).basicType = EbtDouble;
 8884|     48|        (yyval.interm.type).setMatrix(2, 3);
 8885|     48|    }
 8886|     48|#line 8887 "MachineIndependent/glslang_tab.cpp"
 8887|     48|    break;
 8888|       |
 8889|     48|  case 321: /* type_specifier_nonarray: DMAT2X4  */
  ------------------
  |  Branch (8889:3): [True: 48, False: 12.5M]
  ------------------
 8890|     48|#line 2359 "MachineIndependent/glslang.y"
 8891|     48|              {
 8892|     48|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
 8893|     48|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8893:13): [True: 0, False: 48]
  ------------------
 8894|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8895|     48|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
 8896|     48|        (yyval.interm.type).basicType = EbtDouble;
 8897|     48|        (yyval.interm.type).setMatrix(2, 4);
 8898|     48|    }
 8899|     48|#line 8900 "MachineIndependent/glslang_tab.cpp"
 8900|     48|    break;
 8901|       |
 8902|     48|  case 322: /* type_specifier_nonarray: DMAT3X2  */
  ------------------
  |  Branch (8902:3): [True: 48, False: 12.5M]
  ------------------
 8903|     48|#line 2367 "MachineIndependent/glslang.y"
 8904|     48|              {
 8905|     48|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
 8906|     48|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8906:13): [True: 0, False: 48]
  ------------------
 8907|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8908|     48|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
 8909|     48|        (yyval.interm.type).basicType = EbtDouble;
 8910|     48|        (yyval.interm.type).setMatrix(3, 2);
 8911|     48|    }
 8912|     48|#line 8913 "MachineIndependent/glslang_tab.cpp"
 8913|     48|    break;
 8914|       |
 8915|      0|  case 323: /* type_specifier_nonarray: DMAT3X3  */
  ------------------
  |  Branch (8915:3): [True: 0, False: 12.5M]
  ------------------
 8916|      0|#line 2375 "MachineIndependent/glslang.y"
 8917|      0|              {
 8918|      0|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8919|      0|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8919:13): [True: 0, False: 0]
  ------------------
 8920|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8921|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8922|      0|        (yyval.interm.type).basicType = EbtDouble;
 8923|      0|        (yyval.interm.type).setMatrix(3, 3);
 8924|      0|    }
 8925|      0|#line 8926 "MachineIndependent/glslang_tab.cpp"
 8926|      0|    break;
 8927|       |
 8928|     48|  case 324: /* type_specifier_nonarray: DMAT3X4  */
  ------------------
  |  Branch (8928:3): [True: 48, False: 12.5M]
  ------------------
 8929|     48|#line 2383 "MachineIndependent/glslang.y"
 8930|     48|              {
 8931|     48|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
 8932|     48|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8932:13): [True: 0, False: 48]
  ------------------
 8933|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8934|     48|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
 8935|     48|        (yyval.interm.type).basicType = EbtDouble;
 8936|     48|        (yyval.interm.type).setMatrix(3, 4);
 8937|     48|    }
 8938|     48|#line 8939 "MachineIndependent/glslang_tab.cpp"
 8939|     48|    break;
 8940|       |
 8941|     48|  case 325: /* type_specifier_nonarray: DMAT4X2  */
  ------------------
  |  Branch (8941:3): [True: 48, False: 12.5M]
  ------------------
 8942|     48|#line 2391 "MachineIndependent/glslang.y"
 8943|     48|              {
 8944|     48|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
 8945|     48|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8945:13): [True: 0, False: 48]
  ------------------
 8946|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8947|     48|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
 8948|     48|        (yyval.interm.type).basicType = EbtDouble;
 8949|     48|        (yyval.interm.type).setMatrix(4, 2);
 8950|     48|    }
 8951|     48|#line 8952 "MachineIndependent/glslang_tab.cpp"
 8952|     48|    break;
 8953|       |
 8954|     48|  case 326: /* type_specifier_nonarray: DMAT4X3  */
  ------------------
  |  Branch (8954:3): [True: 48, False: 12.5M]
  ------------------
 8955|     48|#line 2399 "MachineIndependent/glslang.y"
 8956|     48|              {
 8957|     48|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
 8958|     48|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8958:13): [True: 0, False: 48]
  ------------------
 8959|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8960|     48|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     48|#define parseContext (*pParseContext)
  ------------------
 8961|     48|        (yyval.interm.type).basicType = EbtDouble;
 8962|     48|        (yyval.interm.type).setMatrix(4, 3);
 8963|     48|    }
 8964|     48|#line 8965 "MachineIndependent/glslang_tab.cpp"
 8965|     48|    break;
 8966|       |
 8967|      0|  case 327: /* type_specifier_nonarray: DMAT4X4  */
  ------------------
  |  Branch (8967:3): [True: 0, False: 12.5M]
  ------------------
 8968|      0|#line 2407 "MachineIndependent/glslang.y"
 8969|      0|              {
 8970|      0|        parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8971|      0|        if (! parseContext.symbolTable.atBuiltInLevel())
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (8971:13): [True: 0, False: 0]
  ------------------
 8972|      0|            parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8973|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 8974|      0|        (yyval.interm.type).basicType = EbtDouble;
 8975|      0|        (yyval.interm.type).setMatrix(4, 4);
 8976|      0|    }
 8977|      0|#line 8978 "MachineIndependent/glslang_tab.cpp"
 8978|      0|    break;
 8979|       |
 8980|     45|  case 328: /* type_specifier_nonarray: F16MAT2  */
  ------------------
  |  Branch (8980:3): [True: 45, False: 12.5M]
  ------------------
 8981|     45|#line 2415 "MachineIndependent/glslang.y"
 8982|     45|              {
 8983|     45|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     45|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     45|#define parseContext (*pParseContext)
  ------------------
 8984|     45|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     45|#define parseContext (*pParseContext)
  ------------------
 8985|     45|        (yyval.interm.type).basicType = EbtFloat16;
 8986|     45|        (yyval.interm.type).setMatrix(2, 2);
 8987|     45|    }
 8988|     45|#line 8989 "MachineIndependent/glslang_tab.cpp"
 8989|     45|    break;
 8990|       |
 8991|     45|  case 329: /* type_specifier_nonarray: F16MAT3  */
  ------------------
  |  Branch (8991:3): [True: 45, False: 12.5M]
  ------------------
 8992|     45|#line 2421 "MachineIndependent/glslang.y"
 8993|     45|              {
 8994|     45|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     45|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     45|#define parseContext (*pParseContext)
  ------------------
 8995|     45|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     45|#define parseContext (*pParseContext)
  ------------------
 8996|     45|        (yyval.interm.type).basicType = EbtFloat16;
 8997|     45|        (yyval.interm.type).setMatrix(3, 3);
 8998|     45|    }
 8999|     45|#line 9000 "MachineIndependent/glslang_tab.cpp"
 9000|     45|    break;
 9001|       |
 9002|     45|  case 330: /* type_specifier_nonarray: F16MAT4  */
  ------------------
  |  Branch (9002:3): [True: 45, False: 12.5M]
  ------------------
 9003|     45|#line 2427 "MachineIndependent/glslang.y"
 9004|     45|              {
 9005|     45|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     45|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     45|#define parseContext (*pParseContext)
  ------------------
 9006|     45|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     45|#define parseContext (*pParseContext)
  ------------------
 9007|     45|        (yyval.interm.type).basicType = EbtFloat16;
 9008|     45|        (yyval.interm.type).setMatrix(4, 4);
 9009|     45|    }
 9010|     45|#line 9011 "MachineIndependent/glslang_tab.cpp"
 9011|     45|    break;
 9012|       |
 9013|      0|  case 331: /* type_specifier_nonarray: F16MAT2X2  */
  ------------------
  |  Branch (9013:3): [True: 0, False: 12.5M]
  ------------------
 9014|      0|#line 2433 "MachineIndependent/glslang.y"
 9015|      0|                {
 9016|      0|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9017|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9018|      0|        (yyval.interm.type).basicType = EbtFloat16;
 9019|      0|        (yyval.interm.type).setMatrix(2, 2);
 9020|      0|    }
 9021|      0|#line 9022 "MachineIndependent/glslang_tab.cpp"
 9022|      0|    break;
 9023|       |
 9024|     30|  case 332: /* type_specifier_nonarray: F16MAT2X3  */
  ------------------
  |  Branch (9024:3): [True: 30, False: 12.5M]
  ------------------
 9025|     30|#line 2439 "MachineIndependent/glslang.y"
 9026|     30|                {
 9027|     30|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 9028|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 9029|     30|        (yyval.interm.type).basicType = EbtFloat16;
 9030|     30|        (yyval.interm.type).setMatrix(2, 3);
 9031|     30|    }
 9032|     30|#line 9033 "MachineIndependent/glslang_tab.cpp"
 9033|     30|    break;
 9034|       |
 9035|     30|  case 333: /* type_specifier_nonarray: F16MAT2X4  */
  ------------------
  |  Branch (9035:3): [True: 30, False: 12.5M]
  ------------------
 9036|     30|#line 2445 "MachineIndependent/glslang.y"
 9037|     30|                {
 9038|     30|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 9039|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 9040|     30|        (yyval.interm.type).basicType = EbtFloat16;
 9041|     30|        (yyval.interm.type).setMatrix(2, 4);
 9042|     30|    }
 9043|     30|#line 9044 "MachineIndependent/glslang_tab.cpp"
 9044|     30|    break;
 9045|       |
 9046|     30|  case 334: /* type_specifier_nonarray: F16MAT3X2  */
  ------------------
  |  Branch (9046:3): [True: 30, False: 12.5M]
  ------------------
 9047|     30|#line 2451 "MachineIndependent/glslang.y"
 9048|     30|                {
 9049|     30|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 9050|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 9051|     30|        (yyval.interm.type).basicType = EbtFloat16;
 9052|     30|        (yyval.interm.type).setMatrix(3, 2);
 9053|     30|    }
 9054|     30|#line 9055 "MachineIndependent/glslang_tab.cpp"
 9055|     30|    break;
 9056|       |
 9057|      0|  case 335: /* type_specifier_nonarray: F16MAT3X3  */
  ------------------
  |  Branch (9057:3): [True: 0, False: 12.5M]
  ------------------
 9058|      0|#line 2457 "MachineIndependent/glslang.y"
 9059|      0|                {
 9060|      0|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9061|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9062|      0|        (yyval.interm.type).basicType = EbtFloat16;
 9063|      0|        (yyval.interm.type).setMatrix(3, 3);
 9064|      0|    }
 9065|      0|#line 9066 "MachineIndependent/glslang_tab.cpp"
 9066|      0|    break;
 9067|       |
 9068|     30|  case 336: /* type_specifier_nonarray: F16MAT3X4  */
  ------------------
  |  Branch (9068:3): [True: 30, False: 12.5M]
  ------------------
 9069|     30|#line 2463 "MachineIndependent/glslang.y"
 9070|     30|                {
 9071|     30|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 9072|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 9073|     30|        (yyval.interm.type).basicType = EbtFloat16;
 9074|     30|        (yyval.interm.type).setMatrix(3, 4);
 9075|     30|    }
 9076|     30|#line 9077 "MachineIndependent/glslang_tab.cpp"
 9077|     30|    break;
 9078|       |
 9079|     30|  case 337: /* type_specifier_nonarray: F16MAT4X2  */
  ------------------
  |  Branch (9079:3): [True: 30, False: 12.5M]
  ------------------
 9080|     30|#line 2469 "MachineIndependent/glslang.y"
 9081|     30|                {
 9082|     30|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 9083|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 9084|     30|        (yyval.interm.type).basicType = EbtFloat16;
 9085|     30|        (yyval.interm.type).setMatrix(4, 2);
 9086|     30|    }
 9087|     30|#line 9088 "MachineIndependent/glslang_tab.cpp"
 9088|     30|    break;
 9089|       |
 9090|     30|  case 338: /* type_specifier_nonarray: F16MAT4X3  */
  ------------------
  |  Branch (9090:3): [True: 30, False: 12.5M]
  ------------------
 9091|     30|#line 2475 "MachineIndependent/glslang.y"
 9092|     30|                {
 9093|     30|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 9094|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
 9095|     30|        (yyval.interm.type).basicType = EbtFloat16;
 9096|     30|        (yyval.interm.type).setMatrix(4, 3);
 9097|     30|    }
 9098|     30|#line 9099 "MachineIndependent/glslang_tab.cpp"
 9099|     30|    break;
 9100|       |
 9101|      0|  case 339: /* type_specifier_nonarray: F16MAT4X4  */
  ------------------
  |  Branch (9101:3): [True: 0, False: 12.5M]
  ------------------
 9102|      0|#line 2481 "MachineIndependent/glslang.y"
 9103|      0|                {
 9104|      0|        parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9105|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9106|      0|        (yyval.interm.type).basicType = EbtFloat16;
 9107|      0|        (yyval.interm.type).setMatrix(4, 4);
 9108|      0|    }
 9109|      0|#line 9110 "MachineIndependent/glslang_tab.cpp"
 9110|      0|    break;
 9111|       |
 9112|      0|  case 340: /* type_specifier_nonarray: F32MAT2  */
  ------------------
  |  Branch (9112:3): [True: 0, False: 12.5M]
  ------------------
 9113|      0|#line 2487 "MachineIndependent/glslang.y"
 9114|      0|              {
 9115|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9116|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9117|      0|        (yyval.interm.type).basicType = EbtFloat;
 9118|      0|        (yyval.interm.type).setMatrix(2, 2);
 9119|      0|    }
 9120|      0|#line 9121 "MachineIndependent/glslang_tab.cpp"
 9121|      0|    break;
 9122|       |
 9123|      0|  case 341: /* type_specifier_nonarray: F32MAT3  */
  ------------------
  |  Branch (9123:3): [True: 0, False: 12.5M]
  ------------------
 9124|      0|#line 2493 "MachineIndependent/glslang.y"
 9125|      0|              {
 9126|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9127|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9128|      0|        (yyval.interm.type).basicType = EbtFloat;
 9129|      0|        (yyval.interm.type).setMatrix(3, 3);
 9130|      0|    }
 9131|      0|#line 9132 "MachineIndependent/glslang_tab.cpp"
 9132|      0|    break;
 9133|       |
 9134|      0|  case 342: /* type_specifier_nonarray: F32MAT4  */
  ------------------
  |  Branch (9134:3): [True: 0, False: 12.5M]
  ------------------
 9135|      0|#line 2499 "MachineIndependent/glslang.y"
 9136|      0|              {
 9137|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9138|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9139|      0|        (yyval.interm.type).basicType = EbtFloat;
 9140|      0|        (yyval.interm.type).setMatrix(4, 4);
 9141|      0|    }
 9142|      0|#line 9143 "MachineIndependent/glslang_tab.cpp"
 9143|      0|    break;
 9144|       |
 9145|      0|  case 343: /* type_specifier_nonarray: F32MAT2X2  */
  ------------------
  |  Branch (9145:3): [True: 0, False: 12.5M]
  ------------------
 9146|      0|#line 2505 "MachineIndependent/glslang.y"
 9147|      0|                {
 9148|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9149|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9150|      0|        (yyval.interm.type).basicType = EbtFloat;
 9151|      0|        (yyval.interm.type).setMatrix(2, 2);
 9152|      0|    }
 9153|      0|#line 9154 "MachineIndependent/glslang_tab.cpp"
 9154|      0|    break;
 9155|       |
 9156|      0|  case 344: /* type_specifier_nonarray: F32MAT2X3  */
  ------------------
  |  Branch (9156:3): [True: 0, False: 12.5M]
  ------------------
 9157|      0|#line 2511 "MachineIndependent/glslang.y"
 9158|      0|                {
 9159|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9160|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9161|      0|        (yyval.interm.type).basicType = EbtFloat;
 9162|      0|        (yyval.interm.type).setMatrix(2, 3);
 9163|      0|    }
 9164|      0|#line 9165 "MachineIndependent/glslang_tab.cpp"
 9165|      0|    break;
 9166|       |
 9167|      0|  case 345: /* type_specifier_nonarray: F32MAT2X4  */
  ------------------
  |  Branch (9167:3): [True: 0, False: 12.5M]
  ------------------
 9168|      0|#line 2517 "MachineIndependent/glslang.y"
 9169|      0|                {
 9170|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9171|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9172|      0|        (yyval.interm.type).basicType = EbtFloat;
 9173|      0|        (yyval.interm.type).setMatrix(2, 4);
 9174|      0|    }
 9175|      0|#line 9176 "MachineIndependent/glslang_tab.cpp"
 9176|      0|    break;
 9177|       |
 9178|      0|  case 346: /* type_specifier_nonarray: F32MAT3X2  */
  ------------------
  |  Branch (9178:3): [True: 0, False: 12.5M]
  ------------------
 9179|      0|#line 2523 "MachineIndependent/glslang.y"
 9180|      0|                {
 9181|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9182|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9183|      0|        (yyval.interm.type).basicType = EbtFloat;
 9184|      0|        (yyval.interm.type).setMatrix(3, 2);
 9185|      0|    }
 9186|      0|#line 9187 "MachineIndependent/glslang_tab.cpp"
 9187|      0|    break;
 9188|       |
 9189|      0|  case 347: /* type_specifier_nonarray: F32MAT3X3  */
  ------------------
  |  Branch (9189:3): [True: 0, False: 12.5M]
  ------------------
 9190|      0|#line 2529 "MachineIndependent/glslang.y"
 9191|      0|                {
 9192|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9193|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9194|      0|        (yyval.interm.type).basicType = EbtFloat;
 9195|      0|        (yyval.interm.type).setMatrix(3, 3);
 9196|      0|    }
 9197|      0|#line 9198 "MachineIndependent/glslang_tab.cpp"
 9198|      0|    break;
 9199|       |
 9200|      0|  case 348: /* type_specifier_nonarray: F32MAT3X4  */
  ------------------
  |  Branch (9200:3): [True: 0, False: 12.5M]
  ------------------
 9201|      0|#line 2535 "MachineIndependent/glslang.y"
 9202|      0|                {
 9203|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9204|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9205|      0|        (yyval.interm.type).basicType = EbtFloat;
 9206|      0|        (yyval.interm.type).setMatrix(3, 4);
 9207|      0|    }
 9208|      0|#line 9209 "MachineIndependent/glslang_tab.cpp"
 9209|      0|    break;
 9210|       |
 9211|      0|  case 349: /* type_specifier_nonarray: F32MAT4X2  */
  ------------------
  |  Branch (9211:3): [True: 0, False: 12.5M]
  ------------------
 9212|      0|#line 2541 "MachineIndependent/glslang.y"
 9213|      0|                {
 9214|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9215|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9216|      0|        (yyval.interm.type).basicType = EbtFloat;
 9217|      0|        (yyval.interm.type).setMatrix(4, 2);
 9218|      0|    }
 9219|      0|#line 9220 "MachineIndependent/glslang_tab.cpp"
 9220|      0|    break;
 9221|       |
 9222|      0|  case 350: /* type_specifier_nonarray: F32MAT4X3  */
  ------------------
  |  Branch (9222:3): [True: 0, False: 12.5M]
  ------------------
 9223|      0|#line 2547 "MachineIndependent/glslang.y"
 9224|      0|                {
 9225|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9226|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9227|      0|        (yyval.interm.type).basicType = EbtFloat;
 9228|      0|        (yyval.interm.type).setMatrix(4, 3);
 9229|      0|    }
 9230|      0|#line 9231 "MachineIndependent/glslang_tab.cpp"
 9231|      0|    break;
 9232|       |
 9233|      0|  case 351: /* type_specifier_nonarray: F32MAT4X4  */
  ------------------
  |  Branch (9233:3): [True: 0, False: 12.5M]
  ------------------
 9234|      0|#line 2553 "MachineIndependent/glslang.y"
 9235|      0|                {
 9236|      0|        parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9237|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9238|      0|        (yyval.interm.type).basicType = EbtFloat;
 9239|      0|        (yyval.interm.type).setMatrix(4, 4);
 9240|      0|    }
 9241|      0|#line 9242 "MachineIndependent/glslang_tab.cpp"
 9242|      0|    break;
 9243|       |
 9244|      0|  case 352: /* type_specifier_nonarray: F64MAT2  */
  ------------------
  |  Branch (9244:3): [True: 0, False: 12.5M]
  ------------------
 9245|      0|#line 2559 "MachineIndependent/glslang.y"
 9246|      0|              {
 9247|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9248|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9249|      0|        (yyval.interm.type).basicType = EbtDouble;
 9250|      0|        (yyval.interm.type).setMatrix(2, 2);
 9251|      0|    }
 9252|      0|#line 9253 "MachineIndependent/glslang_tab.cpp"
 9253|      0|    break;
 9254|       |
 9255|      0|  case 353: /* type_specifier_nonarray: F64MAT3  */
  ------------------
  |  Branch (9255:3): [True: 0, False: 12.5M]
  ------------------
 9256|      0|#line 2565 "MachineIndependent/glslang.y"
 9257|      0|              {
 9258|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9259|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9260|      0|        (yyval.interm.type).basicType = EbtDouble;
 9261|      0|        (yyval.interm.type).setMatrix(3, 3);
 9262|      0|    }
 9263|      0|#line 9264 "MachineIndependent/glslang_tab.cpp"
 9264|      0|    break;
 9265|       |
 9266|      0|  case 354: /* type_specifier_nonarray: F64MAT4  */
  ------------------
  |  Branch (9266:3): [True: 0, False: 12.5M]
  ------------------
 9267|      0|#line 2571 "MachineIndependent/glslang.y"
 9268|      0|              {
 9269|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9270|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9271|      0|        (yyval.interm.type).basicType = EbtDouble;
 9272|      0|        (yyval.interm.type).setMatrix(4, 4);
 9273|      0|    }
 9274|      0|#line 9275 "MachineIndependent/glslang_tab.cpp"
 9275|      0|    break;
 9276|       |
 9277|      0|  case 355: /* type_specifier_nonarray: F64MAT2X2  */
  ------------------
  |  Branch (9277:3): [True: 0, False: 12.5M]
  ------------------
 9278|      0|#line 2577 "MachineIndependent/glslang.y"
 9279|      0|                {
 9280|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9281|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9282|      0|        (yyval.interm.type).basicType = EbtDouble;
 9283|      0|        (yyval.interm.type).setMatrix(2, 2);
 9284|      0|    }
 9285|      0|#line 9286 "MachineIndependent/glslang_tab.cpp"
 9286|      0|    break;
 9287|       |
 9288|      0|  case 356: /* type_specifier_nonarray: F64MAT2X3  */
  ------------------
  |  Branch (9288:3): [True: 0, False: 12.5M]
  ------------------
 9289|      0|#line 2583 "MachineIndependent/glslang.y"
 9290|      0|                {
 9291|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9292|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9293|      0|        (yyval.interm.type).basicType = EbtDouble;
 9294|      0|        (yyval.interm.type).setMatrix(2, 3);
 9295|      0|    }
 9296|      0|#line 9297 "MachineIndependent/glslang_tab.cpp"
 9297|      0|    break;
 9298|       |
 9299|      0|  case 357: /* type_specifier_nonarray: F64MAT2X4  */
  ------------------
  |  Branch (9299:3): [True: 0, False: 12.5M]
  ------------------
 9300|      0|#line 2589 "MachineIndependent/glslang.y"
 9301|      0|                {
 9302|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9303|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9304|      0|        (yyval.interm.type).basicType = EbtDouble;
 9305|      0|        (yyval.interm.type).setMatrix(2, 4);
 9306|      0|    }
 9307|      0|#line 9308 "MachineIndependent/glslang_tab.cpp"
 9308|      0|    break;
 9309|       |
 9310|      0|  case 358: /* type_specifier_nonarray: F64MAT3X2  */
  ------------------
  |  Branch (9310:3): [True: 0, False: 12.5M]
  ------------------
 9311|      0|#line 2595 "MachineIndependent/glslang.y"
 9312|      0|                {
 9313|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9314|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9315|      0|        (yyval.interm.type).basicType = EbtDouble;
 9316|      0|        (yyval.interm.type).setMatrix(3, 2);
 9317|      0|    }
 9318|      0|#line 9319 "MachineIndependent/glslang_tab.cpp"
 9319|      0|    break;
 9320|       |
 9321|      0|  case 359: /* type_specifier_nonarray: F64MAT3X3  */
  ------------------
  |  Branch (9321:3): [True: 0, False: 12.5M]
  ------------------
 9322|      0|#line 2601 "MachineIndependent/glslang.y"
 9323|      0|                {
 9324|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9325|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9326|      0|        (yyval.interm.type).basicType = EbtDouble;
 9327|      0|        (yyval.interm.type).setMatrix(3, 3);
 9328|      0|    }
 9329|      0|#line 9330 "MachineIndependent/glslang_tab.cpp"
 9330|      0|    break;
 9331|       |
 9332|      0|  case 360: /* type_specifier_nonarray: F64MAT3X4  */
  ------------------
  |  Branch (9332:3): [True: 0, False: 12.5M]
  ------------------
 9333|      0|#line 2607 "MachineIndependent/glslang.y"
 9334|      0|                {
 9335|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9336|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9337|      0|        (yyval.interm.type).basicType = EbtDouble;
 9338|      0|        (yyval.interm.type).setMatrix(3, 4);
 9339|      0|    }
 9340|      0|#line 9341 "MachineIndependent/glslang_tab.cpp"
 9341|      0|    break;
 9342|       |
 9343|      0|  case 361: /* type_specifier_nonarray: F64MAT4X2  */
  ------------------
  |  Branch (9343:3): [True: 0, False: 12.5M]
  ------------------
 9344|      0|#line 2613 "MachineIndependent/glslang.y"
 9345|      0|                {
 9346|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9347|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9348|      0|        (yyval.interm.type).basicType = EbtDouble;
 9349|      0|        (yyval.interm.type).setMatrix(4, 2);
 9350|      0|    }
 9351|      0|#line 9352 "MachineIndependent/glslang_tab.cpp"
 9352|      0|    break;
 9353|       |
 9354|      0|  case 362: /* type_specifier_nonarray: F64MAT4X3  */
  ------------------
  |  Branch (9354:3): [True: 0, False: 12.5M]
  ------------------
 9355|      0|#line 2619 "MachineIndependent/glslang.y"
 9356|      0|                {
 9357|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9358|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9359|      0|        (yyval.interm.type).basicType = EbtDouble;
 9360|      0|        (yyval.interm.type).setMatrix(4, 3);
 9361|      0|    }
 9362|      0|#line 9363 "MachineIndependent/glslang_tab.cpp"
 9363|      0|    break;
 9364|       |
 9365|      0|  case 363: /* type_specifier_nonarray: F64MAT4X4  */
  ------------------
  |  Branch (9365:3): [True: 0, False: 12.5M]
  ------------------
 9366|      0|#line 2625 "MachineIndependent/glslang.y"
 9367|      0|                {
 9368|      0|        parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9369|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9370|      0|        (yyval.interm.type).basicType = EbtDouble;
 9371|      0|        (yyval.interm.type).setMatrix(4, 4);
 9372|      0|    }
 9373|      0|#line 9374 "MachineIndependent/glslang_tab.cpp"
 9374|      0|    break;
 9375|       |
 9376|      0|  case 364: /* type_specifier_nonarray: ACCSTRUCTNV  */
  ------------------
  |  Branch (9376:3): [True: 0, False: 12.5M]
  ------------------
 9377|      0|#line 2631 "MachineIndependent/glslang.y"
 9378|      0|                  {
 9379|      0|       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9380|      0|       (yyval.interm.type).basicType = EbtAccStruct;
 9381|      0|    }
 9382|      0|#line 9383 "MachineIndependent/glslang_tab.cpp"
 9383|      0|    break;
 9384|       |
 9385|      0|  case 365: /* type_specifier_nonarray: ACCSTRUCTEXT  */
  ------------------
  |  Branch (9385:3): [True: 0, False: 12.5M]
  ------------------
 9386|      0|#line 2635 "MachineIndependent/glslang.y"
 9387|      0|                   {
 9388|      0|       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9389|      0|       (yyval.interm.type).basicType = EbtAccStruct;
 9390|      0|    }
 9391|      0|#line 9392 "MachineIndependent/glslang_tab.cpp"
 9392|      0|    break;
 9393|       |
 9394|      0|  case 366: /* type_specifier_nonarray: RAYQUERYEXT  */
  ------------------
  |  Branch (9394:3): [True: 0, False: 12.5M]
  ------------------
 9395|      0|#line 2639 "MachineIndependent/glslang.y"
 9396|      0|                  {
 9397|      0|       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9398|      0|       (yyval.interm.type).basicType = EbtRayQuery;
 9399|      0|    }
 9400|      0|#line 9401 "MachineIndependent/glslang_tab.cpp"
 9401|      0|    break;
 9402|       |
 9403|      0|  case 367: /* type_specifier_nonarray: ATOMIC_UINT  */
  ------------------
  |  Branch (9403:3): [True: 0, False: 12.5M]
  ------------------
 9404|      0|#line 2643 "MachineIndependent/glslang.y"
 9405|      0|                  {
 9406|      0|        parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9407|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
 9408|      0|        (yyval.interm.type).basicType = EbtAtomicUint;
 9409|      0|    }
 9410|      0|#line 9411 "MachineIndependent/glslang_tab.cpp"
 9411|      0|    break;
 9412|       |
 9413|  3.56k|  case 368: /* type_specifier_nonarray: SAMPLER1D  */
  ------------------
  |  Branch (9413:3): [True: 3.56k, False: 12.5M]
  ------------------
 9414|  3.56k|#line 2648 "MachineIndependent/glslang.y"
 9415|  3.56k|                {
 9416|  3.56k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  3.56k|#define parseContext (*pParseContext)
  ------------------
 9417|  3.56k|        (yyval.interm.type).basicType = EbtSampler;
 9418|  3.56k|        (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
 9419|  3.56k|    }
 9420|  3.56k|#line 9421 "MachineIndependent/glslang_tab.cpp"
 9421|  3.56k|    break;
 9422|       |
 9423|  6.04k|  case 369: /* type_specifier_nonarray: SAMPLER2D  */
  ------------------
  |  Branch (9423:3): [True: 6.04k, False: 12.5M]
  ------------------
 9424|  6.04k|#line 2653 "MachineIndependent/glslang.y"
 9425|  6.04k|                {
 9426|  6.04k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  6.04k|#define parseContext (*pParseContext)
  ------------------
 9427|  6.04k|        (yyval.interm.type).basicType = EbtSampler;
 9428|  6.04k|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
 9429|  6.04k|    }
 9430|  6.04k|#line 9431 "MachineIndependent/glslang_tab.cpp"
 9431|  6.04k|    break;
 9432|       |
 9433|  2.70k|  case 370: /* type_specifier_nonarray: SAMPLER3D  */
  ------------------
  |  Branch (9433:3): [True: 2.70k, False: 12.5M]
  ------------------
 9434|  2.70k|#line 2658 "MachineIndependent/glslang.y"
 9435|  2.70k|                {
 9436|  2.70k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  2.70k|#define parseContext (*pParseContext)
  ------------------
 9437|  2.70k|        (yyval.interm.type).basicType = EbtSampler;
 9438|  2.70k|        (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
 9439|  2.70k|    }
 9440|  2.70k|#line 9441 "MachineIndependent/glslang_tab.cpp"
 9441|  2.70k|    break;
 9442|       |
 9443|    988|  case 371: /* type_specifier_nonarray: SAMPLERCUBE  */
  ------------------
  |  Branch (9443:3): [True: 988, False: 12.5M]
  ------------------
 9444|    988|#line 2663 "MachineIndependent/glslang.y"
 9445|    988|                  {
 9446|    988|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    988|#define parseContext (*pParseContext)
  ------------------
 9447|    988|        (yyval.interm.type).basicType = EbtSampler;
 9448|    988|        (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
 9449|    988|    }
 9450|    988|#line 9451 "MachineIndependent/glslang_tab.cpp"
 9451|    988|    break;
 9452|       |
 9453|  2.29k|  case 372: /* type_specifier_nonarray: SAMPLER2DSHADOW  */
  ------------------
  |  Branch (9453:3): [True: 2.29k, False: 12.5M]
  ------------------
 9454|  2.29k|#line 2668 "MachineIndependent/glslang.y"
 9455|  2.29k|                      {
 9456|  2.29k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  2.29k|#define parseContext (*pParseContext)
  ------------------
 9457|  2.29k|        (yyval.interm.type).basicType = EbtSampler;
 9458|  2.29k|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
 9459|  2.29k|    }
 9460|  2.29k|#line 9461 "MachineIndependent/glslang_tab.cpp"
 9461|  2.29k|    break;
 9462|       |
 9463|    794|  case 373: /* type_specifier_nonarray: SAMPLERCUBESHADOW  */
  ------------------
  |  Branch (9463:3): [True: 794, False: 12.5M]
  ------------------
 9464|    794|#line 2673 "MachineIndependent/glslang.y"
 9465|    794|                        {
 9466|    794|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    794|#define parseContext (*pParseContext)
  ------------------
 9467|    794|        (yyval.interm.type).basicType = EbtSampler;
 9468|    794|        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
 9469|    794|    }
 9470|    794|#line 9471 "MachineIndependent/glslang_tab.cpp"
 9471|    794|    break;
 9472|       |
 9473|  2.57k|  case 374: /* type_specifier_nonarray: SAMPLER2DARRAY  */
  ------------------
  |  Branch (9473:3): [True: 2.57k, False: 12.5M]
  ------------------
 9474|  2.57k|#line 2678 "MachineIndependent/glslang.y"
 9475|  2.57k|                     {
 9476|  2.57k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  2.57k|#define parseContext (*pParseContext)
  ------------------
 9477|  2.57k|        (yyval.interm.type).basicType = EbtSampler;
 9478|  2.57k|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
 9479|  2.57k|    }
 9480|  2.57k|#line 9481 "MachineIndependent/glslang_tab.cpp"
 9481|  2.57k|    break;
 9482|       |
 9483|  1.35k|  case 375: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW  */
  ------------------
  |  Branch (9483:3): [True: 1.35k, False: 12.5M]
  ------------------
 9484|  1.35k|#line 2683 "MachineIndependent/glslang.y"
 9485|  1.35k|                           {
 9486|  1.35k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.35k|#define parseContext (*pParseContext)
  ------------------
 9487|  1.35k|        (yyval.interm.type).basicType = EbtSampler;
 9488|  1.35k|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
 9489|  1.35k|    }
 9490|  1.35k|#line 9491 "MachineIndependent/glslang_tab.cpp"
 9491|  1.35k|    break;
 9492|       |
 9493|  1.83k|  case 376: /* type_specifier_nonarray: SAMPLER1DSHADOW  */
  ------------------
  |  Branch (9493:3): [True: 1.83k, False: 12.5M]
  ------------------
 9494|  1.83k|#line 2688 "MachineIndependent/glslang.y"
 9495|  1.83k|                      {
 9496|  1.83k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.83k|#define parseContext (*pParseContext)
  ------------------
 9497|  1.83k|        (yyval.interm.type).basicType = EbtSampler;
 9498|  1.83k|        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
 9499|  1.83k|    }
 9500|  1.83k|#line 9501 "MachineIndependent/glslang_tab.cpp"
 9501|  1.83k|    break;
 9502|       |
 9503|  1.52k|  case 377: /* type_specifier_nonarray: SAMPLER1DARRAY  */
  ------------------
  |  Branch (9503:3): [True: 1.52k, False: 12.5M]
  ------------------
 9504|  1.52k|#line 2693 "MachineIndependent/glslang.y"
 9505|  1.52k|                     {
 9506|  1.52k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.52k|#define parseContext (*pParseContext)
  ------------------
 9507|  1.52k|        (yyval.interm.type).basicType = EbtSampler;
 9508|  1.52k|        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
 9509|  1.52k|    }
 9510|  1.52k|#line 9511 "MachineIndependent/glslang_tab.cpp"
 9511|  1.52k|    break;
 9512|       |
 9513|  1.05k|  case 378: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW  */
  ------------------
  |  Branch (9513:3): [True: 1.05k, False: 12.5M]
  ------------------
 9514|  1.05k|#line 2698 "MachineIndependent/glslang.y"
 9515|  1.05k|                           {
 9516|  1.05k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.05k|#define parseContext (*pParseContext)
  ------------------
 9517|  1.05k|        (yyval.interm.type).basicType = EbtSampler;
 9518|  1.05k|        (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
 9519|  1.05k|    }
 9520|  1.05k|#line 9521 "MachineIndependent/glslang_tab.cpp"
 9521|  1.05k|    break;
 9522|       |
 9523|    988|  case 379: /* type_specifier_nonarray: SAMPLERCUBEARRAY  */
  ------------------
  |  Branch (9523:3): [True: 988, False: 12.5M]
  ------------------
 9524|    988|#line 2703 "MachineIndependent/glslang.y"
 9525|    988|                       {
 9526|    988|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    988|#define parseContext (*pParseContext)
  ------------------
 9527|    988|        (yyval.interm.type).basicType = EbtSampler;
 9528|    988|        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
 9529|    988|    }
 9530|    988|#line 9531 "MachineIndependent/glslang_tab.cpp"
 9531|    988|    break;
 9532|       |
 9533|    719|  case 380: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW  */
  ------------------
  |  Branch (9533:3): [True: 719, False: 12.5M]
  ------------------
 9534|    719|#line 2708 "MachineIndependent/glslang.y"
 9535|    719|                             {
 9536|    719|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    719|#define parseContext (*pParseContext)
  ------------------
 9537|    719|        (yyval.interm.type).basicType = EbtSampler;
 9538|    719|        (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
 9539|    719|    }
 9540|    719|#line 9541 "MachineIndependent/glslang_tab.cpp"
 9541|    719|    break;
 9542|       |
 9543|    800|  case 381: /* type_specifier_nonarray: F16SAMPLER1D  */
  ------------------
  |  Branch (9543:3): [True: 800, False: 12.5M]
  ------------------
 9544|    800|#line 2713 "MachineIndependent/glslang.y"
 9545|    800|                   {
 9546|    800|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    800|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    800|#define parseContext (*pParseContext)
  ------------------
 9547|    800|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    800|#define parseContext (*pParseContext)
  ------------------
 9548|    800|        (yyval.interm.type).basicType = EbtSampler;
 9549|    800|        (yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
 9550|    800|    }
 9551|    800|#line 9552 "MachineIndependent/glslang_tab.cpp"
 9552|    800|    break;
 9553|       |
 9554|  1.82k|  case 382: /* type_specifier_nonarray: F16SAMPLER2D  */
  ------------------
  |  Branch (9554:3): [True: 1.82k, False: 12.5M]
  ------------------
 9555|  1.82k|#line 2719 "MachineIndependent/glslang.y"
 9556|  1.82k|                   {
 9557|  1.82k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  1.82k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  1.82k|#define parseContext (*pParseContext)
  ------------------
 9558|  1.82k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.82k|#define parseContext (*pParseContext)
  ------------------
 9559|  1.82k|        (yyval.interm.type).basicType = EbtSampler;
 9560|  1.82k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
 9561|  1.82k|    }
 9562|  1.82k|#line 9563 "MachineIndependent/glslang_tab.cpp"
 9563|  1.82k|    break;
 9564|       |
 9565|    990|  case 383: /* type_specifier_nonarray: F16SAMPLER3D  */
  ------------------
  |  Branch (9565:3): [True: 990, False: 12.5M]
  ------------------
 9566|    990|#line 2725 "MachineIndependent/glslang.y"
 9567|    990|                   {
 9568|    990|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    990|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    990|#define parseContext (*pParseContext)
  ------------------
 9569|    990|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    990|#define parseContext (*pParseContext)
  ------------------
 9570|    990|        (yyval.interm.type).basicType = EbtSampler;
 9571|    990|        (yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
 9572|    990|    }
 9573|    990|#line 9574 "MachineIndependent/glslang_tab.cpp"
 9574|    990|    break;
 9575|       |
 9576|    640|  case 384: /* type_specifier_nonarray: F16SAMPLERCUBE  */
  ------------------
  |  Branch (9576:3): [True: 640, False: 12.5M]
  ------------------
 9577|    640|#line 2731 "MachineIndependent/glslang.y"
 9578|    640|                     {
 9579|    640|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    640|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    640|#define parseContext (*pParseContext)
  ------------------
 9580|    640|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    640|#define parseContext (*pParseContext)
  ------------------
 9581|    640|        (yyval.interm.type).basicType = EbtSampler;
 9582|    640|        (yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
 9583|    640|    }
 9584|    640|#line 9585 "MachineIndependent/glslang_tab.cpp"
 9585|    640|    break;
 9586|       |
 9587|    560|  case 385: /* type_specifier_nonarray: F16SAMPLER1DSHADOW  */
  ------------------
  |  Branch (9587:3): [True: 560, False: 12.5M]
  ------------------
 9588|    560|#line 2737 "MachineIndependent/glslang.y"
 9589|    560|                         {
 9590|    560|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    560|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    560|#define parseContext (*pParseContext)
  ------------------
 9591|    560|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    560|#define parseContext (*pParseContext)
  ------------------
 9592|    560|        (yyval.interm.type).basicType = EbtSampler;
 9593|    560|        (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
 9594|    560|    }
 9595|    560|#line 9596 "MachineIndependent/glslang_tab.cpp"
 9596|    560|    break;
 9597|       |
 9598|    940|  case 386: /* type_specifier_nonarray: F16SAMPLER2DSHADOW  */
  ------------------
  |  Branch (9598:3): [True: 940, False: 12.5M]
  ------------------
 9599|    940|#line 2743 "MachineIndependent/glslang.y"
 9600|    940|                         {
 9601|    940|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    940|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    940|#define parseContext (*pParseContext)
  ------------------
 9602|    940|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    940|#define parseContext (*pParseContext)
  ------------------
 9603|    940|        (yyval.interm.type).basicType = EbtSampler;
 9604|    940|        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
 9605|    940|    }
 9606|    940|#line 9607 "MachineIndependent/glslang_tab.cpp"
 9607|    940|    break;
 9608|       |
 9609|    420|  case 387: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW  */
  ------------------
  |  Branch (9609:3): [True: 420, False: 12.5M]
  ------------------
 9610|    420|#line 2749 "MachineIndependent/glslang.y"
 9611|    420|                           {
 9612|    420|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    420|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    420|#define parseContext (*pParseContext)
  ------------------
 9613|    420|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    420|#define parseContext (*pParseContext)
  ------------------
 9614|    420|        (yyval.interm.type).basicType = EbtSampler;
 9615|    420|        (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
 9616|    420|    }
 9617|    420|#line 9618 "MachineIndependent/glslang_tab.cpp"
 9618|    420|    break;
 9619|       |
 9620|    460|  case 388: /* type_specifier_nonarray: F16SAMPLER1DARRAY  */
  ------------------
  |  Branch (9620:3): [True: 460, False: 12.5M]
  ------------------
 9621|    460|#line 2755 "MachineIndependent/glslang.y"
 9622|    460|                        {
 9623|    460|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    460|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    460|#define parseContext (*pParseContext)
  ------------------
 9624|    460|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    460|#define parseContext (*pParseContext)
  ------------------
 9625|    460|        (yyval.interm.type).basicType = EbtSampler;
 9626|    460|        (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
 9627|    460|    }
 9628|    460|#line 9629 "MachineIndependent/glslang_tab.cpp"
 9629|    460|    break;
 9630|       |
 9631|  1.48k|  case 389: /* type_specifier_nonarray: F16SAMPLER2DARRAY  */
  ------------------
  |  Branch (9631:3): [True: 1.48k, False: 12.5M]
  ------------------
 9632|  1.48k|#line 2761 "MachineIndependent/glslang.y"
 9633|  1.48k|                        {
 9634|  1.48k|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  1.48k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  1.48k|#define parseContext (*pParseContext)
  ------------------
 9635|  1.48k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.48k|#define parseContext (*pParseContext)
  ------------------
 9636|  1.48k|        (yyval.interm.type).basicType = EbtSampler;
 9637|  1.48k|        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
 9638|  1.48k|    }
 9639|  1.48k|#line 9640 "MachineIndependent/glslang_tab.cpp"
 9640|  1.48k|    break;
 9641|       |
 9642|    420|  case 390: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW  */
  ------------------
  |  Branch (9642:3): [True: 420, False: 12.5M]
  ------------------
 9643|    420|#line 2767 "MachineIndependent/glslang.y"
 9644|    420|                              {
 9645|    420|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    420|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    420|#define parseContext (*pParseContext)
  ------------------
 9646|    420|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    420|#define parseContext (*pParseContext)
  ------------------
 9647|    420|        (yyval.interm.type).basicType = EbtSampler;
 9648|    420|        (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
 9649|    420|    }
 9650|    420|#line 9651 "MachineIndependent/glslang_tab.cpp"
 9651|    420|    break;
 9652|       |
 9653|    440|  case 391: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW  */
  ------------------
  |  Branch (9653:3): [True: 440, False: 12.5M]
  ------------------
 9654|    440|#line 2773 "MachineIndependent/glslang.y"
 9655|    440|                              {
 9656|    440|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    440|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    440|#define parseContext (*pParseContext)
  ------------------
 9657|    440|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    440|#define parseContext (*pParseContext)
  ------------------
 9658|    440|        (yyval.interm.type).basicType = EbtSampler;
 9659|    440|        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
 9660|    440|    }
 9661|    440|#line 9662 "MachineIndependent/glslang_tab.cpp"
 9662|    440|    break;
 9663|       |
 9664|    640|  case 392: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY  */
  ------------------
  |  Branch (9664:3): [True: 640, False: 12.5M]
  ------------------
 9665|    640|#line 2779 "MachineIndependent/glslang.y"
 9666|    640|                          {
 9667|    640|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    640|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    640|#define parseContext (*pParseContext)
  ------------------
 9668|    640|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    640|#define parseContext (*pParseContext)
  ------------------
 9669|    640|        (yyval.interm.type).basicType = EbtSampler;
 9670|    640|        (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
 9671|    640|    }
 9672|    640|#line 9673 "MachineIndependent/glslang_tab.cpp"
 9673|    640|    break;
 9674|       |
 9675|    260|  case 393: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW  */
  ------------------
  |  Branch (9675:3): [True: 260, False: 12.5M]
  ------------------
 9676|    260|#line 2785 "MachineIndependent/glslang.y"
 9677|    260|                                {
 9678|    260|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    260|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    260|#define parseContext (*pParseContext)
  ------------------
 9679|    260|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    260|#define parseContext (*pParseContext)
  ------------------
 9680|    260|        (yyval.interm.type).basicType = EbtSampler;
 9681|    260|        (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
 9682|    260|    }
 9683|    260|#line 9684 "MachineIndependent/glslang_tab.cpp"
 9684|    260|    break;
 9685|       |
 9686|  3.55k|  case 394: /* type_specifier_nonarray: ISAMPLER1D  */
  ------------------
  |  Branch (9686:3): [True: 3.55k, False: 12.5M]
  ------------------
 9687|  3.55k|#line 2791 "MachineIndependent/glslang.y"
 9688|  3.55k|                 {
 9689|  3.55k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  3.55k|#define parseContext (*pParseContext)
  ------------------
 9690|  3.55k|        (yyval.interm.type).basicType = EbtSampler;
 9691|  3.55k|        (yyval.interm.type).sampler.set(EbtInt, Esd1D);
 9692|  3.55k|    }
 9693|  3.55k|#line 9694 "MachineIndependent/glslang_tab.cpp"
 9694|  3.55k|    break;
 9695|       |
 9696|  4.59k|  case 395: /* type_specifier_nonarray: ISAMPLER2D  */
  ------------------
  |  Branch (9696:3): [True: 4.59k, False: 12.5M]
  ------------------
 9697|  4.59k|#line 2796 "MachineIndependent/glslang.y"
 9698|  4.59k|                 {
 9699|  4.59k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  4.59k|#define parseContext (*pParseContext)
  ------------------
 9700|  4.59k|        (yyval.interm.type).basicType = EbtSampler;
 9701|  4.59k|        (yyval.interm.type).sampler.set(EbtInt, Esd2D);
 9702|  4.59k|    }
 9703|  4.59k|#line 9704 "MachineIndependent/glslang_tab.cpp"
 9704|  4.59k|    break;
 9705|       |
 9706|  2.66k|  case 396: /* type_specifier_nonarray: ISAMPLER3D  */
  ------------------
  |  Branch (9706:3): [True: 2.66k, False: 12.5M]
  ------------------
 9707|  2.66k|#line 2801 "MachineIndependent/glslang.y"
 9708|  2.66k|                 {
 9709|  2.66k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  2.66k|#define parseContext (*pParseContext)
  ------------------
 9710|  2.66k|        (yyval.interm.type).basicType = EbtSampler;
 9711|  2.66k|        (yyval.interm.type).sampler.set(EbtInt, Esd3D);
 9712|  2.66k|    }
 9713|  2.66k|#line 9714 "MachineIndependent/glslang_tab.cpp"
 9714|  2.66k|    break;
 9715|       |
 9716|    979|  case 397: /* type_specifier_nonarray: ISAMPLERCUBE  */
  ------------------
  |  Branch (9716:3): [True: 979, False: 12.5M]
  ------------------
 9717|    979|#line 2806 "MachineIndependent/glslang.y"
 9718|    979|                   {
 9719|    979|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    979|#define parseContext (*pParseContext)
  ------------------
 9720|    979|        (yyval.interm.type).basicType = EbtSampler;
 9721|    979|        (yyval.interm.type).sampler.set(EbtInt, EsdCube);
 9722|    979|    }
 9723|    979|#line 9724 "MachineIndependent/glslang_tab.cpp"
 9724|    979|    break;
 9725|       |
 9726|  2.46k|  case 398: /* type_specifier_nonarray: ISAMPLER2DARRAY  */
  ------------------
  |  Branch (9726:3): [True: 2.46k, False: 12.5M]
  ------------------
 9727|  2.46k|#line 2811 "MachineIndependent/glslang.y"
 9728|  2.46k|                      {
 9729|  2.46k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  2.46k|#define parseContext (*pParseContext)
  ------------------
 9730|  2.46k|        (yyval.interm.type).basicType = EbtSampler;
 9731|  2.46k|        (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
 9732|  2.46k|    }
 9733|  2.46k|#line 9734 "MachineIndependent/glslang_tab.cpp"
 9734|  2.46k|    break;
 9735|       |
 9736|  4.59k|  case 399: /* type_specifier_nonarray: USAMPLER2D  */
  ------------------
  |  Branch (9736:3): [True: 4.59k, False: 12.5M]
  ------------------
 9737|  4.59k|#line 2816 "MachineIndependent/glslang.y"
 9738|  4.59k|                 {
 9739|  4.59k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  4.59k|#define parseContext (*pParseContext)
  ------------------
 9740|  4.59k|        (yyval.interm.type).basicType = EbtSampler;
 9741|  4.59k|        (yyval.interm.type).sampler.set(EbtUint, Esd2D);
 9742|  4.59k|    }
 9743|  4.59k|#line 9744 "MachineIndependent/glslang_tab.cpp"
 9744|  4.59k|    break;
 9745|       |
 9746|  2.66k|  case 400: /* type_specifier_nonarray: USAMPLER3D  */
  ------------------
  |  Branch (9746:3): [True: 2.66k, False: 12.5M]
  ------------------
 9747|  2.66k|#line 2821 "MachineIndependent/glslang.y"
 9748|  2.66k|                 {
 9749|  2.66k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  2.66k|#define parseContext (*pParseContext)
  ------------------
 9750|  2.66k|        (yyval.interm.type).basicType = EbtSampler;
 9751|  2.66k|        (yyval.interm.type).sampler.set(EbtUint, Esd3D);
 9752|  2.66k|    }
 9753|  2.66k|#line 9754 "MachineIndependent/glslang_tab.cpp"
 9754|  2.66k|    break;
 9755|       |
 9756|    979|  case 401: /* type_specifier_nonarray: USAMPLERCUBE  */
  ------------------
  |  Branch (9756:3): [True: 979, False: 12.5M]
  ------------------
 9757|    979|#line 2826 "MachineIndependent/glslang.y"
 9758|    979|                   {
 9759|    979|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    979|#define parseContext (*pParseContext)
  ------------------
 9760|    979|        (yyval.interm.type).basicType = EbtSampler;
 9761|    979|        (yyval.interm.type).sampler.set(EbtUint, EsdCube);
 9762|    979|    }
 9763|    979|#line 9764 "MachineIndependent/glslang_tab.cpp"
 9764|    979|    break;
 9765|       |
 9766|  1.42k|  case 402: /* type_specifier_nonarray: ISAMPLER1DARRAY  */
  ------------------
  |  Branch (9766:3): [True: 1.42k, False: 12.5M]
  ------------------
 9767|  1.42k|#line 2831 "MachineIndependent/glslang.y"
 9768|  1.42k|                      {
 9769|  1.42k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.42k|#define parseContext (*pParseContext)
  ------------------
 9770|  1.42k|        (yyval.interm.type).basicType = EbtSampler;
 9771|  1.42k|        (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
 9772|  1.42k|    }
 9773|  1.42k|#line 9774 "MachineIndependent/glslang_tab.cpp"
 9774|  1.42k|    break;
 9775|       |
 9776|    979|  case 403: /* type_specifier_nonarray: ISAMPLERCUBEARRAY  */
  ------------------
  |  Branch (9776:3): [True: 979, False: 12.5M]
  ------------------
 9777|    979|#line 2836 "MachineIndependent/glslang.y"
 9778|    979|                        {
 9779|    979|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    979|#define parseContext (*pParseContext)
  ------------------
 9780|    979|        (yyval.interm.type).basicType = EbtSampler;
 9781|    979|        (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
 9782|    979|    }
 9783|    979|#line 9784 "MachineIndependent/glslang_tab.cpp"
 9784|    979|    break;
 9785|       |
 9786|  3.55k|  case 404: /* type_specifier_nonarray: USAMPLER1D  */
  ------------------
  |  Branch (9786:3): [True: 3.55k, False: 12.5M]
  ------------------
 9787|  3.55k|#line 2841 "MachineIndependent/glslang.y"
 9788|  3.55k|                 {
 9789|  3.55k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  3.55k|#define parseContext (*pParseContext)
  ------------------
 9790|  3.55k|        (yyval.interm.type).basicType = EbtSampler;
 9791|  3.55k|        (yyval.interm.type).sampler.set(EbtUint, Esd1D);
 9792|  3.55k|    }
 9793|  3.55k|#line 9794 "MachineIndependent/glslang_tab.cpp"
 9794|  3.55k|    break;
 9795|       |
 9796|  1.42k|  case 405: /* type_specifier_nonarray: USAMPLER1DARRAY  */
  ------------------
  |  Branch (9796:3): [True: 1.42k, False: 12.5M]
  ------------------
 9797|  1.42k|#line 2846 "MachineIndependent/glslang.y"
 9798|  1.42k|                      {
 9799|  1.42k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.42k|#define parseContext (*pParseContext)
  ------------------
 9800|  1.42k|        (yyval.interm.type).basicType = EbtSampler;
 9801|  1.42k|        (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
 9802|  1.42k|    }
 9803|  1.42k|#line 9804 "MachineIndependent/glslang_tab.cpp"
 9804|  1.42k|    break;
 9805|       |
 9806|    979|  case 406: /* type_specifier_nonarray: USAMPLERCUBEARRAY  */
  ------------------
  |  Branch (9806:3): [True: 979, False: 12.5M]
  ------------------
 9807|    979|#line 2851 "MachineIndependent/glslang.y"
 9808|    979|                        {
 9809|    979|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    979|#define parseContext (*pParseContext)
  ------------------
 9810|    979|        (yyval.interm.type).basicType = EbtSampler;
 9811|    979|        (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
 9812|    979|    }
 9813|    979|#line 9814 "MachineIndependent/glslang_tab.cpp"
 9814|    979|    break;
 9815|       |
 9816|    105|  case 407: /* type_specifier_nonarray: TEXTURECUBEARRAY  */
  ------------------
  |  Branch (9816:3): [True: 105, False: 12.5M]
  ------------------
 9817|    105|#line 2856 "MachineIndependent/glslang.y"
 9818|    105|                       {
 9819|    105|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    105|#define parseContext (*pParseContext)
  ------------------
 9820|    105|        (yyval.interm.type).basicType = EbtSampler;
 9821|    105|        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
 9822|    105|    }
 9823|    105|#line 9824 "MachineIndependent/glslang_tab.cpp"
 9824|    105|    break;
 9825|       |
 9826|     99|  case 408: /* type_specifier_nonarray: ITEXTURECUBEARRAY  */
  ------------------
  |  Branch (9826:3): [True: 99, False: 12.5M]
  ------------------
 9827|     99|#line 2861 "MachineIndependent/glslang.y"
 9828|     99|                        {
 9829|     99|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     99|#define parseContext (*pParseContext)
  ------------------
 9830|     99|        (yyval.interm.type).basicType = EbtSampler;
 9831|     99|        (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
 9832|     99|    }
 9833|     99|#line 9834 "MachineIndependent/glslang_tab.cpp"
 9834|     99|    break;
 9835|       |
 9836|     99|  case 409: /* type_specifier_nonarray: UTEXTURECUBEARRAY  */
  ------------------
  |  Branch (9836:3): [True: 99, False: 12.5M]
  ------------------
 9837|     99|#line 2866 "MachineIndependent/glslang.y"
 9838|     99|                        {
 9839|     99|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     99|#define parseContext (*pParseContext)
  ------------------
 9840|     99|        (yyval.interm.type).basicType = EbtSampler;
 9841|     99|        (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
 9842|     99|    }
 9843|     99|#line 9844 "MachineIndependent/glslang_tab.cpp"
 9844|     99|    break;
 9845|       |
 9846|  2.46k|  case 410: /* type_specifier_nonarray: USAMPLER2DARRAY  */
  ------------------
  |  Branch (9846:3): [True: 2.46k, False: 12.5M]
  ------------------
 9847|  2.46k|#line 2871 "MachineIndependent/glslang.y"
 9848|  2.46k|                      {
 9849|  2.46k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  2.46k|#define parseContext (*pParseContext)
  ------------------
 9850|  2.46k|        (yyval.interm.type).basicType = EbtSampler;
 9851|  2.46k|        (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
 9852|  2.46k|    }
 9853|  2.46k|#line 9854 "MachineIndependent/glslang_tab.cpp"
 9854|  2.46k|    break;
 9855|       |
 9856|    303|  case 411: /* type_specifier_nonarray: TEXTURE2D  */
  ------------------
  |  Branch (9856:3): [True: 303, False: 12.5M]
  ------------------
 9857|    303|#line 2876 "MachineIndependent/glslang.y"
 9858|    303|                {
 9859|    303|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    303|#define parseContext (*pParseContext)
  ------------------
 9860|    303|        (yyval.interm.type).basicType = EbtSampler;
 9861|    303|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
 9862|    303|    }
 9863|    303|#line 9864 "MachineIndependent/glslang_tab.cpp"
 9864|    303|    break;
 9865|       |
 9866|    303|  case 412: /* type_specifier_nonarray: TEXTURE3D  */
  ------------------
  |  Branch (9866:3): [True: 303, False: 12.5M]
  ------------------
 9867|    303|#line 2881 "MachineIndependent/glslang.y"
 9868|    303|                {
 9869|    303|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    303|#define parseContext (*pParseContext)
  ------------------
 9870|    303|        (yyval.interm.type).basicType = EbtSampler;
 9871|    303|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
 9872|    303|    }
 9873|    303|#line 9874 "MachineIndependent/glslang_tab.cpp"
 9874|    303|    break;
 9875|       |
 9876|    303|  case 413: /* type_specifier_nonarray: TEXTURE2DARRAY  */
  ------------------
  |  Branch (9876:3): [True: 303, False: 12.5M]
  ------------------
 9877|    303|#line 2886 "MachineIndependent/glslang.y"
 9878|    303|                     {
 9879|    303|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    303|#define parseContext (*pParseContext)
  ------------------
 9880|    303|        (yyval.interm.type).basicType = EbtSampler;
 9881|    303|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
 9882|    303|    }
 9883|    303|#line 9884 "MachineIndependent/glslang_tab.cpp"
 9884|    303|    break;
 9885|       |
 9886|    105|  case 414: /* type_specifier_nonarray: TEXTURECUBE  */
  ------------------
  |  Branch (9886:3): [True: 105, False: 12.5M]
  ------------------
 9887|    105|#line 2891 "MachineIndependent/glslang.y"
 9888|    105|                  {
 9889|    105|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    105|#define parseContext (*pParseContext)
  ------------------
 9890|    105|        (yyval.interm.type).basicType = EbtSampler;
 9891|    105|        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
 9892|    105|    }
 9893|    105|#line 9894 "MachineIndependent/glslang_tab.cpp"
 9894|    105|    break;
 9895|       |
 9896|    297|  case 415: /* type_specifier_nonarray: ITEXTURE2D  */
  ------------------
  |  Branch (9896:3): [True: 297, False: 12.5M]
  ------------------
 9897|    297|#line 2896 "MachineIndependent/glslang.y"
 9898|    297|                 {
 9899|    297|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    297|#define parseContext (*pParseContext)
  ------------------
 9900|    297|        (yyval.interm.type).basicType = EbtSampler;
 9901|    297|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
 9902|    297|    }
 9903|    297|#line 9904 "MachineIndependent/glslang_tab.cpp"
 9904|    297|    break;
 9905|       |
 9906|    297|  case 416: /* type_specifier_nonarray: ITEXTURE3D  */
  ------------------
  |  Branch (9906:3): [True: 297, False: 12.5M]
  ------------------
 9907|    297|#line 2901 "MachineIndependent/glslang.y"
 9908|    297|                 {
 9909|    297|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    297|#define parseContext (*pParseContext)
  ------------------
 9910|    297|        (yyval.interm.type).basicType = EbtSampler;
 9911|    297|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
 9912|    297|    }
 9913|    297|#line 9914 "MachineIndependent/glslang_tab.cpp"
 9914|    297|    break;
 9915|       |
 9916|     99|  case 417: /* type_specifier_nonarray: ITEXTURECUBE  */
  ------------------
  |  Branch (9916:3): [True: 99, False: 12.5M]
  ------------------
 9917|     99|#line 2906 "MachineIndependent/glslang.y"
 9918|     99|                   {
 9919|     99|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     99|#define parseContext (*pParseContext)
  ------------------
 9920|     99|        (yyval.interm.type).basicType = EbtSampler;
 9921|     99|        (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
 9922|     99|    }
 9923|     99|#line 9924 "MachineIndependent/glslang_tab.cpp"
 9924|     99|    break;
 9925|       |
 9926|    297|  case 418: /* type_specifier_nonarray: ITEXTURE2DARRAY  */
  ------------------
  |  Branch (9926:3): [True: 297, False: 12.5M]
  ------------------
 9927|    297|#line 2911 "MachineIndependent/glslang.y"
 9928|    297|                      {
 9929|    297|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    297|#define parseContext (*pParseContext)
  ------------------
 9930|    297|        (yyval.interm.type).basicType = EbtSampler;
 9931|    297|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
 9932|    297|    }
 9933|    297|#line 9934 "MachineIndependent/glslang_tab.cpp"
 9934|    297|    break;
 9935|       |
 9936|    297|  case 419: /* type_specifier_nonarray: UTEXTURE2D  */
  ------------------
  |  Branch (9936:3): [True: 297, False: 12.5M]
  ------------------
 9937|    297|#line 2916 "MachineIndependent/glslang.y"
 9938|    297|                 {
 9939|    297|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    297|#define parseContext (*pParseContext)
  ------------------
 9940|    297|        (yyval.interm.type).basicType = EbtSampler;
 9941|    297|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
 9942|    297|    }
 9943|    297|#line 9944 "MachineIndependent/glslang_tab.cpp"
 9944|    297|    break;
 9945|       |
 9946|    297|  case 420: /* type_specifier_nonarray: UTEXTURE3D  */
  ------------------
  |  Branch (9946:3): [True: 297, False: 12.5M]
  ------------------
 9947|    297|#line 2921 "MachineIndependent/glslang.y"
 9948|    297|                 {
 9949|    297|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    297|#define parseContext (*pParseContext)
  ------------------
 9950|    297|        (yyval.interm.type).basicType = EbtSampler;
 9951|    297|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
 9952|    297|    }
 9953|    297|#line 9954 "MachineIndependent/glslang_tab.cpp"
 9954|    297|    break;
 9955|       |
 9956|     99|  case 421: /* type_specifier_nonarray: UTEXTURECUBE  */
  ------------------
  |  Branch (9956:3): [True: 99, False: 12.5M]
  ------------------
 9957|     99|#line 2926 "MachineIndependent/glslang.y"
 9958|     99|                   {
 9959|     99|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     99|#define parseContext (*pParseContext)
  ------------------
 9960|     99|        (yyval.interm.type).basicType = EbtSampler;
 9961|     99|        (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
 9962|     99|    }
 9963|     99|#line 9964 "MachineIndependent/glslang_tab.cpp"
 9964|     99|    break;
 9965|       |
 9966|    297|  case 422: /* type_specifier_nonarray: UTEXTURE2DARRAY  */
  ------------------
  |  Branch (9966:3): [True: 297, False: 12.5M]
  ------------------
 9967|    297|#line 2931 "MachineIndependent/glslang.y"
 9968|    297|                      {
 9969|    297|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    297|#define parseContext (*pParseContext)
  ------------------
 9970|    297|        (yyval.interm.type).basicType = EbtSampler;
 9971|    297|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
 9972|    297|    }
 9973|    297|#line 9974 "MachineIndependent/glslang_tab.cpp"
 9974|    297|    break;
 9975|       |
 9976|      6|  case 423: /* type_specifier_nonarray: SAMPLER  */
  ------------------
  |  Branch (9976:3): [True: 6, False: 12.5M]
  ------------------
 9977|      6|#line 2936 "MachineIndependent/glslang.y"
 9978|      6|              {
 9979|      6|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      6|#define parseContext (*pParseContext)
  ------------------
 9980|      6|        (yyval.interm.type).basicType = EbtSampler;
 9981|      6|        (yyval.interm.type).sampler.setPureSampler(false);
 9982|      6|    }
 9983|      6|#line 9984 "MachineIndependent/glslang_tab.cpp"
 9984|      6|    break;
 9985|       |
 9986|      6|  case 424: /* type_specifier_nonarray: SAMPLERSHADOW  */
  ------------------
  |  Branch (9986:3): [True: 6, False: 12.5M]
  ------------------
 9987|      6|#line 2941 "MachineIndependent/glslang.y"
 9988|      6|                    {
 9989|      6|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      6|#define parseContext (*pParseContext)
  ------------------
 9990|      6|        (yyval.interm.type).basicType = EbtSampler;
 9991|      6|        (yyval.interm.type).sampler.setPureSampler(true);
 9992|      6|    }
 9993|      6|#line 9994 "MachineIndependent/glslang_tab.cpp"
 9994|      6|    break;
 9995|       |
 9996|  2.90k|  case 425: /* type_specifier_nonarray: SAMPLER2DRECT  */
  ------------------
  |  Branch (9996:3): [True: 2.90k, False: 12.5M]
  ------------------
 9997|  2.90k|#line 2946 "MachineIndependent/glslang.y"
 9998|  2.90k|                    {
 9999|  2.90k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  2.90k|#define parseContext (*pParseContext)
  ------------------
10000|  2.90k|        (yyval.interm.type).basicType = EbtSampler;
10001|  2.90k|        (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
10002|  2.90k|    }
10003|  2.90k|#line 10004 "MachineIndependent/glslang_tab.cpp"
10004|  2.90k|    break;
10005|       |
10006|  1.27k|  case 426: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW  */
  ------------------
  |  Branch (10006:3): [True: 1.27k, False: 12.5M]
  ------------------
10007|  1.27k|#line 2951 "MachineIndependent/glslang.y"
10008|  1.27k|                          {
10009|  1.27k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.27k|#define parseContext (*pParseContext)
  ------------------
10010|  1.27k|        (yyval.interm.type).basicType = EbtSampler;
10011|  1.27k|        (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
10012|  1.27k|    }
10013|  1.27k|#line 10014 "MachineIndependent/glslang_tab.cpp"
10014|  1.27k|    break;
10015|       |
10016|    625|  case 427: /* type_specifier_nonarray: F16SAMPLER2DRECT  */
  ------------------
  |  Branch (10016:3): [True: 625, False: 12.5M]
  ------------------
10017|    625|#line 2956 "MachineIndependent/glslang.y"
10018|    625|                       {
10019|    625|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    625|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    625|#define parseContext (*pParseContext)
  ------------------
10020|    625|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    625|#define parseContext (*pParseContext)
  ------------------
10021|    625|        (yyval.interm.type).basicType = EbtSampler;
10022|    625|        (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
10023|    625|    }
10024|    625|#line 10025 "MachineIndependent/glslang_tab.cpp"
10025|    625|    break;
10026|       |
10027|    385|  case 428: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW  */
  ------------------
  |  Branch (10027:3): [True: 385, False: 12.5M]
  ------------------
10028|    385|#line 2962 "MachineIndependent/glslang.y"
10029|    385|                             {
10030|    385|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    385|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    385|#define parseContext (*pParseContext)
  ------------------
10031|    385|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    385|#define parseContext (*pParseContext)
  ------------------
10032|    385|        (yyval.interm.type).basicType = EbtSampler;
10033|    385|        (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
10034|    385|    }
10035|    385|#line 10036 "MachineIndependent/glslang_tab.cpp"
10036|    385|    break;
10037|       |
10038|  2.89k|  case 429: /* type_specifier_nonarray: ISAMPLER2DRECT  */
  ------------------
  |  Branch (10038:3): [True: 2.89k, False: 12.5M]
  ------------------
10039|  2.89k|#line 2968 "MachineIndependent/glslang.y"
10040|  2.89k|                     {
10041|  2.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  2.89k|#define parseContext (*pParseContext)
  ------------------
10042|  2.89k|        (yyval.interm.type).basicType = EbtSampler;
10043|  2.89k|        (yyval.interm.type).sampler.set(EbtInt, EsdRect);
10044|  2.89k|    }
10045|  2.89k|#line 10046 "MachineIndependent/glslang_tab.cpp"
10046|  2.89k|    break;
10047|       |
10048|  2.89k|  case 430: /* type_specifier_nonarray: USAMPLER2DRECT  */
  ------------------
  |  Branch (10048:3): [True: 2.89k, False: 12.5M]
  ------------------
10049|  2.89k|#line 2973 "MachineIndependent/glslang.y"
10050|  2.89k|                     {
10051|  2.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  2.89k|#define parseContext (*pParseContext)
  ------------------
10052|  2.89k|        (yyval.interm.type).basicType = EbtSampler;
10053|  2.89k|        (yyval.interm.type).sampler.set(EbtUint, EsdRect);
10054|  2.89k|    }
10055|  2.89k|#line 10056 "MachineIndependent/glslang_tab.cpp"
10056|  2.89k|    break;
10057|       |
10058|    194|  case 431: /* type_specifier_nonarray: SAMPLERBUFFER  */
  ------------------
  |  Branch (10058:3): [True: 194, False: 12.5M]
  ------------------
10059|    194|#line 2978 "MachineIndependent/glslang.y"
10060|    194|                    {
10061|    194|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    194|#define parseContext (*pParseContext)
  ------------------
10062|    194|        (yyval.interm.type).basicType = EbtSampler;
10063|    194|        (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
10064|    194|    }
10065|    194|#line 10066 "MachineIndependent/glslang_tab.cpp"
10066|    194|    break;
10067|       |
10068|     15|  case 432: /* type_specifier_nonarray: F16SAMPLERBUFFER  */
  ------------------
  |  Branch (10068:3): [True: 15, False: 12.5M]
  ------------------
10069|     15|#line 2983 "MachineIndependent/glslang.y"
10070|     15|                       {
10071|     15|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     15|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     15|#define parseContext (*pParseContext)
  ------------------
10072|     15|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     15|#define parseContext (*pParseContext)
  ------------------
10073|     15|        (yyval.interm.type).basicType = EbtSampler;
10074|     15|        (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
10075|     15|    }
10076|     15|#line 10077 "MachineIndependent/glslang_tab.cpp"
10077|     15|    break;
10078|       |
10079|    188|  case 433: /* type_specifier_nonarray: ISAMPLERBUFFER  */
  ------------------
  |  Branch (10079:3): [True: 188, False: 12.5M]
  ------------------
10080|    188|#line 2989 "MachineIndependent/glslang.y"
10081|    188|                     {
10082|    188|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    188|#define parseContext (*pParseContext)
  ------------------
10083|    188|        (yyval.interm.type).basicType = EbtSampler;
10084|    188|        (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
10085|    188|    }
10086|    188|#line 10087 "MachineIndependent/glslang_tab.cpp"
10087|    188|    break;
10088|       |
10089|    188|  case 434: /* type_specifier_nonarray: USAMPLERBUFFER  */
  ------------------
  |  Branch (10089:3): [True: 188, False: 12.5M]
  ------------------
10090|    188|#line 2994 "MachineIndependent/glslang.y"
10091|    188|                     {
10092|    188|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    188|#define parseContext (*pParseContext)
  ------------------
10093|    188|        (yyval.interm.type).basicType = EbtSampler;
10094|    188|        (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
10095|    188|    }
10096|    188|#line 10097 "MachineIndependent/glslang_tab.cpp"
10097|    188|    break;
10098|       |
10099|    214|  case 435: /* type_specifier_nonarray: SAMPLER2DMS  */
  ------------------
  |  Branch (10099:3): [True: 214, False: 12.5M]
  ------------------
10100|    214|#line 2999 "MachineIndependent/glslang.y"
10101|    214|                  {
10102|    214|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    214|#define parseContext (*pParseContext)
  ------------------
10103|    214|        (yyval.interm.type).basicType = EbtSampler;
10104|    214|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
10105|    214|    }
10106|    214|#line 10107 "MachineIndependent/glslang_tab.cpp"
10107|    214|    break;
10108|       |
10109|     30|  case 436: /* type_specifier_nonarray: F16SAMPLER2DMS  */
  ------------------
  |  Branch (10109:3): [True: 30, False: 12.5M]
  ------------------
10110|     30|#line 3004 "MachineIndependent/glslang.y"
10111|     30|                     {
10112|     30|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
10113|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
10114|     30|        (yyval.interm.type).basicType = EbtSampler;
10115|     30|        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
10116|     30|    }
10117|     30|#line 10118 "MachineIndependent/glslang_tab.cpp"
10118|     30|    break;
10119|       |
10120|    208|  case 437: /* type_specifier_nonarray: ISAMPLER2DMS  */
  ------------------
  |  Branch (10120:3): [True: 208, False: 12.5M]
  ------------------
10121|    208|#line 3010 "MachineIndependent/glslang.y"
10122|    208|                   {
10123|    208|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    208|#define parseContext (*pParseContext)
  ------------------
10124|    208|        (yyval.interm.type).basicType = EbtSampler;
10125|    208|        (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
10126|    208|    }
10127|    208|#line 10128 "MachineIndependent/glslang_tab.cpp"
10128|    208|    break;
10129|       |
10130|    208|  case 438: /* type_specifier_nonarray: USAMPLER2DMS  */
  ------------------
  |  Branch (10130:3): [True: 208, False: 12.5M]
  ------------------
10131|    208|#line 3015 "MachineIndependent/glslang.y"
10132|    208|                   {
10133|    208|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    208|#define parseContext (*pParseContext)
  ------------------
10134|    208|        (yyval.interm.type).basicType = EbtSampler;
10135|    208|        (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
10136|    208|    }
10137|    208|#line 10138 "MachineIndependent/glslang_tab.cpp"
10138|    208|    break;
10139|       |
10140|    214|  case 439: /* type_specifier_nonarray: SAMPLER2DMSARRAY  */
  ------------------
  |  Branch (10140:3): [True: 214, False: 12.5M]
  ------------------
10141|    214|#line 3020 "MachineIndependent/glslang.y"
10142|    214|                       {
10143|    214|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    214|#define parseContext (*pParseContext)
  ------------------
10144|    214|        (yyval.interm.type).basicType = EbtSampler;
10145|    214|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
10146|    214|    }
10147|    214|#line 10148 "MachineIndependent/glslang_tab.cpp"
10148|    214|    break;
10149|       |
10150|     30|  case 440: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY  */
  ------------------
  |  Branch (10150:3): [True: 30, False: 12.5M]
  ------------------
10151|     30|#line 3025 "MachineIndependent/glslang.y"
10152|     30|                          {
10153|     30|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
10154|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
10155|     30|        (yyval.interm.type).basicType = EbtSampler;
10156|     30|        (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
10157|     30|    }
10158|     30|#line 10159 "MachineIndependent/glslang_tab.cpp"
10159|     30|    break;
10160|       |
10161|    208|  case 441: /* type_specifier_nonarray: ISAMPLER2DMSARRAY  */
  ------------------
  |  Branch (10161:3): [True: 208, False: 12.5M]
  ------------------
10162|    208|#line 3031 "MachineIndependent/glslang.y"
10163|    208|                        {
10164|    208|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    208|#define parseContext (*pParseContext)
  ------------------
10165|    208|        (yyval.interm.type).basicType = EbtSampler;
10166|    208|        (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
10167|    208|    }
10168|    208|#line 10169 "MachineIndependent/glslang_tab.cpp"
10169|    208|    break;
10170|       |
10171|    208|  case 442: /* type_specifier_nonarray: USAMPLER2DMSARRAY  */
  ------------------
  |  Branch (10171:3): [True: 208, False: 12.5M]
  ------------------
10172|    208|#line 3036 "MachineIndependent/glslang.y"
10173|    208|                        {
10174|    208|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    208|#define parseContext (*pParseContext)
  ------------------
10175|    208|        (yyval.interm.type).basicType = EbtSampler;
10176|    208|        (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
10177|    208|    }
10178|    208|#line 10179 "MachineIndependent/glslang_tab.cpp"
10179|    208|    break;
10180|       |
10181|    293|  case 443: /* type_specifier_nonarray: TEXTURE1D  */
  ------------------
  |  Branch (10181:3): [True: 293, False: 12.5M]
  ------------------
10182|    293|#line 3041 "MachineIndependent/glslang.y"
10183|    293|                {
10184|    293|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    293|#define parseContext (*pParseContext)
  ------------------
10185|    293|        (yyval.interm.type).basicType = EbtSampler;
10186|    293|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
10187|    293|    }
10188|    293|#line 10189 "MachineIndependent/glslang_tab.cpp"
10189|    293|    break;
10190|       |
10191|     30|  case 444: /* type_specifier_nonarray: F16TEXTURE1D  */
  ------------------
  |  Branch (10191:3): [True: 30, False: 12.5M]
  ------------------
10192|     30|#line 3046 "MachineIndependent/glslang.y"
10193|     30|                   {
10194|     30|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
10195|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
10196|     30|        (yyval.interm.type).basicType = EbtSampler;
10197|     30|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
10198|     30|    }
10199|     30|#line 10200 "MachineIndependent/glslang_tab.cpp"
10200|     30|    break;
10201|       |
10202|     50|  case 445: /* type_specifier_nonarray: F16TEXTURE2D  */
  ------------------
  |  Branch (10202:3): [True: 50, False: 12.5M]
  ------------------
10203|     50|#line 3052 "MachineIndependent/glslang.y"
10204|     50|                   {
10205|     50|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
10206|     50|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
10207|     50|        (yyval.interm.type).basicType = EbtSampler;
10208|     50|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
10209|     50|    }
10210|     50|#line 10211 "MachineIndependent/glslang_tab.cpp"
10211|     50|    break;
10212|       |
10213|     50|  case 446: /* type_specifier_nonarray: F16TEXTURE3D  */
  ------------------
  |  Branch (10213:3): [True: 50, False: 12.5M]
  ------------------
10214|     50|#line 3058 "MachineIndependent/glslang.y"
10215|     50|                   {
10216|     50|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
10217|     50|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
10218|     50|        (yyval.interm.type).basicType = EbtSampler;
10219|     50|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
10220|     50|    }
10221|     50|#line 10222 "MachineIndependent/glslang_tab.cpp"
10222|     50|    break;
10223|       |
10224|     10|  case 447: /* type_specifier_nonarray: F16TEXTURECUBE  */
  ------------------
  |  Branch (10224:3): [True: 10, False: 12.5M]
  ------------------
10225|     10|#line 3064 "MachineIndependent/glslang.y"
10226|     10|                     {
10227|     10|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
10228|     10|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
10229|     10|        (yyval.interm.type).basicType = EbtSampler;
10230|     10|        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
10231|     10|    }
10232|     10|#line 10233 "MachineIndependent/glslang_tab.cpp"
10233|     10|    break;
10234|       |
10235|    293|  case 448: /* type_specifier_nonarray: TEXTURE1DARRAY  */
  ------------------
  |  Branch (10235:3): [True: 293, False: 12.5M]
  ------------------
10236|    293|#line 3070 "MachineIndependent/glslang.y"
10237|    293|                     {
10238|    293|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    293|#define parseContext (*pParseContext)
  ------------------
10239|    293|        (yyval.interm.type).basicType = EbtSampler;
10240|    293|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
10241|    293|    }
10242|    293|#line 10243 "MachineIndependent/glslang_tab.cpp"
10243|    293|    break;
10244|       |
10245|     30|  case 449: /* type_specifier_nonarray: F16TEXTURE1DARRAY  */
  ------------------
  |  Branch (10245:3): [True: 30, False: 12.5M]
  ------------------
10246|     30|#line 3075 "MachineIndependent/glslang.y"
10247|     30|                        {
10248|     30|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
10249|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
10250|     30|        (yyval.interm.type).basicType = EbtSampler;
10251|     30|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
10252|     30|    }
10253|     30|#line 10254 "MachineIndependent/glslang_tab.cpp"
10254|     30|    break;
10255|       |
10256|     50|  case 450: /* type_specifier_nonarray: F16TEXTURE2DARRAY  */
  ------------------
  |  Branch (10256:3): [True: 50, False: 12.5M]
  ------------------
10257|     50|#line 3081 "MachineIndependent/glslang.y"
10258|     50|                        {
10259|     50|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
10260|     50|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     50|#define parseContext (*pParseContext)
  ------------------
10261|     50|        (yyval.interm.type).basicType = EbtSampler;
10262|     50|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
10263|     50|    }
10264|     50|#line 10265 "MachineIndependent/glslang_tab.cpp"
10265|     50|    break;
10266|       |
10267|     10|  case 451: /* type_specifier_nonarray: F16TEXTURECUBEARRAY  */
  ------------------
  |  Branch (10267:3): [True: 10, False: 12.5M]
  ------------------
10268|     10|#line 3087 "MachineIndependent/glslang.y"
10269|     10|                          {
10270|     10|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
10271|     10|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
10272|     10|        (yyval.interm.type).basicType = EbtSampler;
10273|     10|        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
10274|     10|    }
10275|     10|#line 10276 "MachineIndependent/glslang_tab.cpp"
10276|     10|    break;
10277|       |
10278|    287|  case 452: /* type_specifier_nonarray: ITEXTURE1D  */
  ------------------
  |  Branch (10278:3): [True: 287, False: 12.5M]
  ------------------
10279|    287|#line 3093 "MachineIndependent/glslang.y"
10280|    287|                 {
10281|    287|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    287|#define parseContext (*pParseContext)
  ------------------
10282|    287|        (yyval.interm.type).basicType = EbtSampler;
10283|    287|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
10284|    287|    }
10285|    287|#line 10286 "MachineIndependent/glslang_tab.cpp"
10286|    287|    break;
10287|       |
10288|    287|  case 453: /* type_specifier_nonarray: ITEXTURE1DARRAY  */
  ------------------
  |  Branch (10288:3): [True: 287, False: 12.5M]
  ------------------
10289|    287|#line 3098 "MachineIndependent/glslang.y"
10290|    287|                      {
10291|    287|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    287|#define parseContext (*pParseContext)
  ------------------
10292|    287|        (yyval.interm.type).basicType = EbtSampler;
10293|    287|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
10294|    287|    }
10295|    287|#line 10296 "MachineIndependent/glslang_tab.cpp"
10296|    287|    break;
10297|       |
10298|    287|  case 454: /* type_specifier_nonarray: UTEXTURE1D  */
  ------------------
  |  Branch (10298:3): [True: 287, False: 12.5M]
  ------------------
10299|    287|#line 3103 "MachineIndependent/glslang.y"
10300|    287|                 {
10301|    287|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    287|#define parseContext (*pParseContext)
  ------------------
10302|    287|        (yyval.interm.type).basicType = EbtSampler;
10303|    287|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
10304|    287|    }
10305|    287|#line 10306 "MachineIndependent/glslang_tab.cpp"
10306|    287|    break;
10307|       |
10308|    287|  case 455: /* type_specifier_nonarray: UTEXTURE1DARRAY  */
  ------------------
  |  Branch (10308:3): [True: 287, False: 12.5M]
  ------------------
10309|    287|#line 3108 "MachineIndependent/glslang.y"
10310|    287|                      {
10311|    287|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    287|#define parseContext (*pParseContext)
  ------------------
10312|    287|        (yyval.interm.type).basicType = EbtSampler;
10313|    287|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
10314|    287|    }
10315|    287|#line 10316 "MachineIndependent/glslang_tab.cpp"
10316|    287|    break;
10317|       |
10318|    298|  case 456: /* type_specifier_nonarray: TEXTURE2DRECT  */
  ------------------
  |  Branch (10318:3): [True: 298, False: 12.5M]
  ------------------
10319|    298|#line 3113 "MachineIndependent/glslang.y"
10320|    298|                    {
10321|    298|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    298|#define parseContext (*pParseContext)
  ------------------
10322|    298|        (yyval.interm.type).basicType = EbtSampler;
10323|    298|        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
10324|    298|    }
10325|    298|#line 10326 "MachineIndependent/glslang_tab.cpp"
10326|    298|    break;
10327|       |
10328|     45|  case 457: /* type_specifier_nonarray: F16TEXTURE2DRECT  */
  ------------------
  |  Branch (10328:3): [True: 45, False: 12.5M]
  ------------------
10329|     45|#line 3118 "MachineIndependent/glslang.y"
10330|     45|                       {
10331|     45|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     45|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     45|#define parseContext (*pParseContext)
  ------------------
10332|     45|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     45|#define parseContext (*pParseContext)
  ------------------
10333|     45|        (yyval.interm.type).basicType = EbtSampler;
10334|     45|        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect);
10335|     45|    }
10336|     45|#line 10337 "MachineIndependent/glslang_tab.cpp"
10337|     45|    break;
10338|       |
10339|    292|  case 458: /* type_specifier_nonarray: ITEXTURE2DRECT  */
  ------------------
  |  Branch (10339:3): [True: 292, False: 12.5M]
  ------------------
10340|    292|#line 3124 "MachineIndependent/glslang.y"
10341|    292|                     {
10342|    292|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    292|#define parseContext (*pParseContext)
  ------------------
10343|    292|        (yyval.interm.type).basicType = EbtSampler;
10344|    292|        (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
10345|    292|    }
10346|    292|#line 10347 "MachineIndependent/glslang_tab.cpp"
10347|    292|    break;
10348|       |
10349|    292|  case 459: /* type_specifier_nonarray: UTEXTURE2DRECT  */
  ------------------
  |  Branch (10349:3): [True: 292, False: 12.5M]
  ------------------
10350|    292|#line 3129 "MachineIndependent/glslang.y"
10351|    292|                     {
10352|    292|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    292|#define parseContext (*pParseContext)
  ------------------
10353|    292|        (yyval.interm.type).basicType = EbtSampler;
10354|    292|        (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
10355|    292|    }
10356|    292|#line 10357 "MachineIndependent/glslang_tab.cpp"
10357|    292|    break;
10358|       |
10359|    194|  case 460: /* type_specifier_nonarray: TEXTUREBUFFER  */
  ------------------
  |  Branch (10359:3): [True: 194, False: 12.5M]
  ------------------
10360|    194|#line 3134 "MachineIndependent/glslang.y"
10361|    194|                    {
10362|    194|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    194|#define parseContext (*pParseContext)
  ------------------
10363|    194|        (yyval.interm.type).basicType = EbtSampler;
10364|    194|        (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
10365|    194|    }
10366|    194|#line 10367 "MachineIndependent/glslang_tab.cpp"
10367|    194|    break;
10368|       |
10369|     15|  case 461: /* type_specifier_nonarray: F16TEXTUREBUFFER  */
  ------------------
  |  Branch (10369:3): [True: 15, False: 12.5M]
  ------------------
10370|     15|#line 3139 "MachineIndependent/glslang.y"
10371|     15|                       {
10372|     15|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     15|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     15|#define parseContext (*pParseContext)
  ------------------
10373|     15|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     15|#define parseContext (*pParseContext)
  ------------------
10374|     15|        (yyval.interm.type).basicType = EbtSampler;
10375|     15|        (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer);
10376|     15|    }
10377|     15|#line 10378 "MachineIndependent/glslang_tab.cpp"
10378|     15|    break;
10379|       |
10380|    188|  case 462: /* type_specifier_nonarray: ITEXTUREBUFFER  */
  ------------------
  |  Branch (10380:3): [True: 188, False: 12.5M]
  ------------------
10381|    188|#line 3145 "MachineIndependent/glslang.y"
10382|    188|                     {
10383|    188|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    188|#define parseContext (*pParseContext)
  ------------------
10384|    188|        (yyval.interm.type).basicType = EbtSampler;
10385|    188|        (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
10386|    188|    }
10387|    188|#line 10388 "MachineIndependent/glslang_tab.cpp"
10388|    188|    break;
10389|       |
10390|    188|  case 463: /* type_specifier_nonarray: UTEXTUREBUFFER  */
  ------------------
  |  Branch (10390:3): [True: 188, False: 12.5M]
  ------------------
10391|    188|#line 3150 "MachineIndependent/glslang.y"
10392|    188|                     {
10393|    188|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    188|#define parseContext (*pParseContext)
  ------------------
10394|    188|        (yyval.interm.type).basicType = EbtSampler;
10395|    188|        (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
10396|    188|    }
10397|    188|#line 10398 "MachineIndependent/glslang_tab.cpp"
10398|    188|    break;
10399|       |
10400|    204|  case 464: /* type_specifier_nonarray: TEXTURE2DMS  */
  ------------------
  |  Branch (10400:3): [True: 204, False: 12.5M]
  ------------------
10401|    204|#line 3155 "MachineIndependent/glslang.y"
10402|    204|                  {
10403|    204|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    204|#define parseContext (*pParseContext)
  ------------------
10404|    204|        (yyval.interm.type).basicType = EbtSampler;
10405|    204|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
10406|    204|    }
10407|    204|#line 10408 "MachineIndependent/glslang_tab.cpp"
10408|    204|    break;
10409|       |
10410|     30|  case 465: /* type_specifier_nonarray: F16TEXTURE2DMS  */
  ------------------
  |  Branch (10410:3): [True: 30, False: 12.5M]
  ------------------
10411|     30|#line 3160 "MachineIndependent/glslang.y"
10412|     30|                     {
10413|     30|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
10414|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
10415|     30|        (yyval.interm.type).basicType = EbtSampler;
10416|     30|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
10417|     30|    }
10418|     30|#line 10419 "MachineIndependent/glslang_tab.cpp"
10419|     30|    break;
10420|       |
10421|    198|  case 466: /* type_specifier_nonarray: ITEXTURE2DMS  */
  ------------------
  |  Branch (10421:3): [True: 198, False: 12.5M]
  ------------------
10422|    198|#line 3166 "MachineIndependent/glslang.y"
10423|    198|                   {
10424|    198|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    198|#define parseContext (*pParseContext)
  ------------------
10425|    198|        (yyval.interm.type).basicType = EbtSampler;
10426|    198|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
10427|    198|    }
10428|    198|#line 10429 "MachineIndependent/glslang_tab.cpp"
10429|    198|    break;
10430|       |
10431|    198|  case 467: /* type_specifier_nonarray: UTEXTURE2DMS  */
  ------------------
  |  Branch (10431:3): [True: 198, False: 12.5M]
  ------------------
10432|    198|#line 3171 "MachineIndependent/glslang.y"
10433|    198|                   {
10434|    198|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    198|#define parseContext (*pParseContext)
  ------------------
10435|    198|        (yyval.interm.type).basicType = EbtSampler;
10436|    198|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
10437|    198|    }
10438|    198|#line 10439 "MachineIndependent/glslang_tab.cpp"
10439|    198|    break;
10440|       |
10441|    204|  case 468: /* type_specifier_nonarray: TEXTURE2DMSARRAY  */
  ------------------
  |  Branch (10441:3): [True: 204, False: 12.5M]
  ------------------
10442|    204|#line 3176 "MachineIndependent/glslang.y"
10443|    204|                       {
10444|    204|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    204|#define parseContext (*pParseContext)
  ------------------
10445|    204|        (yyval.interm.type).basicType = EbtSampler;
10446|    204|        (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
10447|    204|    }
10448|    204|#line 10449 "MachineIndependent/glslang_tab.cpp"
10449|    204|    break;
10450|       |
10451|     30|  case 469: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY  */
  ------------------
  |  Branch (10451:3): [True: 30, False: 12.5M]
  ------------------
10452|     30|#line 3181 "MachineIndependent/glslang.y"
10453|     30|                          {
10454|     30|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
10455|     30|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     30|#define parseContext (*pParseContext)
  ------------------
10456|     30|        (yyval.interm.type).basicType = EbtSampler;
10457|     30|        (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
10458|     30|    }
10459|     30|#line 10460 "MachineIndependent/glslang_tab.cpp"
10460|     30|    break;
10461|       |
10462|    198|  case 470: /* type_specifier_nonarray: ITEXTURE2DMSARRAY  */
  ------------------
  |  Branch (10462:3): [True: 198, False: 12.5M]
  ------------------
10463|    198|#line 3187 "MachineIndependent/glslang.y"
10464|    198|                        {
10465|    198|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    198|#define parseContext (*pParseContext)
  ------------------
10466|    198|        (yyval.interm.type).basicType = EbtSampler;
10467|    198|        (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
10468|    198|    }
10469|    198|#line 10470 "MachineIndependent/glslang_tab.cpp"
10470|    198|    break;
10471|       |
10472|    198|  case 471: /* type_specifier_nonarray: UTEXTURE2DMSARRAY  */
  ------------------
  |  Branch (10472:3): [True: 198, False: 12.5M]
  ------------------
10473|    198|#line 3192 "MachineIndependent/glslang.y"
10474|    198|                        {
10475|    198|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    198|#define parseContext (*pParseContext)
  ------------------
10476|    198|        (yyval.interm.type).basicType = EbtSampler;
10477|    198|        (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
10478|    198|    }
10479|    198|#line 10480 "MachineIndependent/glslang_tab.cpp"
10480|    198|    break;
10481|       |
10482|    299|  case 472: /* type_specifier_nonarray: IMAGE1D  */
  ------------------
  |  Branch (10482:3): [True: 299, False: 12.5M]
  ------------------
10483|    299|#line 3197 "MachineIndependent/glslang.y"
10484|    299|              {
10485|    299|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    299|#define parseContext (*pParseContext)
  ------------------
10486|    299|        (yyval.interm.type).basicType = EbtSampler;
10487|    299|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
10488|    299|    }
10489|    299|#line 10490 "MachineIndependent/glslang_tab.cpp"
10490|    299|    break;
10491|       |
10492|    115|  case 473: /* type_specifier_nonarray: F16IMAGE1D  */
  ------------------
  |  Branch (10492:3): [True: 115, False: 12.5M]
  ------------------
10493|    115|#line 3202 "MachineIndependent/glslang.y"
10494|    115|                 {
10495|    115|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
10496|    115|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
10497|    115|        (yyval.interm.type).basicType = EbtSampler;
10498|    115|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D);
10499|    115|    }
10500|    115|#line 10501 "MachineIndependent/glslang_tab.cpp"
10501|    115|    break;
10502|       |
10503|  1.89k|  case 474: /* type_specifier_nonarray: IIMAGE1D  */
  ------------------
  |  Branch (10503:3): [True: 1.89k, False: 12.5M]
  ------------------
10504|  1.89k|#line 3208 "MachineIndependent/glslang.y"
10505|  1.89k|               {
10506|  1.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.89k|#define parseContext (*pParseContext)
  ------------------
10507|  1.89k|        (yyval.interm.type).basicType = EbtSampler;
10508|  1.89k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
10509|  1.89k|    }
10510|  1.89k|#line 10511 "MachineIndependent/glslang_tab.cpp"
10511|  1.89k|    break;
10512|       |
10513|  1.89k|  case 475: /* type_specifier_nonarray: UIMAGE1D  */
  ------------------
  |  Branch (10513:3): [True: 1.89k, False: 12.5M]
  ------------------
10514|  1.89k|#line 3213 "MachineIndependent/glslang.y"
10515|  1.89k|               {
10516|  1.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.89k|#define parseContext (*pParseContext)
  ------------------
10517|  1.89k|        (yyval.interm.type).basicType = EbtSampler;
10518|  1.89k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
10519|  1.89k|    }
10520|  1.89k|#line 10521 "MachineIndependent/glslang_tab.cpp"
10521|  1.89k|    break;
10522|       |
10523|    309|  case 476: /* type_specifier_nonarray: IMAGE2D  */
  ------------------
  |  Branch (10523:3): [True: 309, False: 12.5M]
  ------------------
10524|    309|#line 3218 "MachineIndependent/glslang.y"
10525|    309|              {
10526|    309|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    309|#define parseContext (*pParseContext)
  ------------------
10527|    309|        (yyval.interm.type).basicType = EbtSampler;
10528|    309|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
10529|    309|    }
10530|    309|#line 10531 "MachineIndependent/glslang_tab.cpp"
10531|    309|    break;
10532|       |
10533|    125|  case 477: /* type_specifier_nonarray: F16IMAGE2D  */
  ------------------
  |  Branch (10533:3): [True: 125, False: 12.5M]
  ------------------
10534|    125|#line 3223 "MachineIndependent/glslang.y"
10535|    125|                 {
10536|    125|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10537|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10538|    125|        (yyval.interm.type).basicType = EbtSampler;
10539|    125|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D);
10540|    125|    }
10541|    125|#line 10542 "MachineIndependent/glslang_tab.cpp"
10542|    125|    break;
10543|       |
10544|  1.90k|  case 478: /* type_specifier_nonarray: IIMAGE2D  */
  ------------------
  |  Branch (10544:3): [True: 1.90k, False: 12.5M]
  ------------------
10545|  1.90k|#line 3229 "MachineIndependent/glslang.y"
10546|  1.90k|               {
10547|  1.90k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.90k|#define parseContext (*pParseContext)
  ------------------
10548|  1.90k|        (yyval.interm.type).basicType = EbtSampler;
10549|  1.90k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
10550|  1.90k|    }
10551|  1.90k|#line 10552 "MachineIndependent/glslang_tab.cpp"
10552|  1.90k|    break;
10553|       |
10554|  1.90k|  case 479: /* type_specifier_nonarray: UIMAGE2D  */
  ------------------
  |  Branch (10554:3): [True: 1.90k, False: 12.5M]
  ------------------
10555|  1.90k|#line 3234 "MachineIndependent/glslang.y"
10556|  1.90k|               {
10557|  1.90k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.90k|#define parseContext (*pParseContext)
  ------------------
10558|  1.90k|        (yyval.interm.type).basicType = EbtSampler;
10559|  1.90k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
10560|  1.90k|    }
10561|  1.90k|#line 10562 "MachineIndependent/glslang_tab.cpp"
10562|  1.90k|    break;
10563|       |
10564|    309|  case 480: /* type_specifier_nonarray: IMAGE3D  */
  ------------------
  |  Branch (10564:3): [True: 309, False: 12.5M]
  ------------------
10565|    309|#line 3239 "MachineIndependent/glslang.y"
10566|    309|              {
10567|    309|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    309|#define parseContext (*pParseContext)
  ------------------
10568|    309|        (yyval.interm.type).basicType = EbtSampler;
10569|    309|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
10570|    309|    }
10571|    309|#line 10572 "MachineIndependent/glslang_tab.cpp"
10572|    309|    break;
10573|       |
10574|    125|  case 481: /* type_specifier_nonarray: F16IMAGE3D  */
  ------------------
  |  Branch (10574:3): [True: 125, False: 12.5M]
  ------------------
10575|    125|#line 3244 "MachineIndependent/glslang.y"
10576|    125|                 {
10577|    125|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10578|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10579|    125|        (yyval.interm.type).basicType = EbtSampler;
10580|    125|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D);
10581|    125|    }
10582|    125|#line 10583 "MachineIndependent/glslang_tab.cpp"
10583|    125|    break;
10584|       |
10585|  1.90k|  case 482: /* type_specifier_nonarray: IIMAGE3D  */
  ------------------
  |  Branch (10585:3): [True: 1.90k, False: 12.5M]
  ------------------
10586|  1.90k|#line 3250 "MachineIndependent/glslang.y"
10587|  1.90k|               {
10588|  1.90k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.90k|#define parseContext (*pParseContext)
  ------------------
10589|  1.90k|        (yyval.interm.type).basicType = EbtSampler;
10590|  1.90k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
10591|  1.90k|    }
10592|  1.90k|#line 10593 "MachineIndependent/glslang_tab.cpp"
10593|  1.90k|    break;
10594|       |
10595|  1.90k|  case 483: /* type_specifier_nonarray: UIMAGE3D  */
  ------------------
  |  Branch (10595:3): [True: 1.90k, False: 12.5M]
  ------------------
10596|  1.90k|#line 3255 "MachineIndependent/glslang.y"
10597|  1.90k|               {
10598|  1.90k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.90k|#define parseContext (*pParseContext)
  ------------------
10599|  1.90k|        (yyval.interm.type).basicType = EbtSampler;
10600|  1.90k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
10601|  1.90k|    }
10602|  1.90k|#line 10603 "MachineIndependent/glslang_tab.cpp"
10603|  1.90k|    break;
10604|       |
10605|    294|  case 484: /* type_specifier_nonarray: IMAGE2DRECT  */
  ------------------
  |  Branch (10605:3): [True: 294, False: 12.5M]
  ------------------
10606|    294|#line 3260 "MachineIndependent/glslang.y"
10607|    294|                  {
10608|    294|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    294|#define parseContext (*pParseContext)
  ------------------
10609|    294|        (yyval.interm.type).basicType = EbtSampler;
10610|    294|        (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
10611|    294|    }
10612|    294|#line 10613 "MachineIndependent/glslang_tab.cpp"
10613|    294|    break;
10614|       |
10615|    110|  case 485: /* type_specifier_nonarray: F16IMAGE2DRECT  */
  ------------------
  |  Branch (10615:3): [True: 110, False: 12.5M]
  ------------------
10616|    110|#line 3265 "MachineIndependent/glslang.y"
10617|    110|                     {
10618|    110|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    110|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    110|#define parseContext (*pParseContext)
  ------------------
10619|    110|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    110|#define parseContext (*pParseContext)
  ------------------
10620|    110|        (yyval.interm.type).basicType = EbtSampler;
10621|    110|        (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect);
10622|    110|    }
10623|    110|#line 10624 "MachineIndependent/glslang_tab.cpp"
10624|    110|    break;
10625|       |
10626|  1.89k|  case 486: /* type_specifier_nonarray: IIMAGE2DRECT  */
  ------------------
  |  Branch (10626:3): [True: 1.89k, False: 12.5M]
  ------------------
10627|  1.89k|#line 3271 "MachineIndependent/glslang.y"
10628|  1.89k|                   {
10629|  1.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.89k|#define parseContext (*pParseContext)
  ------------------
10630|  1.89k|        (yyval.interm.type).basicType = EbtSampler;
10631|  1.89k|        (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
10632|  1.89k|    }
10633|  1.89k|#line 10634 "MachineIndependent/glslang_tab.cpp"
10634|  1.89k|    break;
10635|       |
10636|  1.89k|  case 487: /* type_specifier_nonarray: UIMAGE2DRECT  */
  ------------------
  |  Branch (10636:3): [True: 1.89k, False: 12.5M]
  ------------------
10637|  1.89k|#line 3276 "MachineIndependent/glslang.y"
10638|  1.89k|                   {
10639|  1.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.89k|#define parseContext (*pParseContext)
  ------------------
10640|  1.89k|        (yyval.interm.type).basicType = EbtSampler;
10641|  1.89k|        (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
10642|  1.89k|    }
10643|  1.89k|#line 10644 "MachineIndependent/glslang_tab.cpp"
10644|  1.89k|    break;
10645|       |
10646|    309|  case 488: /* type_specifier_nonarray: IMAGECUBE  */
  ------------------
  |  Branch (10646:3): [True: 309, False: 12.5M]
  ------------------
10647|    309|#line 3281 "MachineIndependent/glslang.y"
10648|    309|                {
10649|    309|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    309|#define parseContext (*pParseContext)
  ------------------
10650|    309|        (yyval.interm.type).basicType = EbtSampler;
10651|    309|        (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
10652|    309|    }
10653|    309|#line 10654 "MachineIndependent/glslang_tab.cpp"
10654|    309|    break;
10655|       |
10656|    125|  case 489: /* type_specifier_nonarray: F16IMAGECUBE  */
  ------------------
  |  Branch (10656:3): [True: 125, False: 12.5M]
  ------------------
10657|    125|#line 3286 "MachineIndependent/glslang.y"
10658|    125|                   {
10659|    125|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10660|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10661|    125|        (yyval.interm.type).basicType = EbtSampler;
10662|    125|        (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube);
10663|    125|    }
10664|    125|#line 10665 "MachineIndependent/glslang_tab.cpp"
10665|    125|    break;
10666|       |
10667|  1.90k|  case 490: /* type_specifier_nonarray: IIMAGECUBE  */
  ------------------
  |  Branch (10667:3): [True: 1.90k, False: 12.5M]
  ------------------
10668|  1.90k|#line 3292 "MachineIndependent/glslang.y"
10669|  1.90k|                 {
10670|  1.90k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.90k|#define parseContext (*pParseContext)
  ------------------
10671|  1.90k|        (yyval.interm.type).basicType = EbtSampler;
10672|  1.90k|        (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
10673|  1.90k|    }
10674|  1.90k|#line 10675 "MachineIndependent/glslang_tab.cpp"
10675|  1.90k|    break;
10676|       |
10677|  1.90k|  case 491: /* type_specifier_nonarray: UIMAGECUBE  */
  ------------------
  |  Branch (10677:3): [True: 1.90k, False: 12.5M]
  ------------------
10678|  1.90k|#line 3297 "MachineIndependent/glslang.y"
10679|  1.90k|                 {
10680|  1.90k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.90k|#define parseContext (*pParseContext)
  ------------------
10681|  1.90k|        (yyval.interm.type).basicType = EbtSampler;
10682|  1.90k|        (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
10683|  1.90k|    }
10684|  1.90k|#line 10685 "MachineIndependent/glslang_tab.cpp"
10685|  1.90k|    break;
10686|       |
10687|    289|  case 492: /* type_specifier_nonarray: IMAGEBUFFER  */
  ------------------
  |  Branch (10687:3): [True: 289, False: 12.5M]
  ------------------
10688|    289|#line 3302 "MachineIndependent/glslang.y"
10689|    289|                  {
10690|    289|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    289|#define parseContext (*pParseContext)
  ------------------
10691|    289|        (yyval.interm.type).basicType = EbtSampler;
10692|    289|        (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
10693|    289|    }
10694|    289|#line 10695 "MachineIndependent/glslang_tab.cpp"
10695|    289|    break;
10696|       |
10697|    105|  case 493: /* type_specifier_nonarray: F16IMAGEBUFFER  */
  ------------------
  |  Branch (10697:3): [True: 105, False: 12.5M]
  ------------------
10698|    105|#line 3307 "MachineIndependent/glslang.y"
10699|    105|                     {
10700|    105|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    105|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    105|#define parseContext (*pParseContext)
  ------------------
10701|    105|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    105|#define parseContext (*pParseContext)
  ------------------
10702|    105|        (yyval.interm.type).basicType = EbtSampler;
10703|    105|        (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer);
10704|    105|    }
10705|    105|#line 10706 "MachineIndependent/glslang_tab.cpp"
10706|    105|    break;
10707|       |
10708|  1.88k|  case 494: /* type_specifier_nonarray: IIMAGEBUFFER  */
  ------------------
  |  Branch (10708:3): [True: 1.88k, False: 12.5M]
  ------------------
10709|  1.88k|#line 3313 "MachineIndependent/glslang.y"
10710|  1.88k|                   {
10711|  1.88k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.88k|#define parseContext (*pParseContext)
  ------------------
10712|  1.88k|        (yyval.interm.type).basicType = EbtSampler;
10713|  1.88k|        (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
10714|  1.88k|    }
10715|  1.88k|#line 10716 "MachineIndependent/glslang_tab.cpp"
10716|  1.88k|    break;
10717|       |
10718|  1.88k|  case 495: /* type_specifier_nonarray: UIMAGEBUFFER  */
  ------------------
  |  Branch (10718:3): [True: 1.88k, False: 12.5M]
  ------------------
10719|  1.88k|#line 3318 "MachineIndependent/glslang.y"
10720|  1.88k|                   {
10721|  1.88k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.88k|#define parseContext (*pParseContext)
  ------------------
10722|  1.88k|        (yyval.interm.type).basicType = EbtSampler;
10723|  1.88k|        (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
10724|  1.88k|    }
10725|  1.88k|#line 10726 "MachineIndependent/glslang_tab.cpp"
10726|  1.88k|    break;
10727|       |
10728|    299|  case 496: /* type_specifier_nonarray: IMAGE1DARRAY  */
  ------------------
  |  Branch (10728:3): [True: 299, False: 12.5M]
  ------------------
10729|    299|#line 3323 "MachineIndependent/glslang.y"
10730|    299|                   {
10731|    299|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    299|#define parseContext (*pParseContext)
  ------------------
10732|    299|        (yyval.interm.type).basicType = EbtSampler;
10733|    299|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
10734|    299|    }
10735|    299|#line 10736 "MachineIndependent/glslang_tab.cpp"
10736|    299|    break;
10737|       |
10738|    115|  case 497: /* type_specifier_nonarray: F16IMAGE1DARRAY  */
  ------------------
  |  Branch (10738:3): [True: 115, False: 12.5M]
  ------------------
10739|    115|#line 3328 "MachineIndependent/glslang.y"
10740|    115|                      {
10741|    115|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
10742|    115|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
10743|    115|        (yyval.interm.type).basicType = EbtSampler;
10744|    115|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true);
10745|    115|    }
10746|    115|#line 10747 "MachineIndependent/glslang_tab.cpp"
10747|    115|    break;
10748|       |
10749|  1.89k|  case 498: /* type_specifier_nonarray: IIMAGE1DARRAY  */
  ------------------
  |  Branch (10749:3): [True: 1.89k, False: 12.5M]
  ------------------
10750|  1.89k|#line 3334 "MachineIndependent/glslang.y"
10751|  1.89k|                    {
10752|  1.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.89k|#define parseContext (*pParseContext)
  ------------------
10753|  1.89k|        (yyval.interm.type).basicType = EbtSampler;
10754|  1.89k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
10755|  1.89k|    }
10756|  1.89k|#line 10757 "MachineIndependent/glslang_tab.cpp"
10757|  1.89k|    break;
10758|       |
10759|  1.89k|  case 499: /* type_specifier_nonarray: UIMAGE1DARRAY  */
  ------------------
  |  Branch (10759:3): [True: 1.89k, False: 12.5M]
  ------------------
10760|  1.89k|#line 3339 "MachineIndependent/glslang.y"
10761|  1.89k|                    {
10762|  1.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.89k|#define parseContext (*pParseContext)
  ------------------
10763|  1.89k|        (yyval.interm.type).basicType = EbtSampler;
10764|  1.89k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
10765|  1.89k|    }
10766|  1.89k|#line 10767 "MachineIndependent/glslang_tab.cpp"
10767|  1.89k|    break;
10768|       |
10769|    309|  case 500: /* type_specifier_nonarray: IMAGE2DARRAY  */
  ------------------
  |  Branch (10769:3): [True: 309, False: 12.5M]
  ------------------
10770|    309|#line 3344 "MachineIndependent/glslang.y"
10771|    309|                   {
10772|    309|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    309|#define parseContext (*pParseContext)
  ------------------
10773|    309|        (yyval.interm.type).basicType = EbtSampler;
10774|    309|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
10775|    309|    }
10776|    309|#line 10777 "MachineIndependent/glslang_tab.cpp"
10777|    309|    break;
10778|       |
10779|    125|  case 501: /* type_specifier_nonarray: F16IMAGE2DARRAY  */
  ------------------
  |  Branch (10779:3): [True: 125, False: 12.5M]
  ------------------
10780|    125|#line 3349 "MachineIndependent/glslang.y"
10781|    125|                      {
10782|    125|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10783|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10784|    125|        (yyval.interm.type).basicType = EbtSampler;
10785|    125|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true);
10786|    125|    }
10787|    125|#line 10788 "MachineIndependent/glslang_tab.cpp"
10788|    125|    break;
10789|       |
10790|  1.90k|  case 502: /* type_specifier_nonarray: IIMAGE2DARRAY  */
  ------------------
  |  Branch (10790:3): [True: 1.90k, False: 12.5M]
  ------------------
10791|  1.90k|#line 3355 "MachineIndependent/glslang.y"
10792|  1.90k|                    {
10793|  1.90k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.90k|#define parseContext (*pParseContext)
  ------------------
10794|  1.90k|        (yyval.interm.type).basicType = EbtSampler;
10795|  1.90k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
10796|  1.90k|    }
10797|  1.90k|#line 10798 "MachineIndependent/glslang_tab.cpp"
10798|  1.90k|    break;
10799|       |
10800|  1.90k|  case 503: /* type_specifier_nonarray: UIMAGE2DARRAY  */
  ------------------
  |  Branch (10800:3): [True: 1.90k, False: 12.5M]
  ------------------
10801|  1.90k|#line 3360 "MachineIndependent/glslang.y"
10802|  1.90k|                    {
10803|  1.90k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.90k|#define parseContext (*pParseContext)
  ------------------
10804|  1.90k|        (yyval.interm.type).basicType = EbtSampler;
10805|  1.90k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
10806|  1.90k|    }
10807|  1.90k|#line 10808 "MachineIndependent/glslang_tab.cpp"
10808|  1.90k|    break;
10809|       |
10810|    309|  case 504: /* type_specifier_nonarray: IMAGECUBEARRAY  */
  ------------------
  |  Branch (10810:3): [True: 309, False: 12.5M]
  ------------------
10811|    309|#line 3365 "MachineIndependent/glslang.y"
10812|    309|                     {
10813|    309|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    309|#define parseContext (*pParseContext)
  ------------------
10814|    309|        (yyval.interm.type).basicType = EbtSampler;
10815|    309|        (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
10816|    309|    }
10817|    309|#line 10818 "MachineIndependent/glslang_tab.cpp"
10818|    309|    break;
10819|       |
10820|    125|  case 505: /* type_specifier_nonarray: F16IMAGECUBEARRAY  */
  ------------------
  |  Branch (10820:3): [True: 125, False: 12.5M]
  ------------------
10821|    125|#line 3370 "MachineIndependent/glslang.y"
10822|    125|                        {
10823|    125|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10824|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10825|    125|        (yyval.interm.type).basicType = EbtSampler;
10826|    125|        (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true);
10827|    125|    }
10828|    125|#line 10829 "MachineIndependent/glslang_tab.cpp"
10829|    125|    break;
10830|       |
10831|  1.90k|  case 506: /* type_specifier_nonarray: IIMAGECUBEARRAY  */
  ------------------
  |  Branch (10831:3): [True: 1.90k, False: 12.5M]
  ------------------
10832|  1.90k|#line 3376 "MachineIndependent/glslang.y"
10833|  1.90k|                      {
10834|  1.90k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.90k|#define parseContext (*pParseContext)
  ------------------
10835|  1.90k|        (yyval.interm.type).basicType = EbtSampler;
10836|  1.90k|        (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
10837|  1.90k|    }
10838|  1.90k|#line 10839 "MachineIndependent/glslang_tab.cpp"
10839|  1.90k|    break;
10840|       |
10841|  1.90k|  case 507: /* type_specifier_nonarray: UIMAGECUBEARRAY  */
  ------------------
  |  Branch (10841:3): [True: 1.90k, False: 12.5M]
  ------------------
10842|  1.90k|#line 3381 "MachineIndependent/glslang.y"
10843|  1.90k|                      {
10844|  1.90k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.90k|#define parseContext (*pParseContext)
  ------------------
10845|  1.90k|        (yyval.interm.type).basicType = EbtSampler;
10846|  1.90k|        (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
10847|  1.90k|    }
10848|  1.90k|#line 10849 "MachineIndependent/glslang_tab.cpp"
10849|  1.90k|    break;
10850|       |
10851|    299|  case 508: /* type_specifier_nonarray: IMAGE2DMS  */
  ------------------
  |  Branch (10851:3): [True: 299, False: 12.5M]
  ------------------
10852|    299|#line 3386 "MachineIndependent/glslang.y"
10853|    299|                {
10854|    299|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    299|#define parseContext (*pParseContext)
  ------------------
10855|    299|        (yyval.interm.type).basicType = EbtSampler;
10856|    299|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
10857|    299|    }
10858|    299|#line 10859 "MachineIndependent/glslang_tab.cpp"
10859|    299|    break;
10860|       |
10861|    115|  case 509: /* type_specifier_nonarray: F16IMAGE2DMS  */
  ------------------
  |  Branch (10861:3): [True: 115, False: 12.5M]
  ------------------
10862|    115|#line 3391 "MachineIndependent/glslang.y"
10863|    115|                   {
10864|    115|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
10865|    115|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
10866|    115|        (yyval.interm.type).basicType = EbtSampler;
10867|    115|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true);
10868|    115|    }
10869|    115|#line 10870 "MachineIndependent/glslang_tab.cpp"
10870|    115|    break;
10871|       |
10872|  1.89k|  case 510: /* type_specifier_nonarray: IIMAGE2DMS  */
  ------------------
  |  Branch (10872:3): [True: 1.89k, False: 12.5M]
  ------------------
10873|  1.89k|#line 3397 "MachineIndependent/glslang.y"
10874|  1.89k|                 {
10875|  1.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.89k|#define parseContext (*pParseContext)
  ------------------
10876|  1.89k|        (yyval.interm.type).basicType = EbtSampler;
10877|  1.89k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
10878|  1.89k|    }
10879|  1.89k|#line 10880 "MachineIndependent/glslang_tab.cpp"
10880|  1.89k|    break;
10881|       |
10882|  1.89k|  case 511: /* type_specifier_nonarray: UIMAGE2DMS  */
  ------------------
  |  Branch (10882:3): [True: 1.89k, False: 12.5M]
  ------------------
10883|  1.89k|#line 3402 "MachineIndependent/glslang.y"
10884|  1.89k|                 {
10885|  1.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.89k|#define parseContext (*pParseContext)
  ------------------
10886|  1.89k|        (yyval.interm.type).basicType = EbtSampler;
10887|  1.89k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
10888|  1.89k|    }
10889|  1.89k|#line 10890 "MachineIndependent/glslang_tab.cpp"
10890|  1.89k|    break;
10891|       |
10892|    299|  case 512: /* type_specifier_nonarray: IMAGE2DMSARRAY  */
  ------------------
  |  Branch (10892:3): [True: 299, False: 12.5M]
  ------------------
10893|    299|#line 3407 "MachineIndependent/glslang.y"
10894|    299|                     {
10895|    299|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    299|#define parseContext (*pParseContext)
  ------------------
10896|    299|        (yyval.interm.type).basicType = EbtSampler;
10897|    299|        (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
10898|    299|    }
10899|    299|#line 10900 "MachineIndependent/glslang_tab.cpp"
10900|    299|    break;
10901|       |
10902|    115|  case 513: /* type_specifier_nonarray: F16IMAGE2DMSARRAY  */
  ------------------
  |  Branch (10902:3): [True: 115, False: 12.5M]
  ------------------
10903|    115|#line 3412 "MachineIndependent/glslang.y"
10904|    115|                        {
10905|    115|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
10906|    115|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
10907|    115|        (yyval.interm.type).basicType = EbtSampler;
10908|    115|        (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true);
10909|    115|    }
10910|    115|#line 10911 "MachineIndependent/glslang_tab.cpp"
10911|    115|    break;
10912|       |
10913|  1.89k|  case 514: /* type_specifier_nonarray: IIMAGE2DMSARRAY  */
  ------------------
  |  Branch (10913:3): [True: 1.89k, False: 12.5M]
  ------------------
10914|  1.89k|#line 3418 "MachineIndependent/glslang.y"
10915|  1.89k|                      {
10916|  1.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.89k|#define parseContext (*pParseContext)
  ------------------
10917|  1.89k|        (yyval.interm.type).basicType = EbtSampler;
10918|  1.89k|        (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
10919|  1.89k|    }
10920|  1.89k|#line 10921 "MachineIndependent/glslang_tab.cpp"
10921|  1.89k|    break;
10922|       |
10923|  1.89k|  case 515: /* type_specifier_nonarray: UIMAGE2DMSARRAY  */
  ------------------
  |  Branch (10923:3): [True: 1.89k, False: 12.5M]
  ------------------
10924|  1.89k|#line 3423 "MachineIndependent/glslang.y"
10925|  1.89k|                      {
10926|  1.89k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.89k|#define parseContext (*pParseContext)
  ------------------
10927|  1.89k|        (yyval.interm.type).basicType = EbtSampler;
10928|  1.89k|        (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
10929|  1.89k|    }
10930|  1.89k|#line 10931 "MachineIndependent/glslang_tab.cpp"
10931|  1.89k|    break;
10932|       |
10933|    115|  case 516: /* type_specifier_nonarray: I64IMAGE1D  */
  ------------------
  |  Branch (10933:3): [True: 115, False: 12.5M]
  ------------------
10934|    115|#line 3428 "MachineIndependent/glslang.y"
10935|    115|                 {
10936|    115|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
10937|    115|        (yyval.interm.type).basicType = EbtSampler;
10938|    115|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D);
10939|    115|    }
10940|    115|#line 10941 "MachineIndependent/glslang_tab.cpp"
10941|    115|    break;
10942|       |
10943|    115|  case 517: /* type_specifier_nonarray: U64IMAGE1D  */
  ------------------
  |  Branch (10943:3): [True: 115, False: 12.5M]
  ------------------
10944|    115|#line 3433 "MachineIndependent/glslang.y"
10945|    115|                 {
10946|    115|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
10947|    115|        (yyval.interm.type).basicType = EbtSampler;
10948|    115|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D);
10949|    115|    }
10950|    115|#line 10951 "MachineIndependent/glslang_tab.cpp"
10951|    115|    break;
10952|       |
10953|    125|  case 518: /* type_specifier_nonarray: I64IMAGE2D  */
  ------------------
  |  Branch (10953:3): [True: 125, False: 12.5M]
  ------------------
10954|    125|#line 3438 "MachineIndependent/glslang.y"
10955|    125|                 {
10956|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10957|    125|        (yyval.interm.type).basicType = EbtSampler;
10958|    125|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D);
10959|    125|    }
10960|    125|#line 10961 "MachineIndependent/glslang_tab.cpp"
10961|    125|    break;
10962|       |
10963|    125|  case 519: /* type_specifier_nonarray: U64IMAGE2D  */
  ------------------
  |  Branch (10963:3): [True: 125, False: 12.5M]
  ------------------
10964|    125|#line 3443 "MachineIndependent/glslang.y"
10965|    125|                 {
10966|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10967|    125|        (yyval.interm.type).basicType = EbtSampler;
10968|    125|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D);
10969|    125|    }
10970|    125|#line 10971 "MachineIndependent/glslang_tab.cpp"
10971|    125|    break;
10972|       |
10973|    125|  case 520: /* type_specifier_nonarray: I64IMAGE3D  */
  ------------------
  |  Branch (10973:3): [True: 125, False: 12.5M]
  ------------------
10974|    125|#line 3448 "MachineIndependent/glslang.y"
10975|    125|                 {
10976|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10977|    125|        (yyval.interm.type).basicType = EbtSampler;
10978|    125|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D);
10979|    125|    }
10980|    125|#line 10981 "MachineIndependent/glslang_tab.cpp"
10981|    125|    break;
10982|       |
10983|    125|  case 521: /* type_specifier_nonarray: U64IMAGE3D  */
  ------------------
  |  Branch (10983:3): [True: 125, False: 12.5M]
  ------------------
10984|    125|#line 3453 "MachineIndependent/glslang.y"
10985|    125|                 {
10986|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
10987|    125|        (yyval.interm.type).basicType = EbtSampler;
10988|    125|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D);
10989|    125|    }
10990|    125|#line 10991 "MachineIndependent/glslang_tab.cpp"
10991|    125|    break;
10992|       |
10993|    110|  case 522: /* type_specifier_nonarray: I64IMAGE2DRECT  */
  ------------------
  |  Branch (10993:3): [True: 110, False: 12.5M]
  ------------------
10994|    110|#line 3458 "MachineIndependent/glslang.y"
10995|    110|                     {
10996|    110|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    110|#define parseContext (*pParseContext)
  ------------------
10997|    110|        (yyval.interm.type).basicType = EbtSampler;
10998|    110|        (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect);
10999|    110|    }
11000|    110|#line 11001 "MachineIndependent/glslang_tab.cpp"
11001|    110|    break;
11002|       |
11003|    110|  case 523: /* type_specifier_nonarray: U64IMAGE2DRECT  */
  ------------------
  |  Branch (11003:3): [True: 110, False: 12.5M]
  ------------------
11004|    110|#line 3463 "MachineIndependent/glslang.y"
11005|    110|                     {
11006|    110|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    110|#define parseContext (*pParseContext)
  ------------------
11007|    110|        (yyval.interm.type).basicType = EbtSampler;
11008|    110|        (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect);
11009|    110|    }
11010|    110|#line 11011 "MachineIndependent/glslang_tab.cpp"
11011|    110|    break;
11012|       |
11013|    125|  case 524: /* type_specifier_nonarray: I64IMAGECUBE  */
  ------------------
  |  Branch (11013:3): [True: 125, False: 12.5M]
  ------------------
11014|    125|#line 3468 "MachineIndependent/glslang.y"
11015|    125|                   {
11016|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
11017|    125|        (yyval.interm.type).basicType = EbtSampler;
11018|    125|        (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube);
11019|    125|    }
11020|    125|#line 11021 "MachineIndependent/glslang_tab.cpp"
11021|    125|    break;
11022|       |
11023|    125|  case 525: /* type_specifier_nonarray: U64IMAGECUBE  */
  ------------------
  |  Branch (11023:3): [True: 125, False: 12.5M]
  ------------------
11024|    125|#line 3473 "MachineIndependent/glslang.y"
11025|    125|                   {
11026|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
11027|    125|        (yyval.interm.type).basicType = EbtSampler;
11028|    125|        (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube);
11029|    125|    }
11030|    125|#line 11031 "MachineIndependent/glslang_tab.cpp"
11031|    125|    break;
11032|       |
11033|    105|  case 526: /* type_specifier_nonarray: I64IMAGEBUFFER  */
  ------------------
  |  Branch (11033:3): [True: 105, False: 12.5M]
  ------------------
11034|    105|#line 3478 "MachineIndependent/glslang.y"
11035|    105|                     {
11036|    105|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    105|#define parseContext (*pParseContext)
  ------------------
11037|    105|        (yyval.interm.type).basicType = EbtSampler;
11038|    105|        (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer);
11039|    105|    }
11040|    105|#line 11041 "MachineIndependent/glslang_tab.cpp"
11041|    105|    break;
11042|       |
11043|    105|  case 527: /* type_specifier_nonarray: U64IMAGEBUFFER  */
  ------------------
  |  Branch (11043:3): [True: 105, False: 12.5M]
  ------------------
11044|    105|#line 3483 "MachineIndependent/glslang.y"
11045|    105|                     {
11046|    105|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    105|#define parseContext (*pParseContext)
  ------------------
11047|    105|        (yyval.interm.type).basicType = EbtSampler;
11048|    105|        (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer);
11049|    105|    }
11050|    105|#line 11051 "MachineIndependent/glslang_tab.cpp"
11051|    105|    break;
11052|       |
11053|    115|  case 528: /* type_specifier_nonarray: I64IMAGE1DARRAY  */
  ------------------
  |  Branch (11053:3): [True: 115, False: 12.5M]
  ------------------
11054|    115|#line 3488 "MachineIndependent/glslang.y"
11055|    115|                      {
11056|    115|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
11057|    115|        (yyval.interm.type).basicType = EbtSampler;
11058|    115|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true);
11059|    115|    }
11060|    115|#line 11061 "MachineIndependent/glslang_tab.cpp"
11061|    115|    break;
11062|       |
11063|    115|  case 529: /* type_specifier_nonarray: U64IMAGE1DARRAY  */
  ------------------
  |  Branch (11063:3): [True: 115, False: 12.5M]
  ------------------
11064|    115|#line 3493 "MachineIndependent/glslang.y"
11065|    115|                      {
11066|    115|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
11067|    115|        (yyval.interm.type).basicType = EbtSampler;
11068|    115|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true);
11069|    115|    }
11070|    115|#line 11071 "MachineIndependent/glslang_tab.cpp"
11071|    115|    break;
11072|       |
11073|    125|  case 530: /* type_specifier_nonarray: I64IMAGE2DARRAY  */
  ------------------
  |  Branch (11073:3): [True: 125, False: 12.5M]
  ------------------
11074|    125|#line 3498 "MachineIndependent/glslang.y"
11075|    125|                      {
11076|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
11077|    125|        (yyval.interm.type).basicType = EbtSampler;
11078|    125|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true);
11079|    125|    }
11080|    125|#line 11081 "MachineIndependent/glslang_tab.cpp"
11081|    125|    break;
11082|       |
11083|    125|  case 531: /* type_specifier_nonarray: U64IMAGE2DARRAY  */
  ------------------
  |  Branch (11083:3): [True: 125, False: 12.5M]
  ------------------
11084|    125|#line 3503 "MachineIndependent/glslang.y"
11085|    125|                      {
11086|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
11087|    125|        (yyval.interm.type).basicType = EbtSampler;
11088|    125|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true);
11089|    125|    }
11090|    125|#line 11091 "MachineIndependent/glslang_tab.cpp"
11091|    125|    break;
11092|       |
11093|    125|  case 532: /* type_specifier_nonarray: I64IMAGECUBEARRAY  */
  ------------------
  |  Branch (11093:3): [True: 125, False: 12.5M]
  ------------------
11094|    125|#line 3508 "MachineIndependent/glslang.y"
11095|    125|                        {
11096|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
11097|    125|        (yyval.interm.type).basicType = EbtSampler;
11098|    125|        (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true);
11099|    125|    }
11100|    125|#line 11101 "MachineIndependent/glslang_tab.cpp"
11101|    125|    break;
11102|       |
11103|    125|  case 533: /* type_specifier_nonarray: U64IMAGECUBEARRAY  */
  ------------------
  |  Branch (11103:3): [True: 125, False: 12.5M]
  ------------------
11104|    125|#line 3513 "MachineIndependent/glslang.y"
11105|    125|                        {
11106|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
11107|    125|        (yyval.interm.type).basicType = EbtSampler;
11108|    125|        (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true);
11109|    125|    }
11110|    125|#line 11111 "MachineIndependent/glslang_tab.cpp"
11111|    125|    break;
11112|       |
11113|    115|  case 534: /* type_specifier_nonarray: I64IMAGE2DMS  */
  ------------------
  |  Branch (11113:3): [True: 115, False: 12.5M]
  ------------------
11114|    115|#line 3518 "MachineIndependent/glslang.y"
11115|    115|                   {
11116|    115|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
11117|    115|        (yyval.interm.type).basicType = EbtSampler;
11118|    115|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true);
11119|    115|    }
11120|    115|#line 11121 "MachineIndependent/glslang_tab.cpp"
11121|    115|    break;
11122|       |
11123|    115|  case 535: /* type_specifier_nonarray: U64IMAGE2DMS  */
  ------------------
  |  Branch (11123:3): [True: 115, False: 12.5M]
  ------------------
11124|    115|#line 3523 "MachineIndependent/glslang.y"
11125|    115|                   {
11126|    115|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
11127|    115|        (yyval.interm.type).basicType = EbtSampler;
11128|    115|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true);
11129|    115|    }
11130|    115|#line 11131 "MachineIndependent/glslang_tab.cpp"
11131|    115|    break;
11132|       |
11133|    115|  case 536: /* type_specifier_nonarray: I64IMAGE2DMSARRAY  */
  ------------------
  |  Branch (11133:3): [True: 115, False: 12.5M]
  ------------------
11134|    115|#line 3528 "MachineIndependent/glslang.y"
11135|    115|                        {
11136|    115|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
11137|    115|        (yyval.interm.type).basicType = EbtSampler;
11138|    115|        (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true);
11139|    115|    }
11140|    115|#line 11141 "MachineIndependent/glslang_tab.cpp"
11141|    115|    break;
11142|       |
11143|    115|  case 537: /* type_specifier_nonarray: U64IMAGE2DMSARRAY  */
  ------------------
  |  Branch (11143:3): [True: 115, False: 12.5M]
  ------------------
11144|    115|#line 3533 "MachineIndependent/glslang.y"
11145|    115|                        {
11146|    115|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    115|#define parseContext (*pParseContext)
  ------------------
11147|    115|        (yyval.interm.type).basicType = EbtSampler;
11148|    115|        (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true);
11149|    115|    }
11150|    115|#line 11151 "MachineIndependent/glslang_tab.cpp"
11151|    115|    break;
11152|       |
11153|      0|  case 538: /* type_specifier_nonarray: SAMPLEREXTERNALOES  */
  ------------------
  |  Branch (11153:3): [True: 0, False: 12.5M]
  ------------------
11154|      0|#line 3538 "MachineIndependent/glslang.y"
11155|      0|                         {  // GL_OES_EGL_image_external
11156|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11157|      0|        (yyval.interm.type).basicType = EbtSampler;
11158|      0|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
11159|      0|        (yyval.interm.type).sampler.external = true;
11160|      0|    }
11161|      0|#line 11162 "MachineIndependent/glslang_tab.cpp"
11162|      0|    break;
11163|       |
11164|      0|  case 539: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT  */
  ------------------
  |  Branch (11164:3): [True: 0, False: 12.5M]
  ------------------
11165|      0|#line 3544 "MachineIndependent/glslang.y"
11166|      0|                              { // GL_EXT_YUV_target
11167|      0|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11168|      0|        (yyval.interm.type).basicType = EbtSampler;
11169|      0|        (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
11170|      0|        (yyval.interm.type).sampler.yuv = true;
11171|      0|    }
11172|      0|#line 11173 "MachineIndependent/glslang_tab.cpp"
11173|      0|    break;
11174|       |
11175|    198|  case 540: /* type_specifier_nonarray: ATTACHMENTEXT  */
  ------------------
  |  Branch (11175:3): [True: 198, False: 12.5M]
  ------------------
11176|    198|#line 3550 "MachineIndependent/glslang.y"
11177|    198|                    {
11178|    198|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input");
  ------------------
  |  |  756|    198|#define parseContext (*pParseContext)
  ------------------
11179|    198|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    198|#define parseContext (*pParseContext)
  ------------------
11180|    198|        (yyval.interm.type).basicType = EbtSampler;
11181|    198|        (yyval.interm.type).sampler.setAttachmentEXT(EbtFloat);
11182|    198|    }
11183|    198|#line 11184 "MachineIndependent/glslang_tab.cpp"
11184|    198|    break;
11185|       |
11186|    198|  case 541: /* type_specifier_nonarray: IATTACHMENTEXT  */
  ------------------
  |  Branch (11186:3): [True: 198, False: 12.5M]
  ------------------
11187|    198|#line 3556 "MachineIndependent/glslang.y"
11188|    198|                     {
11189|    198|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input");
  ------------------
  |  |  756|    198|#define parseContext (*pParseContext)
  ------------------
11190|    198|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    198|#define parseContext (*pParseContext)
  ------------------
11191|    198|        (yyval.interm.type).basicType = EbtSampler;
11192|    198|        (yyval.interm.type).sampler.setAttachmentEXT(EbtInt);
11193|    198|    }
11194|    198|#line 11195 "MachineIndependent/glslang_tab.cpp"
11195|    198|    break;
11196|       |
11197|    198|  case 542: /* type_specifier_nonarray: UATTACHMENTEXT  */
  ------------------
  |  Branch (11197:3): [True: 198, False: 12.5M]
  ------------------
11198|    198|#line 3562 "MachineIndependent/glslang.y"
11199|    198|                     {
11200|    198|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input");
  ------------------
  |  |  756|    198|#define parseContext (*pParseContext)
  ------------------
11201|    198|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    198|#define parseContext (*pParseContext)
  ------------------
11202|    198|        (yyval.interm.type).basicType = EbtSampler;
11203|    198|        (yyval.interm.type).sampler.setAttachmentEXT(EbtUint);
11204|    198|    }
11205|    198|#line 11206 "MachineIndependent/glslang_tab.cpp"
11206|    198|    break;
11207|       |
11208|    105|  case 543: /* type_specifier_nonarray: SUBPASSINPUT  */
  ------------------
  |  Branch (11208:3): [True: 105, False: 12.5M]
  ------------------
11209|    105|#line 3568 "MachineIndependent/glslang.y"
11210|    105|                   {
11211|    105|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  756|    105|#define parseContext (*pParseContext)
  ------------------
11212|    105|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    105|#define parseContext (*pParseContext)
  ------------------
11213|    105|        (yyval.interm.type).basicType = EbtSampler;
11214|    105|        (yyval.interm.type).sampler.setSubpass(EbtFloat);
11215|    105|    }
11216|    105|#line 11217 "MachineIndependent/glslang_tab.cpp"
11217|    105|    break;
11218|       |
11219|    125|  case 544: /* type_specifier_nonarray: SUBPASSINPUTMS  */
  ------------------
  |  Branch (11219:3): [True: 125, False: 12.5M]
  ------------------
11220|    125|#line 3574 "MachineIndependent/glslang.y"
11221|    125|                     {
11222|    125|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
11223|    125|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    125|#define parseContext (*pParseContext)
  ------------------
11224|    125|        (yyval.interm.type).basicType = EbtSampler;
11225|    125|        (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
11226|    125|    }
11227|    125|#line 11228 "MachineIndependent/glslang_tab.cpp"
11228|    125|    break;
11229|       |
11230|     10|  case 545: /* type_specifier_nonarray: F16SUBPASSINPUT  */
  ------------------
  |  Branch (11230:3): [True: 10, False: 12.5M]
  ------------------
11231|     10|#line 3580 "MachineIndependent/glslang.y"
11232|     10|                      {
11233|     10|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
11234|     10|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
11235|     10|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
11236|     10|        (yyval.interm.type).basicType = EbtSampler;
11237|     10|        (yyval.interm.type).sampler.setSubpass(EbtFloat16);
11238|     10|    }
11239|     10|#line 11240 "MachineIndependent/glslang_tab.cpp"
11240|     10|    break;
11241|       |
11242|     10|  case 546: /* type_specifier_nonarray: F16SUBPASSINPUTMS  */
  ------------------
  |  Branch (11242:3): [True: 10, False: 12.5M]
  ------------------
11243|     10|#line 3587 "MachineIndependent/glslang.y"
11244|     10|                        {
11245|     10|        parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
                      parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
11246|     10|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
11247|     10|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
11248|     10|        (yyval.interm.type).basicType = EbtSampler;
11249|     10|        (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
11250|     10|    }
11251|     10|#line 11252 "MachineIndependent/glslang_tab.cpp"
11252|     10|    break;
11253|       |
11254|     99|  case 547: /* type_specifier_nonarray: ISUBPASSINPUT  */
  ------------------
  |  Branch (11254:3): [True: 99, False: 12.5M]
  ------------------
11255|     99|#line 3594 "MachineIndependent/glslang.y"
11256|     99|                    {
11257|     99|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  756|     99|#define parseContext (*pParseContext)
  ------------------
11258|     99|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     99|#define parseContext (*pParseContext)
  ------------------
11259|     99|        (yyval.interm.type).basicType = EbtSampler;
11260|     99|        (yyval.interm.type).sampler.setSubpass(EbtInt);
11261|     99|    }
11262|     99|#line 11263 "MachineIndependent/glslang_tab.cpp"
11263|     99|    break;
11264|       |
11265|    119|  case 548: /* type_specifier_nonarray: ISUBPASSINPUTMS  */
  ------------------
  |  Branch (11265:3): [True: 119, False: 12.5M]
  ------------------
11266|    119|#line 3600 "MachineIndependent/glslang.y"
11267|    119|                      {
11268|    119|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  756|    119|#define parseContext (*pParseContext)
  ------------------
11269|    119|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    119|#define parseContext (*pParseContext)
  ------------------
11270|    119|        (yyval.interm.type).basicType = EbtSampler;
11271|    119|        (yyval.interm.type).sampler.setSubpass(EbtInt, true);
11272|    119|    }
11273|    119|#line 11274 "MachineIndependent/glslang_tab.cpp"
11274|    119|    break;
11275|       |
11276|     99|  case 549: /* type_specifier_nonarray: USUBPASSINPUT  */
  ------------------
  |  Branch (11276:3): [True: 99, False: 12.5M]
  ------------------
11277|     99|#line 3606 "MachineIndependent/glslang.y"
11278|     99|                    {
11279|     99|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  756|     99|#define parseContext (*pParseContext)
  ------------------
11280|     99|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     99|#define parseContext (*pParseContext)
  ------------------
11281|     99|        (yyval.interm.type).basicType = EbtSampler;
11282|     99|        (yyval.interm.type).sampler.setSubpass(EbtUint);
11283|     99|    }
11284|     99|#line 11285 "MachineIndependent/glslang_tab.cpp"
11285|     99|    break;
11286|       |
11287|    119|  case 550: /* type_specifier_nonarray: USUBPASSINPUTMS  */
  ------------------
  |  Branch (11287:3): [True: 119, False: 12.5M]
  ------------------
11288|    119|#line 3612 "MachineIndependent/glslang.y"
11289|    119|                      {
11290|    119|        parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
  ------------------
  |  |  756|    119|#define parseContext (*pParseContext)
  ------------------
11291|    119|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    119|#define parseContext (*pParseContext)
  ------------------
11292|    119|        (yyval.interm.type).basicType = EbtSampler;
11293|    119|        (yyval.interm.type).sampler.setSubpass(EbtUint, true);
11294|    119|    }
11295|    119|#line 11296 "MachineIndependent/glslang_tab.cpp"
11296|    119|    break;
11297|       |
11298|    210|  case 551: /* type_specifier_nonarray: FCOOPMATNV  */
  ------------------
  |  Branch (11298:3): [True: 210, False: 12.5M]
  ------------------
11299|    210|#line 3618 "MachineIndependent/glslang.y"
11300|    210|                 {
11301|    210|        parseContext.fcoopmatCheckNV((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    210|#define parseContext (*pParseContext)
  ------------------
                      parseContext.fcoopmatCheckNV((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    210|#define parseContext (*pParseContext)
  ------------------
11302|    210|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    210|#define parseContext (*pParseContext)
  ------------------
11303|    210|        (yyval.interm.type).basicType = EbtFloat;
11304|    210|        (yyval.interm.type).coopmatNV = true;
11305|    210|        (yyval.interm.type).coopmatKHR = false;
11306|    210|    }
11307|    210|#line 11308 "MachineIndependent/glslang_tab.cpp"
11308|    210|    break;
11309|       |
11310|    280|  case 552: /* type_specifier_nonarray: ICOOPMATNV  */
  ------------------
  |  Branch (11310:3): [True: 280, False: 12.5M]
  ------------------
11311|    280|#line 3625 "MachineIndependent/glslang.y"
11312|    280|                 {
11313|    280|        parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    280|#define parseContext (*pParseContext)
  ------------------
                      parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    280|#define parseContext (*pParseContext)
  ------------------
11314|    280|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    280|#define parseContext (*pParseContext)
  ------------------
11315|    280|        (yyval.interm.type).basicType = EbtInt;
11316|    280|        (yyval.interm.type).coopmatNV = true;
11317|    280|        (yyval.interm.type).coopmatKHR = false;
11318|    280|    }
11319|    280|#line 11320 "MachineIndependent/glslang_tab.cpp"
11320|    280|    break;
11321|       |
11322|    280|  case 553: /* type_specifier_nonarray: UCOOPMATNV  */
  ------------------
  |  Branch (11322:3): [True: 280, False: 12.5M]
  ------------------
11323|    280|#line 3632 "MachineIndependent/glslang.y"
11324|    280|                 {
11325|    280|        parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    280|#define parseContext (*pParseContext)
  ------------------
                      parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    280|#define parseContext (*pParseContext)
  ------------------
11326|    280|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    280|#define parseContext (*pParseContext)
  ------------------
11327|    280|        (yyval.interm.type).basicType = EbtUint;
11328|    280|        (yyval.interm.type).coopmatNV = true;
11329|    280|        (yyval.interm.type).coopmatKHR = false;
11330|    280|    }
11331|    280|#line 11332 "MachineIndependent/glslang_tab.cpp"
11332|    280|    break;
11333|       |
11334|  1.06k|  case 554: /* type_specifier_nonarray: COOPMAT  */
  ------------------
  |  Branch (11334:3): [True: 1.06k, False: 12.5M]
  ------------------
11335|  1.06k|#line 3639 "MachineIndependent/glslang.y"
11336|  1.06k|              {
11337|  1.06k|        parseContext.coopmatCheck((yyvsp[0].lex).loc, "coopmat", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  1.06k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.coopmatCheck((yyvsp[0].lex).loc, "coopmat", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  1.06k|#define parseContext (*pParseContext)
  ------------------
11338|  1.06k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  1.06k|#define parseContext (*pParseContext)
  ------------------
11339|  1.06k|        (yyval.interm.type).basicType = EbtCoopmat;
11340|  1.06k|        (yyval.interm.type).coopmatNV = false;
11341|  1.06k|        (yyval.interm.type).coopmatKHR = true;
11342|  1.06k|    }
11343|  1.06k|#line 11344 "MachineIndependent/glslang_tab.cpp"
11344|  1.06k|    break;
11345|       |
11346|    300|  case 555: /* type_specifier_nonarray: TENSORLAYOUTNV  */
  ------------------
  |  Branch (11346:3): [True: 300, False: 12.5M]
  ------------------
11347|    300|#line 3646 "MachineIndependent/glslang.y"
11348|    300|                     {
11349|    300|        parseContext.tensorLayoutViewCheck((yyvsp[0].lex).loc, "tensorLayoutNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    300|#define parseContext (*pParseContext)
  ------------------
                      parseContext.tensorLayoutViewCheck((yyvsp[0].lex).loc, "tensorLayoutNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    300|#define parseContext (*pParseContext)
  ------------------
11350|    300|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    300|#define parseContext (*pParseContext)
  ------------------
11351|    300|        (yyval.interm.type).basicType = EbtTensorLayoutNV;
11352|    300|    }
11353|    300|#line 11354 "MachineIndependent/glslang_tab.cpp"
11354|    300|    break;
11355|       |
11356|    185|  case 556: /* type_specifier_nonarray: TENSORVIEWNV  */
  ------------------
  |  Branch (11356:3): [True: 185, False: 12.5M]
  ------------------
11357|    185|#line 3651 "MachineIndependent/glslang.y"
11358|    185|                   {
11359|    185|        parseContext.tensorLayoutViewCheck((yyvsp[0].lex).loc, "tensorViewNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    185|#define parseContext (*pParseContext)
  ------------------
                      parseContext.tensorLayoutViewCheck((yyvsp[0].lex).loc, "tensorViewNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    185|#define parseContext (*pParseContext)
  ------------------
11360|    185|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    185|#define parseContext (*pParseContext)
  ------------------
11361|    185|        (yyval.interm.type).basicType = EbtTensorViewNV;
11362|    185|    }
11363|    185|#line 11364 "MachineIndependent/glslang_tab.cpp"
11364|    185|    break;
11365|       |
11366|     65|  case 557: /* type_specifier_nonarray: FUNCTION  */
  ------------------
  |  Branch (11366:3): [True: 65, False: 12.5M]
  ------------------
11367|     65|#line 3656 "MachineIndependent/glslang.y"
11368|     65|               {
11369|     65|        (yyval.interm.type).init((yyvsp[0].lex).loc);
11370|     65|        (yyval.interm.type).basicType = EbtFunction;
11371|     65|    }
11372|     65|#line 11373 "MachineIndependent/glslang_tab.cpp"
11373|     65|    break;
11374|       |
11375|  3.97k|  case 558: /* type_specifier_nonarray: COOPVECNV  */
  ------------------
  |  Branch (11375:3): [True: 3.97k, False: 12.5M]
  ------------------
11376|  3.97k|#line 3660 "MachineIndependent/glslang.y"
11377|  3.97k|                {
11378|  3.97k|        parseContext.coopvecCheck((yyvsp[0].lex).loc, "coopvecNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  3.97k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.coopvecCheck((yyvsp[0].lex).loc, "coopvecNV", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  3.97k|#define parseContext (*pParseContext)
  ------------------
11379|  3.97k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  3.97k|#define parseContext (*pParseContext)
  ------------------
11380|  3.97k|        (yyval.interm.type).basicType = EbtCoopvecNV;
11381|  3.97k|        (yyval.interm.type).coopvecNV = true;
11382|  3.97k|    }
11383|  3.97k|#line 11384 "MachineIndependent/glslang_tab.cpp"
11384|  3.97k|    break;
11385|       |
11386|    305|  case 559: /* type_specifier_nonarray: TENSORARM  */
  ------------------
  |  Branch (11386:3): [True: 305, False: 12.5M]
  ------------------
11387|    305|#line 3666 "MachineIndependent/glslang.y"
11388|    305|                {
11389|    305|        parseContext.tensorCheckARM((yyvsp[0].lex).loc, "tensorARM", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    305|#define parseContext (*pParseContext)
  ------------------
                      parseContext.tensorCheckARM((yyvsp[0].lex).loc, "tensorARM", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|    305|#define parseContext (*pParseContext)
  ------------------
11390|    305|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    305|#define parseContext (*pParseContext)
  ------------------
11391|    305|        (yyval.interm.type).tensorRankARM = 1; // placeholder value
11392|    305|        (yyval.interm.type).basicType = EbtTensorARM;
11393|    305|    }
11394|    305|#line 11395 "MachineIndependent/glslang_tab.cpp"
11395|    305|    break;
11396|       |
11397|  36.2k|  case 560: /* type_specifier_nonarray: VECTOR  */
  ------------------
  |  Branch (11397:3): [True: 36.2k, False: 12.5M]
  ------------------
11398|  36.2k|#line 3672 "MachineIndependent/glslang.y"
11399|  36.2k|             {
11400|  36.2k|        parseContext.longVectorCheck((yyvsp[0].lex).loc, "vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  36.2k|#define parseContext (*pParseContext)
  ------------------
                      parseContext.longVectorCheck((yyvsp[0].lex).loc, "vector", parseContext.symbolTable.atBuiltInLevel());
  ------------------
  |  |  756|  36.2k|#define parseContext (*pParseContext)
  ------------------
11401|  36.2k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  36.2k|#define parseContext (*pParseContext)
  ------------------
11402|  36.2k|        (yyval.interm.type).basicType = EbtLongVector;
11403|  36.2k|        (yyval.interm.type).longVector = true;
11404|  36.2k|    }
11405|  36.2k|#line 11406 "MachineIndependent/glslang_tab.cpp"
11406|  36.2k|    break;
11407|       |
11408|      0|  case 561: /* type_specifier_nonarray: spirv_type_specifier  */
  ------------------
  |  Branch (11408:3): [True: 0, False: 12.5M]
  ------------------
11409|      0|#line 3678 "MachineIndependent/glslang.y"
11410|      0|                           {
11411|      0|        parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11412|      0|        (yyval.interm.type) = (yyvsp[0].interm.type);
11413|      0|    }
11414|      0|#line 11415 "MachineIndependent/glslang_tab.cpp"
11415|      0|    break;
11416|       |
11417|      0|  case 562: /* type_specifier_nonarray: HITOBJECTNV  */
  ------------------
  |  Branch (11417:3): [True: 0, False: 12.5M]
  ------------------
11418|      0|#line 3682 "MachineIndependent/glslang.y"
11419|      0|                  {
11420|      0|       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11421|      0|       (yyval.interm.type).basicType = EbtHitObjectNV;
11422|      0|    }
11423|      0|#line 11424 "MachineIndependent/glslang_tab.cpp"
11424|      0|    break;
11425|       |
11426|      0|  case 563: /* type_specifier_nonarray: HITOBJECTEXT  */
  ------------------
  |  Branch (11426:3): [True: 0, False: 12.5M]
  ------------------
11427|      0|#line 3686 "MachineIndependent/glslang.y"
11428|      0|                   {
11429|      0|       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11430|      0|       (yyval.interm.type).basicType = EbtHitObjectEXT;
11431|      0|    }
11432|      0|#line 11433 "MachineIndependent/glslang_tab.cpp"
11433|      0|    break;
11434|       |
11435|     10|  case 564: /* type_specifier_nonarray: struct_specifier  */
  ------------------
  |  Branch (11435:3): [True: 10, False: 12.5M]
  ------------------
11436|     10|#line 3690 "MachineIndependent/glslang.y"
11437|     10|                       {
11438|     10|        (yyval.interm.type) = (yyvsp[0].interm.type);
11439|     10|        (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
  |  Branch (11439:49): [True: 10, False: 0]
  ------------------
11440|     10|        parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
11441|     10|    }
11442|     10|#line 11443 "MachineIndependent/glslang_tab.cpp"
11443|     10|    break;
11444|       |
11445|     60|  case 565: /* type_specifier_nonarray: TYPE_NAME  */
  ------------------
  |  Branch (11445:3): [True: 60, False: 12.5M]
  ------------------
11446|     60|#line 3695 "MachineIndependent/glslang.y"
11447|     60|                {
11448|       |        //
11449|       |        // This is for user defined type names.  The lexical phase looked up the
11450|       |        // type.
11451|       |        //
11452|     60|        if (const TVariable* variable = ((yyvsp[0].lex).symbol)->getAsVariable()) {
  ------------------
  |  Branch (11452:30): [True: 60, False: 0]
  ------------------
11453|     60|            const TType& structure = variable->getType();
11454|     60|            (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|     60|#define parseContext (*pParseContext)
  ------------------
11455|     60|            (yyval.interm.type).basicType = EbtStruct;
11456|     60|            (yyval.interm.type).userDef = &structure;
11457|     60|        } else
11458|      0|            parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11459|     60|    }
11460|     60|#line 11461 "MachineIndependent/glslang_tab.cpp"
11461|     60|    break;
11462|       |
11463|  85.4k|  case 566: /* precision_qualifier: HIGH_PRECISION  */
  ------------------
  |  Branch (11463:3): [True: 85.4k, False: 12.4M]
  ------------------
11464|  85.4k|#line 3711 "MachineIndependent/glslang.y"
11465|  85.4k|                     {
11466|  85.4k|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
  ------------------
  |  |  756|  85.4k|#define parseContext (*pParseContext)
  ------------------
11467|  85.4k|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|  85.4k|#define parseContext (*pParseContext)
  ------------------
11468|  85.4k|        parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
  ------------------
  |  |  756|  85.4k|#define parseContext (*pParseContext)
  ------------------
11469|  85.4k|    }
11470|  85.4k|#line 11471 "MachineIndependent/glslang_tab.cpp"
11471|  85.4k|    break;
11472|       |
11473|    844|  case 567: /* precision_qualifier: MEDIUM_PRECISION  */
  ------------------
  |  Branch (11473:3): [True: 844, False: 12.5M]
  ------------------
11474|    844|#line 3716 "MachineIndependent/glslang.y"
11475|    844|                       {
11476|    844|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
  ------------------
  |  |  756|    844|#define parseContext (*pParseContext)
  ------------------
11477|    844|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    844|#define parseContext (*pParseContext)
  ------------------
11478|    844|        parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
  ------------------
  |  |  756|    844|#define parseContext (*pParseContext)
  ------------------
11479|    844|    }
11480|    844|#line 11481 "MachineIndependent/glslang_tab.cpp"
11481|    844|    break;
11482|       |
11483|    272|  case 568: /* precision_qualifier: LOW_PRECISION  */
  ------------------
  |  Branch (11483:3): [True: 272, False: 12.5M]
  ------------------
11484|    272|#line 3721 "MachineIndependent/glslang.y"
11485|    272|                    {
11486|    272|        parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
  ------------------
  |  |  756|    272|#define parseContext (*pParseContext)
  ------------------
11487|    272|        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|    272|#define parseContext (*pParseContext)
  ------------------
11488|    272|        parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
  ------------------
  |  |  756|    272|#define parseContext (*pParseContext)
  ------------------
11489|    272|    }
11490|    272|#line 11491 "MachineIndependent/glslang_tab.cpp"
11491|    272|    break;
11492|       |
11493|     10|  case 569: /* $@3: %empty  */
  ------------------
  |  Branch (11493:3): [True: 10, False: 12.5M]
  ------------------
11494|     10|#line 3729 "MachineIndependent/glslang.y"
11495|     10|                                   { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
11496|     10|#line 11497 "MachineIndependent/glslang_tab.cpp"
11497|     10|    break;
11498|       |
11499|     10|  case 570: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE  */
  ------------------
  |  Branch (11499:3): [True: 10, False: 12.5M]
  ------------------
11500|     10|#line 3729 "MachineIndependent/glslang.y"
11501|     10|                                                                                                                   {
11502|     10|        TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
11503|     10|        parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
11504|       |
11505|     10|        TVariable* userTypeDef = new TVariable((yyvsp[-4].lex).string, *structure, true);
11506|     10|        if (! parseContext.symbolTable.insert(*userTypeDef))
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
  |  Branch (11506:13): [True: 0, False: 10]
  ------------------
11507|      0|            parseContext.error((yyvsp[-4].lex).loc, "redefinition", (yyvsp[-4].lex).string->c_str(), "struct");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11508|     10|        else if (parseContext.spvVersion.vulkanRelaxed
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
  |  Branch (11508:18): [True: 0, False: 10]
  ------------------
11509|      0|                 && structure->containsOpaque())
  ------------------
  |  Branch (11509:21): [True: 0, False: 0]
  ------------------
11510|      0|            parseContext.relaxedSymbols.push_back(structure->getTypeName());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11511|       |
11512|     10|        (yyval.interm.type).init((yyvsp[-5].lex).loc);
11513|     10|        (yyval.interm.type).basicType = EbtStruct;
11514|     10|        (yyval.interm.type).userDef = structure;
11515|     10|        --parseContext.structNestingLevel;
  ------------------
  |  |  756|     10|#define parseContext (*pParseContext)
  ------------------
11516|     10|    }
11517|     10|#line 11518 "MachineIndependent/glslang_tab.cpp"
11518|     10|    break;
11519|       |
11520|      0|  case 571: /* $@4: %empty  */
  ------------------
  |  Branch (11520:3): [True: 0, False: 12.5M]
  ------------------
11521|      0|#line 3745 "MachineIndependent/glslang.y"
11522|      0|                        { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11523|      0|#line 11524 "MachineIndependent/glslang_tab.cpp"
11524|      0|    break;
11525|       |
11526|      0|  case 572: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE  */
  ------------------
  |  Branch (11526:3): [True: 0, False: 12.5M]
  ------------------
11527|      0|#line 3745 "MachineIndependent/glslang.y"
11528|      0|                                                                                                        {
11529|      0|        TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
11530|      0|        (yyval.interm.type).init((yyvsp[-4].lex).loc);
11531|      0|        (yyval.interm.type).basicType = EbtStruct;
11532|      0|        (yyval.interm.type).userDef = structure;
11533|      0|        --parseContext.structNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11534|      0|    }
11535|      0|#line 11536 "MachineIndependent/glslang_tab.cpp"
11536|      0|    break;
11537|       |
11538|     10|  case 573: /* struct_declaration_list: struct_declaration_without_heap  */
  ------------------
  |  Branch (11538:3): [True: 10, False: 12.5M]
  ------------------
11539|     10|#line 3755 "MachineIndependent/glslang.y"
11540|     10|                                      {
11541|     10|        (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
11542|     10|    }
11543|     10|#line 11544 "MachineIndependent/glslang_tab.cpp"
11544|     10|    break;
11545|       |
11546|      0|  case 574: /* struct_declaration_list: struct_declaration_with_heap  */
  ------------------
  |  Branch (11546:3): [True: 0, False: 12.5M]
  ------------------
11547|      0|#line 3758 "MachineIndependent/glslang.y"
11548|      0|                                   {
11549|      0|        (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
11550|      0|    }
11551|      0|#line 11552 "MachineIndependent/glslang_tab.cpp"
11552|      0|    break;
11553|       |
11554|      0|  case 575: /* struct_declaration_list: struct_declaration_with_heap struct_declaration_without_heap  */
  ------------------
  |  Branch (11554:3): [True: 0, False: 12.5M]
  ------------------
11555|      0|#line 3761 "MachineIndependent/glslang.y"
11556|      0|                                                                   {
11557|      0|        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
11558|      0|        for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
  ------------------
  |  Branch (11558:34): [True: 0, False: 0]
  ------------------
11559|      0|            for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) {
  ------------------
  |  Branch (11559:38): [True: 0, False: 0]
  ------------------
11560|      0|                if ((*(yyval.interm.typeList))[j].type->getFieldName() == (*(yyvsp[0].interm.typeList))[i].type->getFieldName())
  ------------------
  |  Branch (11560:21): [True: 0, False: 0]
  ------------------
11561|      0|                    parseContext.error((*(yyvsp[0].interm.typeList))[i].loc, "duplicate member name:", "", (*(yyvsp[0].interm.typeList))[i].type->getFieldName().c_str());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11562|      0|            }
11563|      0|            (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
11564|      0|        }
11565|      0|    }
11566|      0|#line 11567 "MachineIndependent/glslang_tab.cpp"
11567|      0|    break;
11568|       |
11569|      0|  case 576: /* struct_declaration_list: struct_declaration_without_heap struct_declaration_with_heap  */
  ------------------
  |  Branch (11569:3): [True: 0, False: 12.5M]
  ------------------
11570|      0|#line 3771 "MachineIndependent/glslang.y"
11571|      0|                                                                   {
11572|      0|        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
11573|      0|        for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
  ------------------
  |  Branch (11573:34): [True: 0, False: 0]
  ------------------
11574|      0|            for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) {
  ------------------
  |  Branch (11574:38): [True: 0, False: 0]
  ------------------
11575|      0|                if ((*(yyval.interm.typeList))[j].type->getFieldName() == (*(yyvsp[0].interm.typeList))[i].type->getFieldName())
  ------------------
  |  Branch (11575:21): [True: 0, False: 0]
  ------------------
11576|      0|                    parseContext.error((*(yyvsp[0].interm.typeList))[i].loc, "duplicate member name:", "", (*(yyvsp[0].interm.typeList))[i].type->getFieldName().c_str());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11577|      0|            }
11578|      0|            (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
11579|      0|        }
11580|      0|    }
11581|      0|#line 11582 "MachineIndependent/glslang_tab.cpp"
11582|      0|    break;
11583|       |
11584|      0|  case 577: /* struct_declaration_with_heap: block_heap_inner_structure struct_declarator_list SEMICOLON  */
  ------------------
  |  Branch (11584:3): [True: 0, False: 12.5M]
  ------------------
11585|      0|#line 3784 "MachineIndependent/glslang.y"
11586|      0|                                                                  {
11587|      0|        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
11588|      0|        parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11589|      0|        parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier, (yyvsp[-2].interm.type).hasTypeParameter());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11590|       |
11591|      0|        for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
  ------------------
  |  Branch (11591:34): [True: 0, False: 0]
  ------------------
11592|      0|            TType type((yyvsp[-2].interm.type));
11593|      0|            type.setFieldName((*(yyval.interm.typeList))[i].type->getFieldName());
11594|      0|            type.transferArraySizes((*(yyval.interm.typeList))[i].type->getArraySizes());
11595|      0|            type.copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
11596|      0|            parseContext.arrayOfArrayVersionCheck((*(yyval.interm.typeList))[i].loc, type.getArraySizes());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11597|      0|            (*(yyval.interm.typeList))[i].type->shallowCopy(type);
11598|      0|        }
11599|      0|    }
11600|      0|#line 11601 "MachineIndependent/glslang_tab.cpp"
11601|      0|    break;
11602|       |
11603|      0|  case 578: /* $@5: %empty  */
  ------------------
  |  Branch (11603:3): [True: 0, False: 12.5M]
  ------------------
11604|      0|#line 3801 "MachineIndependent/glslang.y"
11605|      0|                                { parseContext.nestedBlockCheck((yyvsp[-1].interm.type).loc, true); }
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11606|      0|#line 11607 "MachineIndependent/glslang_tab.cpp"
11607|      0|    break;
11608|       |
11609|      0|  case 579: /* block_heap_inner_structure: type_qualifier LEFT_BRACE $@5 struct_declaration_without_heap RIGHT_BRACE  */
  ------------------
  |  Branch (11609:3): [True: 0, False: 12.5M]
  ------------------
11610|      0|#line 3801 "MachineIndependent/glslang.y"
11611|      0|                                                                                                                             {
11612|      0|        --parseContext.blockNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11613|      0|        parseContext.globalQualifierFixCheck((yyvsp[-4].interm.type).loc, (yyvsp[-4].interm.type).qualifier);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11614|      0|        parseContext.checkNoShaderLayouts((yyvsp[-4].interm.type).loc, (yyvsp[-4].interm.type).shaderQualifiers);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11615|      0|        (yyval.interm.type).init((yyvsp[-4].interm.type).loc);
11616|      0|        TType* innerStructure = new TType((yyvsp[-1].interm.typeList), TString(""));
11617|      0|        (yyval.interm.type).basicType = EbtBlock;
11618|      0|        (yyval.interm.type).userDef = innerStructure;
11619|      0|        (yyval.interm.type).qualifier = (yyvsp[-4].interm.type).qualifier;
11620|      0|        (yyval.interm.type).qualifier.layoutDescriptorHeap = true;
11621|      0|        (yyval.interm.type).qualifier.layoutDescriptorInnerBlock = true;
11622|      0|    }
11623|      0|#line 11624 "MachineIndependent/glslang_tab.cpp"
11624|      0|    break;
11625|       |
11626|     98|  case 580: /* struct_declaration_without_heap: struct_declaration  */
  ------------------
  |  Branch (11626:3): [True: 98, False: 12.5M]
  ------------------
11627|     98|#line 3816 "MachineIndependent/glslang.y"
11628|     98|                         {
11629|     98|        (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
11630|     98|    }
11631|     98|#line 11632 "MachineIndependent/glslang_tab.cpp"
11632|     98|    break;
11633|       |
11634|    399|  case 581: /* struct_declaration_without_heap: struct_declaration_without_heap struct_declaration  */
  ------------------
  |  Branch (11634:3): [True: 399, False: 12.5M]
  ------------------
11635|    399|#line 3819 "MachineIndependent/glslang.y"
11636|    399|                                                         {
11637|    399|        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
11638|    798|        for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
  ------------------
  |  Branch (11638:34): [True: 399, False: 399]
  ------------------
11639|  1.56k|            for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) {
  ------------------
  |  Branch (11639:38): [True: 1.16k, False: 399]
  ------------------
11640|  1.16k|                if ((*(yyval.interm.typeList))[j].type->getFieldName() == (*(yyvsp[0].interm.typeList))[i].type->getFieldName())
  ------------------
  |  Branch (11640:21): [True: 0, False: 1.16k]
  ------------------
11641|      0|                    parseContext.error((*(yyvsp[0].interm.typeList))[i].loc, "duplicate member name:", "", (*(yyvsp[0].interm.typeList))[i].type->getFieldName().c_str());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11642|  1.16k|            }
11643|    399|            (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
11644|    399|        }
11645|    399|    }
11646|    399|#line 11647 "MachineIndependent/glslang_tab.cpp"
11647|    399|    break;
11648|       |
11649|    462|  case 582: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON  */
  ------------------
  |  Branch (11649:3): [True: 462, False: 12.5M]
  ------------------
11650|    462|#line 3832 "MachineIndependent/glslang.y"
11651|    462|                                                      {
11652|    462|        if ((yyvsp[-2].interm.type).arraySizes) {
  ------------------
  |  Branch (11652:13): [True: 0, False: 462]
  ------------------
11653|      0|            parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11654|      0|            parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11655|      0|            if (parseContext.isEsProfile())
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (11655:17): [True: 0, False: 0]
  ------------------
11656|      0|                parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11657|      0|        }
11658|       |
11659|    462|        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
11660|       |
11661|    462|        parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
  ------------------
  |  |  756|    462|#define parseContext (*pParseContext)
  ------------------
11662|    462|        parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier, (yyvsp[-2].interm.type).hasTypeParameter());
  ------------------
  |  |  756|    462|#define parseContext (*pParseContext)
  ------------------
11663|       |
11664|    924|        for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
  ------------------
  |  Branch (11664:34): [True: 462, False: 462]
  ------------------
11665|    462|            TType type((yyvsp[-2].interm.type));
11666|    462|            type.setFieldName((*(yyval.interm.typeList))[i].type->getFieldName());
11667|    462|            type.transferArraySizes((*(yyval.interm.typeList))[i].type->getArraySizes());
11668|    462|            type.copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
11669|    462|            parseContext.arrayOfArrayVersionCheck((*(yyval.interm.typeList))[i].loc, type.getArraySizes());
  ------------------
  |  |  756|    462|#define parseContext (*pParseContext)
  ------------------
11670|    462|            (*(yyval.interm.typeList))[i].type->shallowCopy(type);
11671|    462|        }
11672|    462|    }
11673|    462|#line 11674 "MachineIndependent/glslang_tab.cpp"
11674|    462|    break;
11675|       |
11676|     35|  case 583: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON  */
  ------------------
  |  Branch (11676:3): [True: 35, False: 12.5M]
  ------------------
11677|     35|#line 3854 "MachineIndependent/glslang.y"
11678|     35|                                                                     {
11679|     35|        if ((yyvsp[-2].interm.type).arraySizes) {
  ------------------
  |  Branch (11679:13): [True: 0, False: 35]
  ------------------
11680|      0|            parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11681|      0|            parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11682|      0|            if (parseContext.isEsProfile())
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (11682:17): [True: 0, False: 0]
  ------------------
11683|      0|                parseContext.arraySizeRequiredCheck((yyvsp[-2].interm.type).loc, *(yyvsp[-2].interm.type).arraySizes);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11684|      0|        }
11685|       |
11686|     35|        (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
11687|       |
11688|     35|        parseContext.memberQualifierCheck((yyvsp[-3].interm.type));
  ------------------
  |  |  756|     35|#define parseContext (*pParseContext)
  ------------------
11689|     35|        parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType);
  ------------------
  |  |  756|     35|#define parseContext (*pParseContext)
  ------------------
11690|     35|        parseContext.mergeQualifiers((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, (yyvsp[-3].interm.type).qualifier, true);
  ------------------
  |  |  756|     35|#define parseContext (*pParseContext)
  ------------------
11691|     35|        parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier, (yyvsp[-2].interm.type).hasTypeParameter());
  ------------------
  |  |  756|     35|#define parseContext (*pParseContext)
  ------------------
11692|       |
11693|     70|        for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) {
  ------------------
  |  Branch (11693:34): [True: 35, False: 35]
  ------------------
11694|     35|            TType type((yyvsp[-2].interm.type));
11695|     35|            type.setFieldName((*(yyval.interm.typeList))[i].type->getFieldName());
11696|     35|            type.transferArraySizes((*(yyval.interm.typeList))[i].type->getArraySizes());
11697|     35|            type.copyArrayInnerSizes((yyvsp[-2].interm.type).arraySizes);
11698|     35|            parseContext.arrayOfArrayVersionCheck((*(yyval.interm.typeList))[i].loc, type.getArraySizes());
  ------------------
  |  |  756|     35|#define parseContext (*pParseContext)
  ------------------
11699|     35|            (*(yyval.interm.typeList))[i].type->shallowCopy(type);
11700|     35|        }
11701|     35|    }
11702|     35|#line 11703 "MachineIndependent/glslang_tab.cpp"
11703|     35|    break;
11704|       |
11705|    497|  case 584: /* struct_declarator_list: struct_declarator  */
  ------------------
  |  Branch (11705:3): [True: 497, False: 12.5M]
  ------------------
11706|    497|#line 3881 "MachineIndependent/glslang.y"
11707|    497|                        {
11708|    497|        (yyval.interm.typeList) = new TTypeList;
11709|    497|        (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
11710|    497|    }
11711|    497|#line 11712 "MachineIndependent/glslang_tab.cpp"
11712|    497|    break;
11713|       |
11714|      0|  case 585: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
  ------------------
  |  Branch (11714:3): [True: 0, False: 12.5M]
  ------------------
11715|      0|#line 3885 "MachineIndependent/glslang.y"
11716|      0|                                                     {
11717|      0|        (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
11718|      0|    }
11719|      0|#line 11720 "MachineIndependent/glslang_tab.cpp"
11720|      0|    break;
11721|       |
11722|    267|  case 586: /* struct_declarator: IDENTIFIER  */
  ------------------
  |  Branch (11722:3): [True: 267, False: 12.5M]
  ------------------
11723|    267|#line 3891 "MachineIndependent/glslang.y"
11724|    267|                 {
11725|    267|        (yyval.interm.typeLine).type = new TType(EbtVoid);
11726|    267|        (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
11727|    267|        (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
11728|    267|    }
11729|    267|#line 11730 "MachineIndependent/glslang_tab.cpp"
11730|    267|    break;
11731|       |
11732|    230|  case 587: /* struct_declarator: IDENTIFIER array_specifier  */
  ------------------
  |  Branch (11732:3): [True: 230, False: 12.5M]
  ------------------
11733|    230|#line 3896 "MachineIndependent/glslang.y"
11734|    230|                                 {
11735|    230|        parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
  ------------------
  |  |  756|    230|#define parseContext (*pParseContext)
  ------------------
11736|       |
11737|    230|        (yyval.interm.typeLine).type = new TType(EbtVoid);
11738|    230|        (yyval.interm.typeLine).loc = (yyvsp[-1].lex).loc;
11739|    230|        (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
11740|    230|        (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
11741|    230|    }
11742|    230|#line 11743 "MachineIndependent/glslang_tab.cpp"
11743|    230|    break;
11744|       |
11745|  4.71k|  case 588: /* initializer: assignment_expression  */
  ------------------
  |  Branch (11745:3): [True: 4.71k, False: 12.5M]
  ------------------
11746|  4.71k|#line 3907 "MachineIndependent/glslang.y"
11747|  4.71k|                            {
11748|  4.71k|        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
11749|  4.71k|    }
11750|  4.71k|#line 11751 "MachineIndependent/glslang_tab.cpp"
11751|  4.71k|    break;
11752|       |
11753|      6|  case 589: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE  */
  ------------------
  |  Branch (11753:3): [True: 6, False: 12.5M]
  ------------------
11754|      6|#line 3910 "MachineIndependent/glslang.y"
11755|      6|                                              {
11756|      6|        const char* initFeature = "{ } style initializers";
11757|      6|        parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
  ------------------
  |  |  756|      6|#define parseContext (*pParseContext)
  ------------------
11758|      6|        parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
  ------------------
  |  |  756|      6|#define parseContext (*pParseContext)
  ------------------
11759|      6|        (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
11760|      6|    }
11761|      6|#line 11762 "MachineIndependent/glslang_tab.cpp"
11762|      6|    break;
11763|       |
11764|      0|  case 590: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE  */
  ------------------
  |  Branch (11764:3): [True: 0, False: 12.5M]
  ------------------
11765|      0|#line 3916 "MachineIndependent/glslang.y"
11766|      0|                                                    {
11767|      0|        const char* initFeature = "{ } style initializers";
11768|      0|        parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11769|      0|        parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11770|      0|        (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
11771|      0|    }
11772|      0|#line 11773 "MachineIndependent/glslang_tab.cpp"
11773|      0|    break;
11774|       |
11775|      0|  case 591: /* initializer: LEFT_BRACE RIGHT_BRACE  */
  ------------------
  |  Branch (11775:3): [True: 0, False: 12.5M]
  ------------------
11776|      0|#line 3922 "MachineIndependent/glslang.y"
11777|      0|                             {
11778|      0|        const char* initFeature = "empty { } initializer";
11779|      0|        parseContext.profileRequires((yyvsp[-1].lex).loc, EEsProfile, 0, E_GL_EXT_null_initializer, initFeature);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11780|      0|        parseContext.profileRequires((yyvsp[-1].lex).loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11781|      0|        (yyval.interm.intermTypedNode) = parseContext.intermediate.makeAggregate((yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11782|      0|    }
11783|      0|#line 11784 "MachineIndependent/glslang_tab.cpp"
11784|      0|    break;
11785|       |
11786|      6|  case 592: /* initializer_list: initializer  */
  ------------------
  |  Branch (11786:3): [True: 6, False: 12.5M]
  ------------------
11787|      6|#line 3931 "MachineIndependent/glslang.y"
11788|      6|                  {
11789|      6|        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
  ------------------
  |  |  756|      6|#define parseContext (*pParseContext)
  ------------------
11790|      6|    }
11791|      6|#line 11792 "MachineIndependent/glslang_tab.cpp"
11792|      6|    break;
11793|       |
11794|     18|  case 593: /* initializer_list: initializer_list COMMA initializer  */
  ------------------
  |  Branch (11794:3): [True: 18, False: 12.5M]
  ------------------
11795|     18|#line 3934 "MachineIndependent/glslang.y"
11796|     18|                                         {
11797|     18|        (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|     18|#define parseContext (*pParseContext)
  ------------------
11798|     18|    }
11799|     18|#line 11800 "MachineIndependent/glslang_tab.cpp"
11800|     18|    break;
11801|       |
11802|    240|  case 594: /* declaration_statement: declaration  */
  ------------------
  |  Branch (11802:3): [True: 240, False: 12.5M]
  ------------------
11803|    240|#line 3940 "MachineIndependent/glslang.y"
11804|    240|                  { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11805|    240|#line 11806 "MachineIndependent/glslang_tab.cpp"
11806|    240|    break;
11807|       |
11808|      0|  case 595: /* statement: compound_statement  */
  ------------------
  |  Branch (11808:3): [True: 0, False: 12.5M]
  ------------------
11809|      0|#line 3944 "MachineIndependent/glslang.y"
11810|      0|                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11811|      0|#line 11812 "MachineIndependent/glslang_tab.cpp"
11812|      0|    break;
11813|       |
11814|  2.65k|  case 596: /* statement: simple_statement  */
  ------------------
  |  Branch (11814:3): [True: 2.65k, False: 12.5M]
  ------------------
11815|  2.65k|#line 3945 "MachineIndependent/glslang.y"
11816|  2.65k|                          { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11817|  2.65k|#line 11818 "MachineIndependent/glslang_tab.cpp"
11818|  2.65k|    break;
11819|       |
11820|    240|  case 597: /* simple_statement: declaration_statement  */
  ------------------
  |  Branch (11820:3): [True: 240, False: 12.5M]
  ------------------
11821|    240|#line 3951 "MachineIndependent/glslang.y"
11822|    240|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11823|    240|#line 11824 "MachineIndependent/glslang_tab.cpp"
11824|    240|    break;
11825|       |
11826|  2.18k|  case 598: /* simple_statement: expression_statement  */
  ------------------
  |  Branch (11826:3): [True: 2.18k, False: 12.5M]
  ------------------
11827|  2.18k|#line 3952 "MachineIndependent/glslang.y"
11828|  2.18k|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11829|  2.18k|#line 11830 "MachineIndependent/glslang_tab.cpp"
11830|  2.18k|    break;
11831|       |
11832|      0|  case 599: /* simple_statement: selection_statement  */
  ------------------
  |  Branch (11832:3): [True: 0, False: 12.5M]
  ------------------
11833|      0|#line 3953 "MachineIndependent/glslang.y"
11834|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11835|      0|#line 11836 "MachineIndependent/glslang_tab.cpp"
11836|      0|    break;
11837|       |
11838|      0|  case 600: /* simple_statement: switch_statement  */
  ------------------
  |  Branch (11838:3): [True: 0, False: 12.5M]
  ------------------
11839|      0|#line 3954 "MachineIndependent/glslang.y"
11840|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11841|      0|#line 11842 "MachineIndependent/glslang_tab.cpp"
11842|      0|    break;
11843|       |
11844|      0|  case 601: /* simple_statement: case_label  */
  ------------------
  |  Branch (11844:3): [True: 0, False: 12.5M]
  ------------------
11845|      0|#line 3955 "MachineIndependent/glslang.y"
11846|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11847|      0|#line 11848 "MachineIndependent/glslang_tab.cpp"
11848|      0|    break;
11849|       |
11850|      0|  case 602: /* simple_statement: iteration_statement  */
  ------------------
  |  Branch (11850:3): [True: 0, False: 12.5M]
  ------------------
11851|      0|#line 3956 "MachineIndependent/glslang.y"
11852|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11853|      0|#line 11854 "MachineIndependent/glslang_tab.cpp"
11854|      0|    break;
11855|       |
11856|    234|  case 603: /* simple_statement: jump_statement  */
  ------------------
  |  Branch (11856:3): [True: 234, False: 12.5M]
  ------------------
11857|    234|#line 3957 "MachineIndependent/glslang.y"
11858|    234|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11859|    234|#line 11860 "MachineIndependent/glslang_tab.cpp"
11860|    234|    break;
11861|       |
11862|      0|  case 604: /* simple_statement: demote_statement  */
  ------------------
  |  Branch (11862:3): [True: 0, False: 12.5M]
  ------------------
11863|      0|#line 3958 "MachineIndependent/glslang.y"
11864|      0|                            { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11865|      0|#line 11866 "MachineIndependent/glslang_tab.cpp"
11866|      0|    break;
11867|       |
11868|      0|  case 605: /* demote_statement: DEMOTE SEMICOLON  */
  ------------------
  |  Branch (11868:3): [True: 0, False: 12.5M]
  ------------------
11869|      0|#line 3962 "MachineIndependent/glslang.y"
11870|      0|                       {
11871|      0|        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "demote");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11872|      0|        parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11873|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDemote, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11874|      0|    }
11875|      0|#line 11876 "MachineIndependent/glslang_tab.cpp"
11876|      0|    break;
11877|       |
11878|      0|  case 606: /* compound_statement: LEFT_BRACE RIGHT_BRACE  */
  ------------------
  |  Branch (11878:3): [True: 0, False: 12.5M]
  ------------------
11879|      0|#line 3970 "MachineIndependent/glslang.y"
11880|      0|                             { (yyval.interm.intermNode) = 0; }
11881|      0|#line 11882 "MachineIndependent/glslang_tab.cpp"
11882|      0|    break;
11883|       |
11884|      0|  case 607: /* $@6: %empty  */
  ------------------
  |  Branch (11884:3): [True: 0, False: 12.5M]
  ------------------
11885|      0|#line 3971 "MachineIndependent/glslang.y"
11886|      0|                 {
11887|      0|        parseContext.symbolTable.push();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11888|      0|        ++parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11889|      0|    }
11890|      0|#line 11891 "MachineIndependent/glslang_tab.cpp"
11891|      0|    break;
11892|       |
11893|      0|  case 608: /* $@7: %empty  */
  ------------------
  |  Branch (11893:3): [True: 0, False: 12.5M]
  ------------------
11894|      0|#line 3975 "MachineIndependent/glslang.y"
11895|      0|                     {
11896|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11897|      0|        --parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11898|      0|    }
11899|      0|#line 11900 "MachineIndependent/glslang_tab.cpp"
11900|      0|    break;
11901|       |
11902|      0|  case 609: /* compound_statement: LEFT_BRACE $@6 statement_list $@7 RIGHT_BRACE  */
  ------------------
  |  Branch (11902:3): [True: 0, False: 12.5M]
  ------------------
11903|      0|#line 3979 "MachineIndependent/glslang.y"
11904|      0|                  {
11905|      0|        if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate()) {
  ------------------
  |  Branch (11905:13): [True: 0, False: 0]
  |  Branch (11905:46): [True: 0, False: 0]
  ------------------
11906|      0|            (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (11906:74): [True: 0, False: 0]
  ------------------
11907|      0|            (yyvsp[-2].interm.intermNode)->getAsAggregate()->setEndLoc((yyvsp[0].lex).loc);
11908|      0|        }
11909|      0|        (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
11910|      0|    }
11911|      0|#line 11912 "MachineIndependent/glslang_tab.cpp"
11912|      0|    break;
11913|       |
11914|      0|  case 610: /* statement_no_new_scope: compound_statement_no_new_scope  */
  ------------------
  |  Branch (11914:3): [True: 0, False: 12.5M]
  ------------------
11915|      0|#line 3989 "MachineIndependent/glslang.y"
11916|      0|                                      { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11917|      0|#line 11918 "MachineIndependent/glslang_tab.cpp"
11918|      0|    break;
11919|       |
11920|      0|  case 611: /* statement_no_new_scope: simple_statement  */
  ------------------
  |  Branch (11920:3): [True: 0, False: 12.5M]
  ------------------
11921|      0|#line 3990 "MachineIndependent/glslang.y"
11922|      0|                                      { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
11923|      0|#line 11924 "MachineIndependent/glslang_tab.cpp"
11924|      0|    break;
11925|       |
11926|      0|  case 612: /* $@8: %empty  */
  ------------------
  |  Branch (11926:3): [True: 0, False: 12.5M]
  ------------------
11927|      0|#line 3994 "MachineIndependent/glslang.y"
11928|      0|      {
11929|      0|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11930|      0|    }
11931|      0|#line 11932 "MachineIndependent/glslang_tab.cpp"
11932|      0|    break;
11933|       |
11934|      0|  case 613: /* statement_scoped: $@8 compound_statement  */
  ------------------
  |  Branch (11934:3): [True: 0, False: 12.5M]
  ------------------
11935|      0|#line 3997 "MachineIndependent/glslang.y"
11936|      0|                          {
11937|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11938|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
11939|      0|    }
11940|      0|#line 11941 "MachineIndependent/glslang_tab.cpp"
11941|      0|    break;
11942|       |
11943|      0|  case 614: /* $@9: %empty  */
  ------------------
  |  Branch (11943:3): [True: 0, False: 12.5M]
  ------------------
11944|      0|#line 4001 "MachineIndependent/glslang.y"
11945|      0|      {
11946|      0|        parseContext.symbolTable.push();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11947|      0|        ++parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11948|      0|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11949|      0|    }
11950|      0|#line 11951 "MachineIndependent/glslang_tab.cpp"
11951|      0|    break;
11952|       |
11953|      0|  case 615: /* statement_scoped: $@9 simple_statement  */
  ------------------
  |  Branch (11953:3): [True: 0, False: 12.5M]
  ------------------
11954|      0|#line 4006 "MachineIndependent/glslang.y"
11955|      0|                       {
11956|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11957|      0|        --parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11958|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11959|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
11960|      0|    }
11961|      0|#line 11962 "MachineIndependent/glslang_tab.cpp"
11962|      0|    break;
11963|       |
11964|      0|  case 616: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
  ------------------
  |  Branch (11964:3): [True: 0, False: 12.5M]
  ------------------
11965|      0|#line 4015 "MachineIndependent/glslang.y"
11966|      0|                             {
11967|      0|        (yyval.interm.intermNode) = 0;
11968|      0|    }
11969|      0|#line 11970 "MachineIndependent/glslang_tab.cpp"
11970|      0|    break;
11971|       |
11972|    240|  case 617: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
  ------------------
  |  Branch (11972:3): [True: 240, False: 12.5M]
  ------------------
11973|    240|#line 4018 "MachineIndependent/glslang.y"
11974|    240|                                            {
11975|    240|        if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate()) {
  ------------------
  |  Branch (11975:13): [True: 240, False: 0]
  |  Branch (11975:46): [True: 240, False: 0]
  ------------------
11976|    240|            (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
11977|    240|            (yyvsp[-1].interm.intermNode)->getAsAggregate()->setEndLoc((yyvsp[0].lex).loc);
11978|    240|        }
11979|    240|        (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
11980|    240|    }
11981|    240|#line 11982 "MachineIndependent/glslang_tab.cpp"
11982|    240|    break;
11983|       |
11984|    246|  case 618: /* statement_list: statement  */
  ------------------
  |  Branch (11984:3): [True: 246, False: 12.5M]
  ------------------
11985|    246|#line 4028 "MachineIndependent/glslang.y"
11986|    246|                {
11987|    246|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|    246|#define parseContext (*pParseContext)
  ------------------
11988|    246|        if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
  ------------------
  |  Branch (11988:13): [True: 246, False: 0]
  |  Branch (11988:45): [True: 3, False: 243]
  |  Branch (11988:97): [True: 0, False: 3]
  ------------------
11989|      3|                                            (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
  ------------------
  |  Branch (11989:45): [True: 0, False: 3]
  ------------------
11990|      0|            parseContext.wrapupSwitchSubsequence(0, (yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
11991|      0|            (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
11992|      0|        }
11993|    246|    }
11994|    246|#line 11995 "MachineIndependent/glslang_tab.cpp"
11995|    246|    break;
11996|       |
11997|  2.40k|  case 619: /* statement_list: statement_list statement  */
  ------------------
  |  Branch (11997:3): [True: 2.40k, False: 12.5M]
  ------------------
11998|  2.40k|#line 4036 "MachineIndependent/glslang.y"
11999|  2.40k|                               {
12000|  2.40k|        if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
  ------------------
  |  Branch (12000:13): [True: 2.40k, False: 3]
  |  Branch (12000:45): [True: 231, False: 2.17k]
  |  Branch (12000:97): [True: 0, False: 231]
  ------------------
12001|    231|                                            (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
  ------------------
  |  Branch (12001:45): [True: 0, False: 231]
  ------------------
12002|      0|            parseContext.wrapupSwitchSubsequence((yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0, (yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12002:50): [True: 0, False: 0]
  ------------------
12003|      0|            (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
12004|      0|        } else
12005|  2.40k|            (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|  2.40k|#define parseContext (*pParseContext)
  ------------------
12006|  2.40k|    }
12007|  2.40k|#line 12008 "MachineIndependent/glslang_tab.cpp"
12008|  2.40k|    break;
12009|       |
12010|      0|  case 620: /* expression_statement: SEMICOLON  */
  ------------------
  |  Branch (12010:3): [True: 0, False: 12.5M]
  ------------------
12011|      0|#line 4047 "MachineIndependent/glslang.y"
12012|      0|                 { (yyval.interm.intermNode) = 0; }
12013|      0|#line 12014 "MachineIndependent/glslang_tab.cpp"
12014|      0|    break;
12015|       |
12016|  2.18k|  case 621: /* expression_statement: expression SEMICOLON  */
  ------------------
  |  Branch (12016:3): [True: 2.18k, False: 12.5M]
  ------------------
12017|  2.18k|#line 4048 "MachineIndependent/glslang.y"
12018|  2.18k|                            { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
12019|  2.18k|#line 12020 "MachineIndependent/glslang_tab.cpp"
12020|  2.18k|    break;
12021|       |
12022|      0|  case 622: /* selection_statement: selection_statement_nonattributed  */
  ------------------
  |  Branch (12022:3): [True: 0, False: 12.5M]
  ------------------
12023|      0|#line 4052 "MachineIndependent/glslang.y"
12024|      0|                                        {
12025|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12026|      0|    }
12027|      0|#line 12028 "MachineIndependent/glslang_tab.cpp"
12028|      0|    break;
12029|       |
12030|      0|  case 623: /* selection_statement: attribute selection_statement_nonattributed  */
  ------------------
  |  Branch (12030:3): [True: 0, False: 12.5M]
  ------------------
12031|      0|#line 4055 "MachineIndependent/glslang.y"
12032|      0|                                                  {
12033|      0|        parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12034|      0|        parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12035|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12036|      0|    }
12037|      0|#line 12038 "MachineIndependent/glslang_tab.cpp"
12038|      0|    break;
12039|       |
12040|      0|  case 624: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement  */
  ------------------
  |  Branch (12040:3): [True: 0, False: 12.5M]
  ------------------
12041|      0|#line 4062 "MachineIndependent/glslang.y"
12042|      0|                                                                    {
12043|      0|        parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12044|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12045|      0|    }
12046|      0|#line 12047 "MachineIndependent/glslang_tab.cpp"
12047|      0|    break;
12048|       |
12049|      0|  case 625: /* selection_rest_statement: statement_scoped ELSE statement_scoped  */
  ------------------
  |  Branch (12049:3): [True: 0, False: 12.5M]
  ------------------
12050|      0|#line 4069 "MachineIndependent/glslang.y"
12051|      0|                                             {
12052|      0|        (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
12053|      0|        (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
12054|      0|    }
12055|      0|#line 12056 "MachineIndependent/glslang_tab.cpp"
12056|      0|    break;
12057|       |
12058|      0|  case 626: /* selection_rest_statement: statement_scoped  */
  ------------------
  |  Branch (12058:3): [True: 0, False: 12.5M]
  ------------------
12059|      0|#line 4073 "MachineIndependent/glslang.y"
12060|      0|                       {
12061|      0|        (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
12062|      0|        (yyval.interm.nodePair).node2 = 0;
12063|      0|    }
12064|      0|#line 12065 "MachineIndependent/glslang_tab.cpp"
12065|      0|    break;
12066|       |
12067|      0|  case 627: /* condition: expression  */
  ------------------
  |  Branch (12067:3): [True: 0, False: 12.5M]
  ------------------
12068|      0|#line 4081 "MachineIndependent/glslang.y"
12069|      0|                 {
12070|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode);
12071|      0|        parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12072|      0|    }
12073|      0|#line 12074 "MachineIndependent/glslang_tab.cpp"
12074|      0|    break;
12075|       |
12076|      0|  case 628: /* condition: fully_specified_type IDENTIFIER EQUAL initializer  */
  ------------------
  |  Branch (12076:3): [True: 0, False: 12.5M]
  ------------------
12077|      0|#line 4085 "MachineIndependent/glslang.y"
12078|      0|                                                        {
12079|      0|        parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12080|       |
12081|      0|        TType type((yyvsp[-3].interm.type));
12082|      0|        (yyval.interm.intermNode) = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12083|      0|    }
12084|      0|#line 12085 "MachineIndependent/glslang_tab.cpp"
12085|      0|    break;
12086|       |
12087|      0|  case 629: /* switch_statement: switch_statement_nonattributed  */
  ------------------
  |  Branch (12087:3): [True: 0, False: 12.5M]
  ------------------
12088|      0|#line 4094 "MachineIndependent/glslang.y"
12089|      0|                                     {
12090|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12091|      0|    }
12092|      0|#line 12093 "MachineIndependent/glslang_tab.cpp"
12093|      0|    break;
12094|       |
12095|      0|  case 630: /* switch_statement: attribute switch_statement_nonattributed  */
  ------------------
  |  Branch (12095:3): [True: 0, False: 12.5M]
  ------------------
12096|      0|#line 4097 "MachineIndependent/glslang.y"
12097|      0|                                               {
12098|      0|        parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12099|      0|        parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12100|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12101|      0|    }
12102|      0|#line 12103 "MachineIndependent/glslang_tab.cpp"
12103|      0|    break;
12104|       |
12105|      0|  case 631: /* $@10: %empty  */
  ------------------
  |  Branch (12105:3): [True: 0, False: 12.5M]
  ------------------
12106|      0|#line 4104 "MachineIndependent/glslang.y"
12107|      0|                                               {
12108|       |        // start new switch sequence on the switch stack
12109|      0|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12110|      0|        ++parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12111|      0|        parseContext.switchSequenceStack.push_back(new TIntermSequence);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12112|      0|        parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12113|      0|        parseContext.symbolTable.push();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12114|      0|    }
12115|      0|#line 12116 "MachineIndependent/glslang_tab.cpp"
12116|      0|    break;
12117|       |
12118|      0|  case 632: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@10 LEFT_BRACE switch_statement_list RIGHT_BRACE  */
  ------------------
  |  Branch (12118:3): [True: 0, False: 12.5M]
  ------------------
12119|      0|#line 4112 "MachineIndependent/glslang.y"
12120|      0|                                                 {
12121|      0|        (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12121:117): [True: 0, False: 0]
  ------------------
12122|      0|        delete parseContext.switchSequenceStack.back();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12123|      0|        parseContext.switchSequenceStack.pop_back();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12124|      0|        parseContext.switchLevel.pop_back();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12125|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12126|      0|        --parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12127|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12128|      0|    }
12129|      0|#line 12130 "MachineIndependent/glslang_tab.cpp"
12130|      0|    break;
12131|       |
12132|      0|  case 633: /* switch_statement_list: %empty  */
  ------------------
  |  Branch (12132:3): [True: 0, False: 12.5M]
  ------------------
12133|      0|#line 4124 "MachineIndependent/glslang.y"
12134|      0|                    {
12135|      0|        (yyval.interm.intermNode) = 0;
12136|      0|    }
12137|      0|#line 12138 "MachineIndependent/glslang_tab.cpp"
12138|      0|    break;
12139|       |
12140|      0|  case 634: /* switch_statement_list: statement_list  */
  ------------------
  |  Branch (12140:3): [True: 0, False: 12.5M]
  ------------------
12141|      0|#line 4127 "MachineIndependent/glslang.y"
12142|      0|                     {
12143|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12144|      0|    }
12145|      0|#line 12146 "MachineIndependent/glslang_tab.cpp"
12146|      0|    break;
12147|       |
12148|      0|  case 635: /* case_label: CASE expression COLON  */
  ------------------
  |  Branch (12148:3): [True: 0, False: 12.5M]
  ------------------
12149|      0|#line 4133 "MachineIndependent/glslang.y"
12150|      0|                            {
12151|      0|        (yyval.interm.intermNode) = 0;
12152|      0|        if (parseContext.switchLevel.size() == 0)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12152:13): [True: 0, False: 0]
  ------------------
12153|      0|            parseContext.error((yyvsp[-2].lex).loc, "cannot appear outside switch statement", "case", "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12154|      0|        else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12154:18): [True: 0, False: 0]
  ------------------
12155|      0|            parseContext.error((yyvsp[-2].lex).loc, "cannot be nested inside control flow", "case", "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12156|      0|        else {
12157|      0|            parseContext.constantValueCheck((yyvsp[-1].interm.intermTypedNode), "case");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12158|      0|            parseContext.integerCheck((yyvsp[-1].interm.intermTypedNode), "case");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12159|      0|            (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12160|      0|        }
12161|      0|    }
12162|      0|#line 12163 "MachineIndependent/glslang_tab.cpp"
12163|      0|    break;
12164|       |
12165|      0|  case 636: /* case_label: DEFAULT COLON  */
  ------------------
  |  Branch (12165:3): [True: 0, False: 12.5M]
  ------------------
12166|      0|#line 4145 "MachineIndependent/glslang.y"
12167|      0|                    {
12168|      0|        (yyval.interm.intermNode) = 0;
12169|      0|        if (parseContext.switchLevel.size() == 0)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12169:13): [True: 0, False: 0]
  ------------------
12170|      0|            parseContext.error((yyvsp[-1].lex).loc, "cannot appear outside switch statement", "default", "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12171|      0|        else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      else if (parseContext.switchLevel.back() != parseContext.statementNestingLevel)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12171:18): [True: 0, False: 0]
  ------------------
12172|      0|            parseContext.error((yyvsp[-1].lex).loc, "cannot be nested inside control flow", "default", "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12173|      0|        else
12174|      0|            (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12175|      0|    }
12176|      0|#line 12177 "MachineIndependent/glslang_tab.cpp"
12177|      0|    break;
12178|       |
12179|      0|  case 637: /* iteration_statement: iteration_statement_nonattributed  */
  ------------------
  |  Branch (12179:3): [True: 0, False: 12.5M]
  ------------------
12180|      0|#line 4157 "MachineIndependent/glslang.y"
12181|      0|                                        {
12182|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12183|      0|    }
12184|      0|#line 12185 "MachineIndependent/glslang_tab.cpp"
12185|      0|    break;
12186|       |
12187|      0|  case 638: /* iteration_statement: attribute iteration_statement_nonattributed  */
  ------------------
  |  Branch (12187:3): [True: 0, False: 12.5M]
  ------------------
12188|      0|#line 4160 "MachineIndependent/glslang.y"
12189|      0|                                                  {
12190|      0|        const char * extensions[2] = { E_GL_EXT_control_flow_attributes, E_GL_EXT_control_flow_attributes2 };
12191|      0|        parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 2, extensions, "attribute");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12192|      0|        parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12193|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12194|      0|    }
12195|      0|#line 12196 "MachineIndependent/glslang_tab.cpp"
12196|      0|    break;
12197|       |
12198|      0|  case 639: /* $@11: %empty  */
  ------------------
  |  Branch (12198:3): [True: 0, False: 12.5M]
  ------------------
12199|      0|#line 4168 "MachineIndependent/glslang.y"
12200|      0|                       {
12201|      0|        if (! parseContext.limits.whileLoops)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12201:13): [True: 0, False: 0]
  ------------------
12202|      0|            parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12203|      0|        parseContext.symbolTable.push();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12204|      0|        ++parseContext.loopNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12205|      0|        ++parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12206|      0|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12207|      0|    }
12208|      0|#line 12209 "MachineIndependent/glslang_tab.cpp"
12209|      0|    break;
12210|       |
12211|      0|  case 640: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@11 condition RIGHT_PAREN statement_no_new_scope  */
  ------------------
  |  Branch (12211:3): [True: 0, False: 12.5M]
  ------------------
12212|      0|#line 4176 "MachineIndependent/glslang.y"
12213|      0|                                                   {
12214|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12215|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermNode), 0, true, (yyvsp[-5].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12216|      0|        if (parseContext.intermediate.getDebugInfo()) {
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12216:13): [True: 0, False: 0]
  ------------------
12217|      0|            (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyval.interm.intermNode), (yyvsp[-5].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12218|      0|            (yyval.interm.intermNode)->getAsAggregate()->setOperator(EOpScope);
12219|      0|        }
12220|      0|        --parseContext.loopNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12221|      0|        --parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12222|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12223|      0|    }
12224|      0|#line 12225 "MachineIndependent/glslang_tab.cpp"
12225|      0|    break;
12226|       |
12227|      0|  case 641: /* $@12: %empty  */
  ------------------
  |  Branch (12227:3): [True: 0, False: 12.5M]
  ------------------
12228|      0|#line 4187 "MachineIndependent/glslang.y"
12229|      0|         {
12230|      0|        parseContext.symbolTable.push();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12231|      0|        ++parseContext.loopNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12232|      0|        ++parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12233|      0|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12234|      0|    }
12235|      0|#line 12236 "MachineIndependent/glslang_tab.cpp"
12236|      0|    break;
12237|       |
12238|      0|  case 642: /* iteration_statement_nonattributed: DO $@12 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON  */
  ------------------
  |  Branch (12238:3): [True: 0, False: 12.5M]
  ------------------
12239|      0|#line 4193 "MachineIndependent/glslang.y"
12240|      0|                                                                  {
12241|      0|        if (! parseContext.limits.whileLoops)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12241:13): [True: 0, False: 0]
  ------------------
12242|      0|            parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12243|       |
12244|      0|        parseContext.boolCheck((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12245|       |
12246|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[-5].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, false, (yyvsp[-4].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12247|      0|        if (parseContext.intermediate.getDebugInfo()) {
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12247:13): [True: 0, False: 0]
  ------------------
12248|      0|            (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyval.interm.intermNode), (yyvsp[-4].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12249|      0|            (yyval.interm.intermNode)->getAsAggregate()->setOperator(EOpScope);
12250|      0|        }
12251|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12252|      0|        --parseContext.loopNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12253|      0|        --parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12254|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12255|      0|    }
12256|      0|#line 12257 "MachineIndependent/glslang_tab.cpp"
12257|      0|    break;
12258|       |
12259|      0|  case 643: /* $@13: %empty  */
  ------------------
  |  Branch (12259:3): [True: 0, False: 12.5M]
  ------------------
12260|      0|#line 4209 "MachineIndependent/glslang.y"
12261|      0|                     {
12262|      0|        parseContext.symbolTable.push();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12263|      0|        ++parseContext.loopNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12264|      0|        ++parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12265|      0|        ++parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12266|      0|    }
12267|      0|#line 12268 "MachineIndependent/glslang_tab.cpp"
12268|      0|    break;
12269|       |
12270|      0|  case 644: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@13 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope  */
  ------------------
  |  Branch (12270:3): [True: 0, False: 12.5M]
  ------------------
12271|      0|#line 4215 "MachineIndependent/glslang.y"
12272|      0|                                                                               {
12273|      0|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12274|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12275|      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);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12276|      0|        if (! parseContext.limits.nonInductiveForLoops)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12276:13): [True: 0, False: 0]
  ------------------
12277|      0|            parseContext.inductiveLoopCheck((yyvsp[-6].lex).loc, (yyvsp[-3].interm.intermNode), forLoop);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12278|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyval.interm.intermNode), forLoop, (yyvsp[-6].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12279|      0|        (yyval.interm.intermNode)->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12279:66): [True: 0, False: 0]
  ------------------
12280|      0|        --parseContext.loopNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12281|      0|        --parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12282|      0|        --parseContext.controlFlowNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12283|      0|    }
12284|      0|#line 12285 "MachineIndependent/glslang_tab.cpp"
12285|      0|    break;
12286|       |
12287|      0|  case 645: /* for_init_statement: expression_statement  */
  ------------------
  |  Branch (12287:3): [True: 0, False: 12.5M]
  ------------------
12288|      0|#line 4230 "MachineIndependent/glslang.y"
12289|      0|                           {
12290|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12291|      0|    }
12292|      0|#line 12293 "MachineIndependent/glslang_tab.cpp"
12293|      0|    break;
12294|       |
12295|      0|  case 646: /* for_init_statement: declaration_statement  */
  ------------------
  |  Branch (12295:3): [True: 0, False: 12.5M]
  ------------------
12296|      0|#line 4233 "MachineIndependent/glslang.y"
12297|      0|                            {
12298|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12299|      0|    }
12300|      0|#line 12301 "MachineIndependent/glslang_tab.cpp"
12301|      0|    break;
12302|       |
12303|      0|  case 647: /* conditionopt: condition  */
  ------------------
  |  Branch (12303:3): [True: 0, False: 12.5M]
  ------------------
12304|      0|#line 4239 "MachineIndependent/glslang.y"
12305|      0|                {
12306|      0|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12307|      0|    }
12308|      0|#line 12309 "MachineIndependent/glslang_tab.cpp"
12309|      0|    break;
12310|       |
12311|      0|  case 648: /* conditionopt: %empty  */
  ------------------
  |  Branch (12311:3): [True: 0, False: 12.5M]
  ------------------
12312|      0|#line 4242 "MachineIndependent/glslang.y"
12313|      0|                        {
12314|      0|        (yyval.interm.intermNode) = 0;
12315|      0|    }
12316|      0|#line 12317 "MachineIndependent/glslang_tab.cpp"
12317|      0|    break;
12318|       |
12319|      0|  case 649: /* for_rest_statement: conditionopt SEMICOLON  */
  ------------------
  |  Branch (12319:3): [True: 0, False: 12.5M]
  ------------------
12320|      0|#line 4248 "MachineIndependent/glslang.y"
12321|      0|                             {
12322|      0|        (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermNode);
12323|      0|        (yyval.interm.nodePair).node2 = 0;
12324|      0|    }
12325|      0|#line 12326 "MachineIndependent/glslang_tab.cpp"
12326|      0|    break;
12327|       |
12328|      0|  case 650: /* for_rest_statement: conditionopt SEMICOLON expression  */
  ------------------
  |  Branch (12328:3): [True: 0, False: 12.5M]
  ------------------
12329|      0|#line 4252 "MachineIndependent/glslang.y"
12330|      0|                                         {
12331|      0|        (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
12332|      0|        (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
12333|      0|    }
12334|      0|#line 12335 "MachineIndependent/glslang_tab.cpp"
12335|      0|    break;
12336|       |
12337|      0|  case 651: /* jump_statement: CONTINUE SEMICOLON  */
  ------------------
  |  Branch (12337:3): [True: 0, False: 12.5M]
  ------------------
12338|      0|#line 4259 "MachineIndependent/glslang.y"
12339|      0|                         {
12340|      0|        if (parseContext.loopNestingLevel <= 0)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12340:13): [True: 0, False: 0]
  ------------------
12341|      0|            parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12342|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12343|      0|    }
12344|      0|#line 12345 "MachineIndependent/glslang_tab.cpp"
12345|      0|    break;
12346|       |
12347|      0|  case 652: /* jump_statement: BREAK SEMICOLON  */
  ------------------
  |  Branch (12347:3): [True: 0, False: 12.5M]
  ------------------
12348|      0|#line 4264 "MachineIndependent/glslang.y"
12349|      0|                      {
12350|      0|        if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12350:13): [True: 0, False: 0]
  ------------------
12351|      0|            parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12352|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12353|      0|    }
12354|      0|#line 12355 "MachineIndependent/glslang_tab.cpp"
12355|      0|    break;
12356|       |
12357|      0|  case 653: /* jump_statement: RETURN SEMICOLON  */
  ------------------
  |  Branch (12357:3): [True: 0, False: 12.5M]
  ------------------
12358|      0|#line 4269 "MachineIndependent/glslang.y"
12359|      0|                       {
12360|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12361|      0|        if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12361:13): [True: 0, False: 0]
  ------------------
12362|      0|            parseContext.error((yyvsp[-1].lex).loc, "non-void function must return a value", "return", "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12363|      0|        if (parseContext.inMain)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12363:13): [True: 0, False: 0]
  ------------------
12364|      0|            parseContext.postEntryPointReturn = true;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12365|      0|    }
12366|      0|#line 12367 "MachineIndependent/glslang_tab.cpp"
12367|      0|    break;
12368|       |
12369|    234|  case 654: /* jump_statement: RETURN expression SEMICOLON  */
  ------------------
  |  Branch (12369:3): [True: 234, False: 12.5M]
  ------------------
12370|    234|#line 4276 "MachineIndependent/glslang.y"
12371|    234|                                  {
12372|    234|        (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  756|    234|#define parseContext (*pParseContext)
  ------------------
12373|    234|    }
12374|    234|#line 12375 "MachineIndependent/glslang_tab.cpp"
12375|    234|    break;
12376|       |
12377|      0|  case 655: /* jump_statement: DISCARD SEMICOLON  */
  ------------------
  |  Branch (12377:3): [True: 0, False: 12.5M]
  ------------------
12378|      0|#line 4279 "MachineIndependent/glslang.y"
12379|      0|                        {
12380|      0|        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12381|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12382|      0|    }
12383|      0|#line 12384 "MachineIndependent/glslang_tab.cpp"
12384|      0|    break;
12385|       |
12386|      0|  case 656: /* jump_statement: TERMINATE_INVOCATION SEMICOLON  */
  ------------------
  |  Branch (12386:3): [True: 0, False: 12.5M]
  ------------------
12387|      0|#line 4283 "MachineIndependent/glslang.y"
12388|      0|                                     {
12389|      0|        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12390|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12391|      0|    }
12392|      0|#line 12393 "MachineIndependent/glslang_tab.cpp"
12393|      0|    break;
12394|       |
12395|      0|  case 657: /* jump_statement: TERMINATE_RAY SEMICOLON  */
  ------------------
  |  Branch (12395:3): [True: 0, False: 12.5M]
  ------------------
12396|      0|#line 4287 "MachineIndependent/glslang.y"
12397|      0|                              {
12398|      0|        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12399|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12400|      0|    }
12401|      0|#line 12402 "MachineIndependent/glslang_tab.cpp"
12402|      0|    break;
12403|       |
12404|      0|  case 658: /* jump_statement: IGNORE_INTERSECTION SEMICOLON  */
  ------------------
  |  Branch (12404:3): [True: 0, False: 12.5M]
  ------------------
12405|      0|#line 4291 "MachineIndependent/glslang.y"
12406|      0|                                    {
12407|      0|        parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12408|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12409|      0|    }
12410|      0|#line 12411 "MachineIndependent/glslang_tab.cpp"
12411|      0|    break;
12412|       |
12413|    534|  case 659: /* translation_unit: external_declaration  */
  ------------------
  |  Branch (12413:3): [True: 534, False: 12.5M]
  ------------------
12414|    534|#line 4300 "MachineIndependent/glslang.y"
12415|    534|                           {
12416|    534|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12417|    534|        parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
  ------------------
  |  |  756|    534|#define parseContext (*pParseContext)
  ------------------
12418|    534|    }
12419|    534|#line 12420 "MachineIndependent/glslang_tab.cpp"
12420|    534|    break;
12421|       |
12422|   480k|  case 660: /* translation_unit: translation_unit external_declaration  */
  ------------------
  |  Branch (12422:3): [True: 480k, False: 12.0M]
  ------------------
12423|   480k|#line 4304 "MachineIndependent/glslang.y"
12424|   480k|                                            {
12425|   480k|        if ((yyvsp[0].interm.intermNode) != nullptr) {
  ------------------
  |  Branch (12425:13): [True: 240, False: 480k]
  ------------------
12426|    240|            (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|    240|#define parseContext (*pParseContext)
  ------------------
12427|    240|            parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
  ------------------
  |  |  756|    240|#define parseContext (*pParseContext)
  ------------------
12428|    240|        }
12429|   480k|    }
12430|   480k|#line 12431 "MachineIndependent/glslang_tab.cpp"
12431|   480k|    break;
12432|       |
12433|    240|  case 661: /* external_declaration: function_definition  */
  ------------------
  |  Branch (12433:3): [True: 240, False: 12.5M]
  ------------------
12434|    240|#line 4313 "MachineIndependent/glslang.y"
12435|    240|                          {
12436|    240|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12437|    240|    }
12438|    240|#line 12439 "MachineIndependent/glslang_tab.cpp"
12439|    240|    break;
12440|       |
12441|   480k|  case 662: /* external_declaration: declaration  */
  ------------------
  |  Branch (12441:3): [True: 480k, False: 12.0M]
  ------------------
12442|   480k|#line 4316 "MachineIndependent/glslang.y"
12443|   480k|                  {
12444|   480k|        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
12445|   480k|    }
12446|   480k|#line 12447 "MachineIndependent/glslang_tab.cpp"
12447|   480k|    break;
12448|       |
12449|      0|  case 663: /* external_declaration: SEMICOLON  */
  ------------------
  |  Branch (12449:3): [True: 0, False: 12.5M]
  ------------------
12450|      0|#line 4319 "MachineIndependent/glslang.y"
12451|      0|                {
12452|      0|        parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12453|      0|        parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12454|      0|        (yyval.interm.intermNode) = nullptr;
12455|      0|    }
12456|      0|#line 12457 "MachineIndependent/glslang_tab.cpp"
12457|      0|    break;
12458|       |
12459|    246|  case 664: /* $@14: %empty  */
  ------------------
  |  Branch (12459:3): [True: 246, False: 12.5M]
  ------------------
12460|    246|#line 4327 "MachineIndependent/glslang.y"
12461|    246|                         {
12462|    246|        (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
  ------------------
  |  |  756|    246|#define parseContext (*pParseContext)
  ------------------
12463|    246|        (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
  ------------------
  |  |  756|    246|#define parseContext (*pParseContext)
  ------------------
12464|       |
12465|       |        // For ES 100 only, according to ES shading language 100 spec: A function
12466|       |        // body has a scope nested inside the function's definition.
12467|    246|        if (parseContext.profile == EEsProfile && parseContext.version == 100)
  ------------------
  |  |  756|    246|#define parseContext (*pParseContext)
  ------------------
                      if (parseContext.profile == EEsProfile && parseContext.version == 100)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12467:13): [True: 0, False: 246]
  |  Branch (12467:51): [True: 0, False: 0]
  ------------------
12468|      0|        {
12469|      0|            parseContext.symbolTable.push();
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12470|      0|            ++parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12471|      0|        }
12472|    246|    }
12473|    246|#line 12474 "MachineIndependent/glslang_tab.cpp"
12474|    246|    break;
12475|       |
12476|    240|  case 665: /* function_definition: function_prototype $@14 compound_statement_no_new_scope  */
  ------------------
  |  Branch (12476:3): [True: 240, False: 12.5M]
  ------------------
12477|    240|#line 4339 "MachineIndependent/glslang.y"
12478|    240|                                    {
12479|       |        //   May be best done as post process phase on intermediate code
12480|    240|        if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
  ------------------
  |  |  756|    240|#define parseContext (*pParseContext)
  ------------------
                      if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
  ------------------
  |  |  756|    234|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12480:13): [True: 234, False: 6]
  |  Branch (12480:76): [True: 0, False: 234]
  ------------------
12481|      0|            parseContext.error((yyvsp[-2].interm).loc, "function does not return a value:", "", (yyvsp[-2].interm).function->getName().c_str());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12482|    240|        parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|    240|#define parseContext (*pParseContext)
  ------------------
                      parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|    240|#define parseContext (*pParseContext)
  ------------------
12483|    240|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|    240|#define parseContext (*pParseContext)
  ------------------
12484|    240|        (yyval.interm.intermNode)->getAsAggregate()->setLinkType((yyvsp[-2].interm).function->getLinkType());
12485|    240|        parseContext.intermediate.setAggregateOperator((yyval.interm.intermNode), EOpFunction, (yyvsp[-2].interm).function->getType(), (yyvsp[-2].interm).loc);
  ------------------
  |  |  756|    240|#define parseContext (*pParseContext)
  ------------------
12486|    240|        (yyval.interm.intermNode)->getAsAggregate()->setName((yyvsp[-2].interm).function->getMangledName().c_str());
12487|       |
12488|       |        // store the pragma information for debug and optimize and other vendor specific
12489|       |        // information. This information can be queried from the parse tree
12490|    240|        (yyval.interm.intermNode)->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize);
  ------------------
  |  |  756|    240|#define parseContext (*pParseContext)
  ------------------
12491|    240|        (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug);
  ------------------
  |  |  756|    240|#define parseContext (*pParseContext)
  ------------------
12492|    240|        (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable);
  ------------------
  |  |  756|    240|#define parseContext (*pParseContext)
  ------------------
12493|       |
12494|       |        // Set currentFunctionType to empty pointer when goes outside of the function
12495|    240|        parseContext.currentFunctionType = nullptr;
  ------------------
  |  |  756|    240|#define parseContext (*pParseContext)
  ------------------
12496|       |
12497|       |        // For ES 100 only, according to ES shading language 100 spec: A function
12498|       |        // body has a scope nested inside the function's definition.
12499|    240|        if (parseContext.profile == EEsProfile && parseContext.version == 100)
  ------------------
  |  |  756|    240|#define parseContext (*pParseContext)
  ------------------
                      if (parseContext.profile == EEsProfile && parseContext.version == 100)
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
  |  Branch (12499:13): [True: 0, False: 240]
  |  Branch (12499:51): [True: 0, False: 0]
  ------------------
12500|      0|        {
12501|      0|            parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                          parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12502|      0|            --parseContext.statementNestingLevel;
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12503|      0|        }
12504|    240|    }
12505|    240|#line 12506 "MachineIndependent/glslang_tab.cpp"
12506|    240|    break;
12507|       |
12508|      0|  case 666: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET  */
  ------------------
  |  Branch (12508:3): [True: 0, False: 12.5M]
  ------------------
12509|      0|#line 4369 "MachineIndependent/glslang.y"
12510|      0|                                                                           {
12511|      0|        (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
12512|      0|    }
12513|      0|#line 12514 "MachineIndependent/glslang_tab.cpp"
12514|      0|    break;
12515|       |
12516|      0|  case 667: /* attribute_list: single_attribute  */
  ------------------
  |  Branch (12516:3): [True: 0, False: 12.5M]
  ------------------
12517|      0|#line 4374 "MachineIndependent/glslang.y"
12518|      0|                       {
12519|      0|        (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
12520|      0|    }
12521|      0|#line 12522 "MachineIndependent/glslang_tab.cpp"
12522|      0|    break;
12523|       |
12524|      0|  case 668: /* attribute_list: attribute_list COMMA single_attribute  */
  ------------------
  |  Branch (12524:3): [True: 0, False: 12.5M]
  ------------------
12525|      0|#line 4377 "MachineIndependent/glslang.y"
12526|      0|                                            {
12527|      0|        (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12528|      0|    }
12529|      0|#line 12530 "MachineIndependent/glslang_tab.cpp"
12530|      0|    break;
12531|       |
12532|      0|  case 669: /* single_attribute: IDENTIFIER  */
  ------------------
  |  Branch (12532:3): [True: 0, False: 12.5M]
  ------------------
12533|      0|#line 4382 "MachineIndependent/glslang.y"
12534|      0|                 {
12535|      0|        (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12536|      0|    }
12537|      0|#line 12538 "MachineIndependent/glslang_tab.cpp"
12538|      0|    break;
12539|       |
12540|      0|  case 670: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN  */
  ------------------
  |  Branch (12540:3): [True: 0, False: 12.5M]
  ------------------
12541|      0|#line 4385 "MachineIndependent/glslang.y"
12542|      0|                                                            {
12543|      0|        (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12544|      0|    }
12545|      0|#line 12546 "MachineIndependent/glslang_tab.cpp"
12546|      0|    break;
12547|       |
12548|      0|  case 671: /* spirv_requirements_list: spirv_requirements_parameter  */
  ------------------
  |  Branch (12548:3): [True: 0, False: 12.5M]
  ------------------
12549|      0|#line 4390 "MachineIndependent/glslang.y"
12550|      0|                                   {
12551|      0|        (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq);
12552|      0|    }
12553|      0|#line 12554 "MachineIndependent/glslang_tab.cpp"
12554|      0|    break;
12555|       |
12556|      0|  case 672: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter  */
  ------------------
  |  Branch (12556:3): [True: 0, False: 12.5M]
  ------------------
12557|      0|#line 4393 "MachineIndependent/glslang.y"
12558|      0|                                                                 {
12559|      0|        (yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12560|      0|    }
12561|      0|#line 12562 "MachineIndependent/glslang_tab.cpp"
12562|      0|    break;
12563|       |
12564|      0|  case 673: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET  */
  ------------------
  |  Branch (12564:3): [True: 0, False: 12.5M]
  ------------------
12565|      0|#line 4398 "MachineIndependent/glslang.y"
12566|      0|                                                                       {
12567|      0|        (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12568|      0|    }
12569|      0|#line 12570 "MachineIndependent/glslang_tab.cpp"
12570|      0|    break;
12571|       |
12572|      0|  case 674: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET  */
  ------------------
  |  Branch (12572:3): [True: 0, False: 12.5M]
  ------------------
12573|      0|#line 4401 "MachineIndependent/glslang.y"
12574|      0|                                                                        {
12575|      0|        (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12576|      0|    }
12577|      0|#line 12578 "MachineIndependent/glslang_tab.cpp"
12578|      0|    break;
12579|       |
12580|      0|  case 675: /* spirv_extension_list: STRING_LITERAL  */
  ------------------
  |  Branch (12580:3): [True: 0, False: 12.5M]
  ------------------
12581|      0|#line 4406 "MachineIndependent/glslang.y"
12582|      0|                     {
12583|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12584|      0|    }
12585|      0|#line 12586 "MachineIndependent/glslang_tab.cpp"
12586|      0|    break;
12587|       |
12588|      0|  case 676: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL  */
  ------------------
  |  Branch (12588:3): [True: 0, False: 12.5M]
  ------------------
12589|      0|#line 4409 "MachineIndependent/glslang.y"
12590|      0|                                                {
12591|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  756|      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));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12592|      0|    }
12593|      0|#line 12594 "MachineIndependent/glslang_tab.cpp"
12594|      0|    break;
12595|       |
12596|      0|  case 677: /* spirv_capability_list: INTCONSTANT  */
  ------------------
  |  Branch (12596:3): [True: 0, False: 12.5M]
  ------------------
12597|      0|#line 4414 "MachineIndependent/glslang.y"
12598|      0|                  {
12599|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
                      (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12600|      0|    }
12601|      0|#line 12602 "MachineIndependent/glslang_tab.cpp"
12602|      0|    break;
12603|       |
12604|      0|  case 678: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT  */
  ------------------
  |  Branch (12604:3): [True: 0, False: 12.5M]
  ------------------
12605|      0|#line 4417 "MachineIndependent/glslang.y"
12606|      0|                                              {
12607|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  756|      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));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12608|      0|    }
12609|      0|#line 12610 "MachineIndependent/glslang_tab.cpp"
12610|      0|    break;
12611|       |
12612|      0|  case 679: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
  ------------------
  |  Branch (12612:3): [True: 0, False: 12.5M]
  ------------------
12613|      0|#line 4422 "MachineIndependent/glslang.y"
12614|      0|                                                              {
12615|      0|        parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12616|      0|        (yyval.interm.intermNode) = 0;
12617|      0|    }
12618|      0|#line 12619 "MachineIndependent/glslang_tab.cpp"
12619|      0|    break;
12620|       |
12621|      0|  case 680: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
  ------------------
  |  Branch (12621:3): [True: 0, False: 12.5M]
  ------------------
12622|      0|#line 4426 "MachineIndependent/glslang.y"
12623|      0|                                                                                            {
12624|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12625|      0|        parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12626|      0|        (yyval.interm.intermNode) = 0;
12627|      0|    }
12628|      0|#line 12629 "MachineIndependent/glslang_tab.cpp"
12629|      0|    break;
12630|       |
12631|      0|  case 681: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (12631:3): [True: 0, False: 12.5M]
  ------------------
12632|      0|#line 4431 "MachineIndependent/glslang.y"
12633|      0|                                                                                                        {
12634|      0|        parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12635|      0|        (yyval.interm.intermNode) = 0;
12636|      0|    }
12637|      0|#line 12638 "MachineIndependent/glslang_tab.cpp"
12638|      0|    break;
12639|       |
12640|      0|  case 682: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (12640:3): [True: 0, False: 12.5M]
  ------------------
12641|      0|#line 4435 "MachineIndependent/glslang.y"
12642|      0|                                                                                                                                      {
12643|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12644|      0|        parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12645|      0|        (yyval.interm.intermNode) = 0;
12646|      0|    }
12647|      0|#line 12648 "MachineIndependent/glslang_tab.cpp"
12648|      0|    break;
12649|       |
12650|      0|  case 683: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (12650:3): [True: 0, False: 12.5M]
  ------------------
12651|      0|#line 4440 "MachineIndependent/glslang.y"
12652|      0|                                                                                                              {
12653|      0|        parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12654|      0|        (yyval.interm.intermNode) = 0;
12655|      0|    }
12656|      0|#line 12657 "MachineIndependent/glslang_tab.cpp"
12657|      0|    break;
12658|       |
12659|      0|  case 684: /* 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 (12659:3): [True: 0, False: 12.5M]
  ------------------
12660|      0|#line 4444 "MachineIndependent/glslang.y"
12661|      0|                                                                                                                                            {
12662|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12663|      0|        parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12664|      0|        (yyval.interm.intermNode) = 0;
12665|      0|    }
12666|      0|#line 12667 "MachineIndependent/glslang_tab.cpp"
12667|      0|    break;
12668|       |
12669|      0|  case 685: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter  */
  ------------------
  |  Branch (12669:3): [True: 0, False: 12.5M]
  ------------------
12670|      0|#line 4451 "MachineIndependent/glslang.y"
12671|      0|                                     {
12672|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12673|      0|    }
12674|      0|#line 12675 "MachineIndependent/glslang_tab.cpp"
12675|      0|    break;
12676|       |
12677|      0|  case 686: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter  */
  ------------------
  |  Branch (12677:3): [True: 0, False: 12.5M]
  ------------------
12678|      0|#line 4454 "MachineIndependent/glslang.y"
12679|      0|                                                                               {
12680|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12681|      0|    }
12682|      0|#line 12683 "MachineIndependent/glslang_tab.cpp"
12683|      0|    break;
12684|       |
12685|      0|  case 687: /* spirv_execution_mode_parameter: FLOATCONSTANT  */
  ------------------
  |  Branch (12685:3): [True: 0, False: 12.5M]
  ------------------
12686|      0|#line 4459 "MachineIndependent/glslang.y"
12687|      0|                    {
12688|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12689|      0|    }
12690|      0|#line 12691 "MachineIndependent/glslang_tab.cpp"
12691|      0|    break;
12692|       |
12693|      0|  case 688: /* spirv_execution_mode_parameter: INTCONSTANT  */
  ------------------
  |  Branch (12693:3): [True: 0, False: 12.5M]
  ------------------
12694|      0|#line 4462 "MachineIndependent/glslang.y"
12695|      0|                  {
12696|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12697|      0|    }
12698|      0|#line 12699 "MachineIndependent/glslang_tab.cpp"
12699|      0|    break;
12700|       |
12701|      0|  case 689: /* spirv_execution_mode_parameter: UINTCONSTANT  */
  ------------------
  |  Branch (12701:3): [True: 0, False: 12.5M]
  ------------------
12702|      0|#line 4465 "MachineIndependent/glslang.y"
12703|      0|                   {
12704|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12705|      0|    }
12706|      0|#line 12707 "MachineIndependent/glslang_tab.cpp"
12707|      0|    break;
12708|       |
12709|      0|  case 690: /* spirv_execution_mode_parameter: BOOLCONSTANT  */
  ------------------
  |  Branch (12709:3): [True: 0, False: 12.5M]
  ------------------
12710|      0|#line 4468 "MachineIndependent/glslang.y"
12711|      0|                   {
12712|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12713|      0|    }
12714|      0|#line 12715 "MachineIndependent/glslang_tab.cpp"
12715|      0|    break;
12716|       |
12717|      0|  case 691: /* spirv_execution_mode_parameter: STRING_LITERAL  */
  ------------------
  |  Branch (12717:3): [True: 0, False: 12.5M]
  ------------------
12718|      0|#line 4471 "MachineIndependent/glslang.y"
12719|      0|                     {
12720|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12721|      0|    }
12722|      0|#line 12723 "MachineIndependent/glslang_tab.cpp"
12723|      0|    break;
12724|       |
12725|      0|  case 692: /* spirv_execution_mode_id_parameter_list: constant_expression  */
  ------------------
  |  Branch (12725:3): [True: 0, False: 12.5M]
  ------------------
12726|      0|#line 4476 "MachineIndependent/glslang.y"
12727|      0|                          {
12728|      0|        if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
  ------------------
  |  Branch (12728:13): [True: 0, False: 0]
  ------------------
12729|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
  ------------------
  |  Branch (12729:13): [True: 0, False: 0]
  ------------------
12730|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtUint &&
  ------------------
  |  Branch (12730:13): [True: 0, False: 0]
  ------------------
12731|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtBool &&
  ------------------
  |  Branch (12731:13): [True: 0, False: 0]
  ------------------
12732|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtString)
  ------------------
  |  Branch (12732:13): [True: 0, False: 0]
  ------------------
12733|      0|            parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12734|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12735|      0|    }
12736|      0|#line 12737 "MachineIndependent/glslang_tab.cpp"
12737|      0|    break;
12738|       |
12739|      0|  case 693: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression  */
  ------------------
  |  Branch (12739:3): [True: 0, False: 12.5M]
  ------------------
12740|      0|#line 4485 "MachineIndependent/glslang.y"
12741|      0|                                                                       {
12742|      0|        if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
  ------------------
  |  Branch (12742:13): [True: 0, False: 0]
  ------------------
12743|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
  ------------------
  |  Branch (12743:13): [True: 0, False: 0]
  ------------------
12744|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtUint &&
  ------------------
  |  Branch (12744:13): [True: 0, False: 0]
  ------------------
12745|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtBool &&
  ------------------
  |  Branch (12745:13): [True: 0, False: 0]
  ------------------
12746|      0|            (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtString)
  ------------------
  |  Branch (12746:13): [True: 0, False: 0]
  ------------------
12747|      0|            parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12748|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12749|      0|    }
12750|      0|#line 12751 "MachineIndependent/glslang_tab.cpp"
12751|      0|    break;
12752|       |
12753|      0|  case 694: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
  ------------------
  |  Branch (12753:3): [True: 0, False: 12.5M]
  ------------------
12754|      0|#line 4496 "MachineIndependent/glslang.y"
12755|      0|                                                             {
12756|      0|        (yyval.interm.type).init((yyvsp[-3].lex).loc);
12757|      0|        (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass;
12758|      0|        (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i;
12759|      0|    }
12760|      0|#line 12761 "MachineIndependent/glslang_tab.cpp"
12761|      0|    break;
12762|       |
12763|      0|  case 695: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
  ------------------
  |  Branch (12763:3): [True: 0, False: 12.5M]
  ------------------
12764|      0|#line 4501 "MachineIndependent/glslang.y"
12765|      0|                                                                                           {
12766|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc);
12767|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12768|      0|        (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass;
12769|      0|        (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i;
12770|      0|    }
12771|      0|#line 12772 "MachineIndependent/glslang_tab.cpp"
12772|      0|    break;
12773|       |
12774|      0|  case 696: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
  ------------------
  |  Branch (12774:3): [True: 0, False: 12.5M]
  ------------------
12775|      0|#line 4509 "MachineIndependent/glslang.y"
12776|      0|                                                       {
12777|      0|        (yyval.interm.type).init((yyvsp[-3].lex).loc);
12778|      0|        (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i);
12779|      0|    }
12780|      0|#line 12781 "MachineIndependent/glslang_tab.cpp"
12781|      0|    break;
12782|       |
12783|      0|  case 697: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
  ------------------
  |  Branch (12783:3): [True: 0, False: 12.5M]
  ------------------
12784|      0|#line 4513 "MachineIndependent/glslang.y"
12785|      0|                                                                                     {
12786|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc);
12787|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12788|      0|        (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i);
12789|      0|    }
12790|      0|#line 12791 "MachineIndependent/glslang_tab.cpp"
12791|      0|    break;
12792|       |
12793|      0|  case 698: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (12793:3): [True: 0, False: 12.5M]
  ------------------
12794|      0|#line 4518 "MachineIndependent/glslang.y"
12795|      0|                                                                                            {
12796|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc);
12797|      0|        (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
12798|      0|    }
12799|      0|#line 12800 "MachineIndependent/glslang_tab.cpp"
12800|      0|    break;
12801|       |
12802|      0|  case 699: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (12802:3): [True: 0, False: 12.5M]
  ------------------
12803|      0|#line 4522 "MachineIndependent/glslang.y"
12804|      0|                                                                                                                          {
12805|      0|        (yyval.interm.type).init((yyvsp[-7].lex).loc);
12806|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12807|      0|        (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
12808|      0|    }
12809|      0|#line 12810 "MachineIndependent/glslang_tab.cpp"
12810|      0|    break;
12811|       |
12812|      0|  case 700: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (12812:3): [True: 0, False: 12.5M]
  ------------------
12813|      0|#line 4527 "MachineIndependent/glslang.y"
12814|      0|                                                                                                  {
12815|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc);
12816|      0|        (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
12817|      0|    }
12818|      0|#line 12819 "MachineIndependent/glslang_tab.cpp"
12819|      0|    break;
12820|       |
12821|      0|  case 701: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (12821:3): [True: 0, False: 12.5M]
  ------------------
12822|      0|#line 4531 "MachineIndependent/glslang.y"
12823|      0|                                                                                                                                {
12824|      0|        (yyval.interm.type).init((yyvsp[-7].lex).loc);
12825|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12826|      0|        (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
12827|      0|    }
12828|      0|#line 12829 "MachineIndependent/glslang_tab.cpp"
12829|      0|    break;
12830|       |
12831|      0|  case 702: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (12831:3): [True: 0, False: 12.5M]
  ------------------
12832|      0|#line 4536 "MachineIndependent/glslang.y"
12833|      0|                                                                                                          {
12834|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc);
12835|      0|        (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
12836|      0|    }
12837|      0|#line 12838 "MachineIndependent/glslang_tab.cpp"
12838|      0|    break;
12839|       |
12840|      0|  case 703: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (12840:3): [True: 0, False: 12.5M]
  ------------------
12841|      0|#line 4540 "MachineIndependent/glslang.y"
12842|      0|                                                                                                                                        {
12843|      0|        (yyval.interm.type).init((yyvsp[-7].lex).loc);
12844|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12845|      0|        (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
12846|      0|    }
12847|      0|#line 12848 "MachineIndependent/glslang_tab.cpp"
12848|      0|    break;
12849|       |
12850|      0|  case 704: /* spirv_decorate_parameter_list: spirv_decorate_parameter  */
  ------------------
  |  Branch (12850:3): [True: 0, False: 12.5M]
  ------------------
12851|      0|#line 4547 "MachineIndependent/glslang.y"
12852|      0|                               {
12853|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12854|      0|    }
12855|      0|#line 12856 "MachineIndependent/glslang_tab.cpp"
12856|      0|    break;
12857|       |
12858|      0|  case 705: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter  */
  ------------------
  |  Branch (12858:3): [True: 0, False: 12.5M]
  ------------------
12859|      0|#line 4550 "MachineIndependent/glslang.y"
12860|      0|                                                                   {
12861|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12862|      0|    }
12863|      0|#line 12864 "MachineIndependent/glslang_tab.cpp"
12864|      0|    break;
12865|       |
12866|      0|  case 706: /* spirv_decorate_parameter: FLOATCONSTANT  */
  ------------------
  |  Branch (12866:3): [True: 0, False: 12.5M]
  ------------------
12867|      0|#line 4555 "MachineIndependent/glslang.y"
12868|      0|                    {
12869|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12870|      0|    }
12871|      0|#line 12872 "MachineIndependent/glslang_tab.cpp"
12872|      0|    break;
12873|       |
12874|      0|  case 707: /* spirv_decorate_parameter: INTCONSTANT  */
  ------------------
  |  Branch (12874:3): [True: 0, False: 12.5M]
  ------------------
12875|      0|#line 4558 "MachineIndependent/glslang.y"
12876|      0|                  {
12877|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12878|      0|    }
12879|      0|#line 12880 "MachineIndependent/glslang_tab.cpp"
12880|      0|    break;
12881|       |
12882|      0|  case 708: /* spirv_decorate_parameter: UINTCONSTANT  */
  ------------------
  |  Branch (12882:3): [True: 0, False: 12.5M]
  ------------------
12883|      0|#line 4561 "MachineIndependent/glslang.y"
12884|      0|                   {
12885|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12886|      0|    }
12887|      0|#line 12888 "MachineIndependent/glslang_tab.cpp"
12888|      0|    break;
12889|       |
12890|      0|  case 709: /* spirv_decorate_parameter: BOOLCONSTANT  */
  ------------------
  |  Branch (12890:3): [True: 0, False: 12.5M]
  ------------------
12891|      0|#line 4564 "MachineIndependent/glslang.y"
12892|      0|                   {
12893|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12894|      0|    }
12895|      0|#line 12896 "MachineIndependent/glslang_tab.cpp"
12896|      0|    break;
12897|       |
12898|      0|  case 710: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter  */
  ------------------
  |  Branch (12898:3): [True: 0, False: 12.5M]
  ------------------
12899|      0|#line 4569 "MachineIndependent/glslang.y"
12900|      0|                                  {
12901|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12902|      0|    }
12903|      0|#line 12904 "MachineIndependent/glslang_tab.cpp"
12904|      0|    break;
12905|       |
12906|      0|  case 711: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter  */
  ------------------
  |  Branch (12906:3): [True: 0, False: 12.5M]
  ------------------
12907|      0|#line 4572 "MachineIndependent/glslang.y"
12908|      0|                                                                         {
12909|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12910|      0|    }
12911|      0|#line 12912 "MachineIndependent/glslang_tab.cpp"
12912|      0|    break;
12913|       |
12914|      0|  case 712: /* spirv_decorate_id_parameter: variable_identifier  */
  ------------------
  |  Branch (12914:3): [True: 0, False: 12.5M]
  ------------------
12915|      0|#line 4577 "MachineIndependent/glslang.y"
12916|      0|                          {
12917|      0|        if ((yyvsp[0].interm.intermTypedNode)->getAsConstantUnion() || (yyvsp[0].interm.intermTypedNode)->getAsSymbolNode())
  ------------------
  |  Branch (12917:13): [True: 0, False: 0]
  |  Branch (12917:72): [True: 0, False: 0]
  ------------------
12918|      0|            (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode);
12919|      0|        else
12920|      0|            parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "only allow constants or variables which are not elements of a composite", "", "");
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12921|      0|    }
12922|      0|#line 12923 "MachineIndependent/glslang_tab.cpp"
12923|      0|    break;
12924|       |
12925|      0|  case 713: /* spirv_decorate_id_parameter: FLOATCONSTANT  */
  ------------------
  |  Branch (12925:3): [True: 0, False: 12.5M]
  ------------------
12926|      0|#line 4583 "MachineIndependent/glslang.y"
12927|      0|                    {
12928|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12929|      0|    }
12930|      0|#line 12931 "MachineIndependent/glslang_tab.cpp"
12931|      0|    break;
12932|       |
12933|      0|  case 714: /* spirv_decorate_id_parameter: INTCONSTANT  */
  ------------------
  |  Branch (12933:3): [True: 0, False: 12.5M]
  ------------------
12934|      0|#line 4586 "MachineIndependent/glslang.y"
12935|      0|                  {
12936|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12937|      0|    }
12938|      0|#line 12939 "MachineIndependent/glslang_tab.cpp"
12939|      0|    break;
12940|       |
12941|      0|  case 715: /* spirv_decorate_id_parameter: UINTCONSTANT  */
  ------------------
  |  Branch (12941:3): [True: 0, False: 12.5M]
  ------------------
12942|      0|#line 4589 "MachineIndependent/glslang.y"
12943|      0|                   {
12944|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12945|      0|    }
12946|      0|#line 12947 "MachineIndependent/glslang_tab.cpp"
12947|      0|    break;
12948|       |
12949|      0|  case 716: /* spirv_decorate_id_parameter: BOOLCONSTANT  */
  ------------------
  |  Branch (12949:3): [True: 0, False: 12.5M]
  ------------------
12950|      0|#line 4592 "MachineIndependent/glslang.y"
12951|      0|                   {
12952|      0|        (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12953|      0|    }
12954|      0|#line 12955 "MachineIndependent/glslang_tab.cpp"
12955|      0|    break;
12956|       |
12957|      0|  case 717: /* spirv_decorate_string_parameter_list: STRING_LITERAL  */
  ------------------
  |  Branch (12957:3): [True: 0, False: 12.5M]
  ------------------
12958|      0|#line 4597 "MachineIndependent/glslang.y"
12959|      0|                     {
12960|      0|        (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12961|      0|            parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12962|      0|    }
12963|      0|#line 12964 "MachineIndependent/glslang_tab.cpp"
12964|      0|    break;
12965|       |
12966|      0|  case 718: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL  */
  ------------------
  |  Branch (12966:3): [True: 0, False: 12.5M]
  ------------------
12967|      0|#line 4601 "MachineIndependent/glslang.y"
12968|      0|                                                                {
12969|      0|        (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
  ------------------
  |  |  756|      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));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12970|      0|    }
12971|      0|#line 12972 "MachineIndependent/glslang_tab.cpp"
12972|      0|    break;
12973|       |
12974|      0|  case 719: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (12974:3): [True: 0, False: 12.5M]
  ------------------
12975|      0|#line 4606 "MachineIndependent/glslang.y"
12976|      0|                                                                                                         {
12977|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12978|      0|        (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams));
12979|      0|    }
12980|      0|#line 12981 "MachineIndependent/glslang_tab.cpp"
12981|      0|    break;
12982|       |
12983|      0|  case 720: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
  ------------------
  |  Branch (12983:3): [True: 0, False: 12.5M]
  ------------------
12984|      0|#line 4610 "MachineIndependent/glslang.y"
12985|      0|                                                                                                                                       {
12986|      0|        (yyval.interm.type).init((yyvsp[-7].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12987|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12988|      0|        (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams));
12989|      0|    }
12990|      0|#line 12991 "MachineIndependent/glslang_tab.cpp"
12991|      0|    break;
12992|       |
12993|      0|  case 721: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
  ------------------
  |  Branch (12993:3): [True: 0, False: 12.5M]
  ------------------
12994|      0|#line 4615 "MachineIndependent/glslang.y"
12995|      0|                                                                         {
12996|      0|        (yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
12997|      0|        (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst));
12998|      0|    }
12999|      0|#line 13000 "MachineIndependent/glslang_tab.cpp"
13000|      0|    break;
13001|       |
13002|      0|  case 722: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
  ------------------
  |  Branch (13002:3): [True: 0, False: 12.5M]
  ------------------
13003|      0|#line 4619 "MachineIndependent/glslang.y"
13004|      0|                                                                                                       {
13005|      0|        (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
13006|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
13007|      0|        (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst));
13008|      0|    }
13009|      0|#line 13010 "MachineIndependent/glslang_tab.cpp"
13010|      0|    break;
13011|       |
13012|      0|  case 723: /* spirv_type_parameter_list: spirv_type_parameter  */
  ------------------
  |  Branch (13012:3): [True: 0, False: 12.5M]
  ------------------
13013|      0|#line 4626 "MachineIndependent/glslang.y"
13014|      0|                           {
13015|      0|        (yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams);
13016|      0|    }
13017|      0|#line 13018 "MachineIndependent/glslang_tab.cpp"
13018|      0|    break;
13019|       |
13020|      0|  case 724: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter  */
  ------------------
  |  Branch (13020:3): [True: 0, False: 12.5M]
  ------------------
13021|      0|#line 4629 "MachineIndependent/glslang.y"
13022|      0|                                                           {
13023|      0|        (yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
13024|      0|    }
13025|      0|#line 13026 "MachineIndependent/glslang_tab.cpp"
13026|      0|    break;
13027|       |
13028|      0|  case 725: /* spirv_type_parameter: constant_expression  */
  ------------------
  |  Branch (13028:3): [True: 0, False: 12.5M]
  ------------------
13029|      0|#line 4634 "MachineIndependent/glslang.y"
13030|      0|                          {
13031|      0|        (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion());
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
13032|      0|    }
13033|      0|#line 13034 "MachineIndependent/glslang_tab.cpp"
13034|      0|    break;
13035|       |
13036|      0|  case 726: /* spirv_type_parameter: type_specifier_nonarray  */
  ------------------
  |  Branch (13036:3): [True: 0, False: 12.5M]
  ------------------
13037|      0|#line 4637 "MachineIndependent/glslang.y"
13038|      0|                              {
13039|      0|        (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
13040|      0|    }
13041|      0|#line 13042 "MachineIndependent/glslang_tab.cpp"
13042|      0|    break;
13043|       |
13044|      0|  case 727: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
  ------------------
  |  Branch (13044:3): [True: 0, False: 12.5M]
  ------------------
13045|      0|#line 4642 "MachineIndependent/glslang.y"
13046|      0|                                                                                {
13047|      0|        (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
13048|      0|    }
13049|      0|#line 13050 "MachineIndependent/glslang_tab.cpp"
13050|      0|    break;
13051|       |
13052|      0|  case 728: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
  ------------------
  |  Branch (13052:3): [True: 0, False: 12.5M]
  ------------------
13053|      0|#line 4645 "MachineIndependent/glslang.y"
13054|      0|                                                                                                              {
13055|      0|        parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
13056|      0|        (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
13057|      0|    }
13058|      0|#line 13059 "MachineIndependent/glslang_tab.cpp"
13059|      0|    break;
13060|       |
13061|      0|  case 729: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id  */
  ------------------
  |  Branch (13061:3): [True: 0, False: 12.5M]
  ------------------
13062|      0|#line 4651 "MachineIndependent/glslang.y"
13063|      0|                                     {
13064|      0|        (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst);
13065|      0|    }
13066|      0|#line 13067 "MachineIndependent/glslang_tab.cpp"
13067|      0|    break;
13068|       |
13069|      0|  case 730: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id  */
  ------------------
  |  Branch (13069:3): [True: 0, False: 12.5M]
  ------------------
13070|      0|#line 4654 "MachineIndependent/glslang.y"
13071|      0|                                                                            {
13072|      0|        (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst));
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
13073|      0|    }
13074|      0|#line 13075 "MachineIndependent/glslang_tab.cpp"
13075|      0|    break;
13076|       |
13077|      0|  case 731: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL  */
  ------------------
  |  Branch (13077:3): [True: 0, False: 12.5M]
  ------------------
13078|      0|#line 4659 "MachineIndependent/glslang.y"
13079|      0|                                      {
13080|      0|        (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
13081|      0|    }
13082|      0|#line 13083 "MachineIndependent/glslang_tab.cpp"
13083|      0|    break;
13084|       |
13085|      0|  case 732: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
  ------------------
  |  Branch (13085:3): [True: 0, False: 12.5M]
  ------------------
13086|      0|#line 4662 "MachineIndependent/glslang.y"
13087|      0|                                   {
13088|      0|        (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i);
  ------------------
  |  |  756|      0|#define parseContext (*pParseContext)
  ------------------
13089|      0|    }
13090|      0|#line 13091 "MachineIndependent/glslang_tab.cpp"
13091|      0|    break;
13092|       |
13093|       |
13094|      0|#line 13095 "MachineIndependent/glslang_tab.cpp"
13095|       |
13096|      0|      default: break;
  ------------------
  |  Branch (13096:7): [True: 0, False: 12.5M]
  ------------------
13097|  12.5M|    }
13098|       |  /* User semantic actions sometimes alter yychar, and that requires
13099|       |     that yytoken be updated with the new translation.  We take the
13100|       |     approach of translating immediately before every use of yytoken.
13101|       |     One alternative is translating here after every semantic action,
13102|       |     but that translation would be missed if the semantic action invokes
13103|       |     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
13104|       |     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
13105|       |     incorrect destructor might then be invoked immediately.  In the
13106|       |     case of YYERROR or YYBACKUP, subsequent parser actions might lead
13107|       |     to an incorrect destructor call or verbose syntax error message
13108|       |     before the lookahead is translated.  */
13109|  12.5M|  YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
  ------------------
  |  | 4800|  12.5M|# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
  |  | 4801|  12.5M|do {                                                                      \
  |  | 4802|  12.5M|  if (yydebug)                                                            \
  |  |  ------------------
  |  |  |  Branch (4802:7): [True: 0, False: 12.5M]
  |  |  ------------------
  |  | 4803|  12.5M|    {                                                                     \
  |  | 4804|      0|      YYFPRINTF (stderr, "%s ", Title);                                   \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4805|      0|      yy_symbol_print (stderr,                                            \
  |  | 4806|      0|                  Kind, Value, pParseContext); \
  |  | 4807|      0|      YYFPRINTF (stderr, "\n");                                           \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4808|      0|    }                                                                     \
  |  | 4809|  12.5M|} while (0)
  |  |  ------------------
  |  |  |  Branch (4809:10): [Folded, False: 12.5M]
  |  |  ------------------
  ------------------
13110|       |
13111|  12.5M|  YYPOPSTACK (yylen);
  ------------------
  |  | 5277|  12.5M|#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
  ------------------
13112|  12.5M|  yylen = 0;
13113|       |
13114|  12.5M|  *++yyvsp = yyval;
13115|       |
13116|       |  /* Now 'shift' the result of the reduction.  Determine what state
13117|       |     that goes to, based on the state we popped back to and the rule
13118|       |     number reduced by.  */
13119|  12.5M|  {
13120|  12.5M|    const int yylhs = yyr1[yyn] - YYNTOKENS;
  ------------------
  |  | 1089|  12.5M|#define YYNTOKENS  488
  ------------------
13121|  12.5M|    const int yyi = yypgoto[yylhs] + *yyssp;
13122|  12.5M|    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
  ------------------
  |  | 1086|  19.5M|#define YYLAST   13823
  ------------------
  |  Branch (13122:16): [True: 6.99M, False: 5.56M]
  |  Branch (13122:28): [True: 6.99M, False: 0]
  |  Branch (13122:45): [True: 4.11M, False: 2.88M]
  ------------------
13123|  12.5M|               ? yytable[yyi]
13124|  12.5M|               : yydefgoto[yylhs]);
13125|  12.5M|  }
13126|       |
13127|  12.5M|  goto yynewstate;
13128|       |
13129|       |
13130|       |/*--------------------------------------.
13131|       || yyerrlab -- here on detecting error.  |
13132|       |`--------------------------------------*/
13133|     22|yyerrlab:
13134|       |  /* Make sure we have latest lookahead translation.  See comments at
13135|       |     user semantic actions for why this is necessary.  */
13136|     22|  yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
  ------------------
  |  | 1104|     44|  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
  |  |  ------------------
  |  |  |  | 1098|     22|#define YYMAXUTOK   742
  |  |  ------------------
  |  |  |  Branch (1104:4): [True: 22, False: 0]
  |  |  |  Branch (1104:18): [True: 22, False: 0]
  |  |  ------------------
  |  | 1105|     44|   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
  |  |  ------------------
  |  |  |  |  100|     22|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  |  | 1106|     44|   : YYSYMBOL_YYUNDEF)
  ------------------
  |  Branch (13136:13): [True: 0, False: 22]
  ------------------
13137|       |  /* If not already recovering from an error, report this error.  */
13138|     22|  if (!yyerrstatus)
  ------------------
  |  Branch (13138:7): [True: 22, False: 0]
  ------------------
13139|     22|    {
13140|     22|      ++yynerrs;
13141|     22|      {
13142|     22|        yypcontext_t yyctx
13143|     22|          = {yyssp, yytoken};
13144|     22|        char const *yymsgp = YY_("syntax error");
  ------------------
  |  |  888|     22|#  define YY_(Msgid) Msgid
  ------------------
13145|     22|        int yysyntax_error_status;
13146|     22|        yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
13147|     22|        if (yysyntax_error_status == 0)
  ------------------
  |  Branch (13147:13): [True: 22, False: 0]
  ------------------
13148|     22|          yymsgp = yymsg;
13149|      0|        else if (yysyntax_error_status == -1)
  ------------------
  |  Branch (13149:18): [True: 0, False: 0]
  ------------------
13150|      0|          {
13151|      0|            if (yymsg != yymsgbuf)
  ------------------
  |  Branch (13151:17): [True: 0, False: 0]
  ------------------
13152|      0|              YYSTACK_FREE (yymsg);
  ------------------
  |  |  996|      0|#  define YYSTACK_FREE YYFREE
  |  |  ------------------
  |  |  |  | 1015|      0|#   define YYFREE free
  |  |  ------------------
  ------------------
13153|      0|            yymsg = YY_CAST (char *,
  ------------------
  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  ------------------
13154|      0|                             YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
13155|      0|            if (yymsg)
  ------------------
  |  Branch (13155:17): [True: 0, False: 0]
  ------------------
13156|      0|              {
13157|      0|                yysyntax_error_status
13158|      0|                  = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx);
13159|      0|                yymsgp = yymsg;
13160|      0|              }
13161|      0|            else
13162|      0|              {
13163|      0|                yymsg = yymsgbuf;
13164|      0|                yymsg_alloc = sizeof yymsgbuf;
13165|      0|                yysyntax_error_status = YYENOMEM;
13166|      0|              }
13167|      0|          }
13168|     22|        yyerror (pParseContext, yymsgp);
  ------------------
  |  |  757|     22|#define yyerror(context, msg) context->parserError(msg)
  ------------------
13169|     22|        if (yysyntax_error_status == YYENOMEM)
  ------------------
  |  Branch (13169:13): [True: 0, False: 22]
  ------------------
13170|      0|          YYNOMEM;
  ------------------
  |  | 4756|      0|#define YYNOMEM         goto yyexhaustedlab
  ------------------
13171|     22|      }
13172|     22|    }
13173|       |
13174|     22|  if (yyerrstatus == 3)
  ------------------
  |  Branch (13174:7): [True: 0, False: 22]
  ------------------
13175|      0|    {
13176|       |      /* If just tried and failed to reuse lookahead token after an
13177|       |         error, discard it.  */
13178|       |
13179|      0|      if (yychar <= YYEOF)
  ------------------
  |  Branch (13179:11): [True: 0, False: 0]
  ------------------
13180|      0|        {
13181|       |          /* Return failure if at end of input.  */
13182|      0|          if (yychar == YYEOF)
  ------------------
  |  Branch (13182:15): [True: 0, False: 0]
  ------------------
13183|      0|            YYABORT;
  ------------------
  |  | 4754|      0|#define YYABORT         goto yyabortlab
  ------------------
13184|      0|        }
13185|      0|      else
13186|      0|        {
13187|      0|          yydestruct ("Error: discarding",
13188|      0|                      yytoken, &yylval, pParseContext);
13189|      0|          yychar = YYEMPTY;
13190|      0|        }
13191|      0|    }
13192|       |
13193|       |  /* Else will try to reuse lookahead token after shifting the error
13194|       |     token.  */
13195|     22|  goto yyerrlab1;
13196|       |
13197|       |
13198|       |/*---------------------------------------------------.
13199|       || yyerrorlab -- error raised explicitly by YYERROR.  |
13200|       |`---------------------------------------------------*/
13201|     22|yyerrorlab:
13202|       |  /* Pacify compilers when the user code never invokes YYERROR and the
13203|       |     label yyerrorlab therefore never appears in user code.  */
13204|      0|  if (0)
  ------------------
  |  Branch (13204:7): [Folded, False: 0]
  ------------------
13205|      0|    YYERROR;
  ------------------
  |  | 4755|      0|#define YYERROR         goto yyerrorlab
  ------------------
13206|      0|  ++yynerrs;
13207|       |
13208|       |  /* Do not reclaim the symbols of the rule whose action triggered
13209|       |     this YYERROR.  */
13210|      0|  YYPOPSTACK (yylen);
  ------------------
  |  | 5277|      0|#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
  ------------------
13211|      0|  yylen = 0;
13212|      0|  YY_STACK_PRINT (yyss, yyssp);
  ------------------
  |  | 4863|      0|# define YY_STACK_PRINT(Bottom, Top)                            \
  |  | 4864|      0|do {                                                            \
  |  | 4865|      0|  if (yydebug)                                                  \
  |  |  ------------------
  |  |  |  Branch (4865:7): [True: 0, False: 0]
  |  |  ------------------
  |  | 4866|      0|    yy_stack_print ((Bottom), (Top));                           \
  |  | 4867|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (4867:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
13213|      0|  yystate = *yyssp;
13214|      0|  goto yyerrlab1;
13215|       |
13216|       |
13217|       |/*-------------------------------------------------------------.
13218|       || yyerrlab1 -- common code for both syntax error and YYERROR.  |
13219|       |`-------------------------------------------------------------*/
13220|     22|yyerrlab1:
13221|     22|  yyerrstatus = 3;      /* Each real token shifted decrements this.  */
13222|       |
13223|       |  /* Pop stack until we find a state that shifts the error token.  */
13224|     22|  for (;;)
13225|    104|    {
13226|    104|      yyn = yypact[yystate];
13227|    104|      if (!yypact_value_is_default (yyn))
  ------------------
  |  | 1451|    104|  ((Yyn) == YYPACT_NINF)
  |  |  ------------------
  |  |  |  | 1448|    104|#define YYPACT_NINF (-849)
  |  |  ------------------
  ------------------
  |  Branch (13227:11): [True: 99, False: 5]
  ------------------
13228|     99|        {
13229|     99|          yyn += YYSYMBOL_YYerror;
13230|     99|          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
  ------------------
  |  | 1086|    170|#define YYLAST   13823
  ------------------
  |  Branch (13230:15): [True: 71, False: 28]
  |  Branch (13230:27): [True: 71, False: 0]
  |  Branch (13230:44): [True: 0, False: 71]
  ------------------
13231|      0|            {
13232|      0|              yyn = yytable[yyn];
13233|      0|              if (0 < yyn)
  ------------------
  |  Branch (13233:19): [True: 0, False: 0]
  ------------------
13234|      0|                break;
13235|      0|            }
13236|     99|        }
13237|       |
13238|       |      /* Pop the current state because it cannot handle the error token.  */
13239|    104|      if (yyssp == yyss)
  ------------------
  |  Branch (13239:11): [True: 22, False: 82]
  ------------------
13240|     22|        YYABORT;
  ------------------
  |  | 4754|     22|#define YYABORT         goto yyabortlab
  ------------------
13241|       |
13242|       |
13243|     82|      yydestruct ("Error: popping",
13244|     82|                  YY_ACCESSING_SYMBOL (yystate), yyvsp, pParseContext);
  ------------------
  |  | 1271|     82|#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
  |  |  ------------------
  |  |  |  |  100|     82|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  ------------------
13245|     82|      YYPOPSTACK (1);
  ------------------
  |  | 5277|     82|#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
  ------------------
13246|     82|      yystate = *yyssp;
13247|     82|      YY_STACK_PRINT (yyss, yyssp);
  ------------------
  |  | 4863|     82|# define YY_STACK_PRINT(Bottom, Top)                            \
  |  | 4864|     82|do {                                                            \
  |  | 4865|     82|  if (yydebug)                                                  \
  |  |  ------------------
  |  |  |  Branch (4865:7): [True: 0, False: 82]
  |  |  ------------------
  |  | 4866|     82|    yy_stack_print ((Bottom), (Top));                           \
  |  | 4867|     82|} while (0)
  |  |  ------------------
  |  |  |  Branch (4867:10): [Folded, False: 82]
  |  |  ------------------
  ------------------
13248|     82|    }
13249|       |
13250|      0|  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
13251|      0|  *++yyvsp = yylval;
13252|      0|  YY_IGNORE_MAYBE_UNINITIALIZED_END
13253|       |
13254|       |
13255|       |  /* Shift the error token.  */
13256|      0|  YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
  ------------------
  |  | 4800|      0|# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
  |  | 4801|      0|do {                                                                      \
  |  | 4802|      0|  if (yydebug)                                                            \
  |  |  ------------------
  |  |  |  Branch (4802:7): [True: 0, False: 0]
  |  |  ------------------
  |  | 4803|      0|    {                                                                     \
  |  | 4804|      0|      YYFPRINTF (stderr, "%s ", Title);                                   \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4805|      0|      yy_symbol_print (stderr,                                            \
  |  | 4806|      0|                  Kind, Value, pParseContext); \
  |  | 4807|      0|      YYFPRINTF (stderr, "\n");                                           \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4808|      0|    }                                                                     \
  |  | 4809|      0|} while (0)
  |  |  ------------------
  |  |  |  Branch (4809:10): [Folded, False: 0]
  |  |  ------------------
  ------------------
13257|       |
13258|      0|  yystate = yyn;
13259|      0|  goto yynewstate;
13260|       |
13261|       |
13262|       |/*-------------------------------------.
13263|       || yyacceptlab -- YYACCEPT comes here.  |
13264|       |`-------------------------------------*/
13265|    518|yyacceptlab:
13266|    518|  yyresult = 0;
13267|    518|  goto yyreturnlab;
13268|       |
13269|       |
13270|       |/*-----------------------------------.
13271|       || yyabortlab -- YYABORT comes here.  |
13272|       |`-----------------------------------*/
13273|     22|yyabortlab:
13274|     22|  yyresult = 1;
13275|     22|  goto yyreturnlab;
13276|       |
13277|       |
13278|       |/*-----------------------------------------------------------.
13279|       || yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here.  |
13280|       |`-----------------------------------------------------------*/
13281|      0|yyexhaustedlab:
13282|      0|  yyerror (pParseContext, YY_("memory exhausted"));
  ------------------
  |  |  757|      0|#define yyerror(context, msg) context->parserError(msg)
  ------------------
13283|      0|  yyresult = 2;
13284|      0|  goto yyreturnlab;
13285|       |
13286|       |
13287|       |/*----------------------------------------------------------.
13288|       || yyreturnlab -- parsing is finished, clean up and return.  |
13289|       |`----------------------------------------------------------*/
13290|    540|yyreturnlab:
13291|    540|  if (yychar != YYEMPTY)
  ------------------
  |  Branch (13291:7): [True: 22, False: 518]
  ------------------
13292|     22|    {
13293|       |      /* Make sure we have latest lookahead translation.  See comments at
13294|       |         user semantic actions for why this is necessary.  */
13295|     22|      yytoken = YYTRANSLATE (yychar);
  ------------------
  |  | 1104|     22|  (0 <= (YYX) && (YYX) <= YYMAXUTOK                     \
  |  |  ------------------
  |  |  |  | 1098|     22|#define YYMAXUTOK   742
  |  |  ------------------
  |  |  |  Branch (1104:4): [True: 22, False: 0]
  |  |  |  Branch (1104:18): [True: 22, False: 0]
  |  |  ------------------
  |  | 1105|     22|   ? YY_CAST (yysymbol_kind_t, yytranslate[YYX])        \
  |  |  ------------------
  |  |  |  |  100|     22|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  |  | 1106|     22|   : YYSYMBOL_YYUNDEF)
  ------------------
13296|     22|      yydestruct ("Cleanup: discarding lookahead",
13297|     22|                  yytoken, &yylval, pParseContext);
13298|     22|    }
13299|       |  /* Do not reclaim the symbols of the rule whose action triggered
13300|       |     this YYABORT or YYACCEPT.  */
13301|    540|  YYPOPSTACK (yylen);
  ------------------
  |  | 5277|    540|#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
  ------------------
13302|    540|  YY_STACK_PRINT (yyss, yyssp);
  ------------------
  |  | 4863|    540|# define YY_STACK_PRINT(Bottom, Top)                            \
  |  | 4864|    540|do {                                                            \
  |  | 4865|    540|  if (yydebug)                                                  \
  |  |  ------------------
  |  |  |  Branch (4865:7): [True: 0, False: 540]
  |  |  ------------------
  |  | 4866|    540|    yy_stack_print ((Bottom), (Top));                           \
  |  | 4867|    540|} while (0)
  |  |  ------------------
  |  |  |  Branch (4867:10): [Folded, False: 540]
  |  |  ------------------
  ------------------
13303|  1.57k|  while (yyssp != yyss)
  ------------------
  |  Branch (13303:10): [True: 1.03k, False: 540]
  ------------------
13304|  1.03k|    {
13305|  1.03k|      yydestruct ("Cleanup: popping",
13306|  1.03k|                  YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, pParseContext);
  ------------------
  |  | 1271|  1.03k|#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
  |  |  ------------------
  |  |  |  |  100|  1.03k|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  ------------------
13307|  1.03k|      YYPOPSTACK (1);
  ------------------
  |  | 5277|  1.03k|#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
  ------------------
13308|  1.03k|    }
13309|    540|#ifndef yyoverflow
13310|    540|  if (yyss != yyssa)
  ------------------
  |  Branch (13310:7): [True: 0, False: 540]
  ------------------
13311|      0|    YYSTACK_FREE (yyss);
  ------------------
  |  |  996|      0|#  define YYSTACK_FREE YYFREE
  |  |  ------------------
  |  |  |  | 1015|      0|#   define YYFREE free
  |  |  ------------------
  ------------------
13312|    540|#endif
13313|    540|  if (yymsg != yymsgbuf)
  ------------------
  |  Branch (13313:7): [True: 0, False: 540]
  ------------------
13314|      0|    YYSTACK_FREE (yymsg);
  ------------------
  |  |  996|      0|#  define YYSTACK_FREE YYFREE
  |  |  ------------------
  |  |  |  | 1015|      0|#   define YYFREE free
  |  |  ------------------
  ------------------
13315|    540|  return yyresult;
13316|     22|}
glslang_tab.cpp:_ZL14yysyntax_errorPlPPcPK12yypcontext_t:
 5121|     22|{
 5122|     22|  enum { YYARGS_MAX = 5 };
 5123|       |  /* Internationalized format string. */
 5124|     22|  const char *yyformat = YY_NULLPTR;
  ------------------
  |  |  110|     22|#    define YY_NULLPTR nullptr
  ------------------
 5125|       |  /* Arguments of yyformat: reported tokens (one for the "unexpected",
 5126|       |     one per "expected"). */
 5127|     22|  yysymbol_kind_t yyarg[YYARGS_MAX];
 5128|       |  /* Cumulated lengths of YYARG.  */
 5129|     22|  YYPTRDIFF_T yysize = 0;
  ------------------
  |  |  838|     22|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  ------------------
 5130|       |
 5131|       |  /* Actual size of YYARG. */
 5132|     22|  int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX);
 5133|     22|  if (yycount == YYENOMEM)
  ------------------
  |  Branch (5133:7): [True: 0, False: 22]
  ------------------
 5134|      0|    return YYENOMEM;
 5135|       |
 5136|     22|  switch (yycount)
 5137|     22|    {
 5138|      0|#define YYCASE_(N, S)                       \
 5139|      0|      case N:                               \
 5140|      0|        yyformat = S;                       \
 5141|      0|        break
 5142|      0|    default: /* Avoid compiler warnings. */
  ------------------
  |  Branch (5142:5): [True: 0, False: 22]
  ------------------
 5143|      0|      YYCASE_(0, YY_("syntax error"));
  ------------------
  |  | 5139|      0|      case N:                               \
  |  |  ------------------
  |  |  |  Branch (5139:7): [True: 0, False: 22]
  |  |  ------------------
  |  | 5140|      0|        yyformat = S;                       \
  |  | 5141|      0|        break
  ------------------
 5144|     11|      YYCASE_(1, YY_("syntax error, unexpected %s"));
  ------------------
  |  | 5139|     11|      case N:                               \
  |  |  ------------------
  |  |  |  Branch (5139:7): [True: 11, False: 11]
  |  |  ------------------
  |  | 5140|     11|        yyformat = S;                       \
  |  | 5141|     11|        break
  ------------------
 5145|      3|      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
  ------------------
  |  | 5139|      3|      case N:                               \
  |  |  ------------------
  |  |  |  Branch (5139:7): [True: 3, False: 19]
  |  |  ------------------
  |  | 5140|      3|        yyformat = S;                       \
  |  | 5141|      3|        break
  ------------------
 5146|      8|      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
  ------------------
  |  | 5139|      8|      case N:                               \
  |  |  ------------------
  |  |  |  Branch (5139:7): [True: 8, False: 14]
  |  |  ------------------
  |  | 5140|      8|        yyformat = S;                       \
  |  | 5141|      8|        break
  ------------------
 5147|      0|      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
  ------------------
  |  | 5139|      0|      case N:                               \
  |  |  ------------------
  |  |  |  Branch (5139:7): [True: 0, False: 22]
  |  |  ------------------
  |  | 5140|      0|        yyformat = S;                       \
  |  | 5141|      0|        break
  ------------------
 5148|     22|      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
  ------------------
  |  | 5139|      0|      case N:                               \
  |  |  ------------------
  |  |  |  Branch (5139:7): [True: 0, False: 22]
  |  |  ------------------
  |  | 5140|      0|        yyformat = S;                       \
  |  | 5141|      0|        break
  ------------------
 5149|     22|#undef YYCASE_
 5150|     22|    }
 5151|       |
 5152|       |  /* Compute error message size.  Don't count the "%s"s, but reserve
 5153|       |     room for the terminator.  */
 5154|     22|  yysize = yystrlen (yyformat) - 2 * yycount + 1;
  ------------------
  |  | 4980|     22|#  define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
  |  |  ------------------
  |  |  |  |  100|     22|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  ------------------
 5155|     22|  {
 5156|     22|    int yyi;
 5157|     63|    for (yyi = 0; yyi < yycount; ++yyi)
  ------------------
  |  Branch (5157:19): [True: 41, False: 22]
  ------------------
 5158|     41|      {
 5159|     41|        YYPTRDIFF_T yysize1
  ------------------
  |  |  838|     41|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  ------------------
 5160|     41|          = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]);
  ------------------
  |  |  110|     41|#    define YY_NULLPTR nullptr
  ------------------
 5161|     41|        if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
  ------------------
  |  |  998|     41|#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
  |  |  ------------------
  |  |  |  |  866|     41|  YY_CAST (YYPTRDIFF_T,                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|     82|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (100:50): [True: 41, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5161:13): [True: 41, False: 0]
  |  Branch (5161:34): [True: 41, False: 0]
  ------------------
 5162|     41|          yysize = yysize1;
 5163|      0|        else
 5164|      0|          return YYENOMEM;
 5165|     41|      }
 5166|     22|  }
 5167|       |
 5168|     22|  if (*yymsg_alloc < yysize)
  ------------------
  |  Branch (5168:7): [True: 0, False: 22]
  ------------------
 5169|      0|    {
 5170|      0|      *yymsg_alloc = 2 * yysize;
 5171|      0|      if (! (yysize <= *yymsg_alloc
  ------------------
  |  Branch (5171:14): [True: 0, False: 0]
  ------------------
 5172|      0|             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
  ------------------
  |  |  998|      0|#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
  |  |  ------------------
  |  |  |  |  866|      0|  YY_CAST (YYPTRDIFF_T,                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (100:50): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (5172:17): [True: 0, False: 0]
  ------------------
 5173|      0|        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
  ------------------
  |  |  998|      0|#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
  |  |  ------------------
  |  |  |  |  866|      0|  YY_CAST (YYPTRDIFF_T,                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  |  100|      0|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (100:50): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5174|      0|      return -1;
 5175|      0|    }
 5176|       |
 5177|       |  /* Avoid sprintf, as that infringes on the user's name space.
 5178|       |     Don't have undefined behavior even if the translation
 5179|       |     produced a string with the wrong number of "%s"s.  */
 5180|     22|  {
 5181|     22|    char *yyp = *yymsg;
 5182|     22|    int yyi = 0;
 5183|    777|    while ((*yyp = *yyformat) != '\0')
  ------------------
  |  Branch (5183:12): [True: 755, False: 22]
  ------------------
 5184|    755|      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
  ------------------
  |  Branch (5184:11): [True: 41, False: 714]
  |  Branch (5184:26): [True: 41, False: 0]
  |  Branch (5184:48): [True: 41, False: 0]
  ------------------
 5185|     41|        {
 5186|     41|          yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]);
 5187|     41|          yyformat += 2;
 5188|     41|        }
 5189|    714|      else
 5190|    714|        {
 5191|    714|          ++yyp;
 5192|    714|          ++yyformat;
 5193|    714|        }
 5194|     22|  }
 5195|     22|  return 0;
 5196|     22|}
glslang_tab.cpp:_ZL25yy_syntax_error_argumentsPK12yypcontext_tP15yysymbol_kind_ti:
 5068|     22|{
 5069|       |  /* Actual size of YYARG. */
 5070|     22|  int yycount = 0;
 5071|       |  /* There are many possibilities here to consider:
 5072|       |     - If this state is a consistent state with a default action, then
 5073|       |       the only way this function was invoked is if the default action
 5074|       |       is an error action.  In that case, don't check for expected
 5075|       |       tokens because there are none.
 5076|       |     - The only way there can be no lookahead present (in yychar) is if
 5077|       |       this state is a consistent state with a default action.  Thus,
 5078|       |       detecting the absence of a lookahead is sufficient to determine
 5079|       |       that there is no unexpected or expected token to report.  In that
 5080|       |       case, just report a simple "syntax error".
 5081|       |     - Don't assume there isn't a lookahead just because this state is a
 5082|       |       consistent state with a default action.  There might have been a
 5083|       |       previous inconsistent state, consistent state with a non-default
 5084|       |       action, or user semantic action that manipulated yychar.
 5085|       |     - Of course, the expected token list depends on states to have
 5086|       |       correct lookahead information, and it depends on the parser not
 5087|       |       to perform extra reductions after fetching a lookahead from the
 5088|       |       scanner and before detecting a syntax error.  Thus, state merging
 5089|       |       (from LALR or IELR) and default reductions corrupt the expected
 5090|       |       token list.  However, the list is correct for canonical LR with
 5091|       |       one exception: it will still contain any token that will not be
 5092|       |       accepted due to an error action in a later state.
 5093|       |  */
 5094|     22|  if (yyctx->yytoken != YYSYMBOL_YYEMPTY)
  ------------------
  |  Branch (5094:7): [True: 22, False: 0]
  ------------------
 5095|     22|    {
 5096|     22|      int yyn;
 5097|     22|      if (yyarg)
  ------------------
  |  Branch (5097:11): [True: 22, False: 0]
  ------------------
 5098|     22|        yyarg[yycount] = yyctx->yytoken;
 5099|     22|      ++yycount;
 5100|     22|      yyn = yypcontext_expected_tokens (yyctx,
 5101|     22|                                        yyarg ? yyarg + 1 : yyarg, yyargn - 1);
  ------------------
  |  Branch (5101:41): [True: 22, False: 0]
  ------------------
 5102|     22|      if (yyn == YYENOMEM)
  ------------------
  |  Branch (5102:11): [True: 0, False: 22]
  ------------------
 5103|      0|        return YYENOMEM;
 5104|     22|      else
 5105|     22|        yycount += yyn;
 5106|     22|    }
 5107|     22|  return yycount;
 5108|     22|}
glslang_tab.cpp:_ZL26yypcontext_expected_tokensPK12yypcontext_tP15yysymbol_kind_ti:
 4944|     22|{
 4945|       |  /* Actual size of YYARG. */
 4946|     22|  int yycount = 0;
 4947|     22|  int yyn = yypact[+*yyctx->yyssp];
 4948|     22|  if (!yypact_value_is_default (yyn))
  ------------------
  |  | 1451|     22|  ((Yyn) == YYPACT_NINF)
  |  |  ------------------
  |  |  |  | 1448|     22|#define YYPACT_NINF (-849)
  |  |  ------------------
  ------------------
  |  Branch (4948:7): [True: 22, False: 0]
  ------------------
 4949|     22|    {
 4950|       |      /* Start YYX at -YYN if negative to avoid negative indexes in
 4951|       |         YYCHECK.  In other words, skip the first -YYN actions for
 4952|       |         this state because they are default actions.  */
 4953|     22|      int yyxbegin = yyn < 0 ? -yyn : 0;
  ------------------
  |  Branch (4953:22): [True: 8, False: 14]
  ------------------
 4954|       |      /* Stay within bounds of both yycheck and yytname.  */
 4955|     22|      int yychecklim = YYLAST - yyn + 1;
  ------------------
  |  | 1086|     22|#define YYLAST   13823
  ------------------
 4956|     22|      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
  ------------------
  |  | 1089|     22|#define YYNTOKENS  488
  ------------------
                    int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
  ------------------
  |  | 1089|     22|#define YYNTOKENS  488
  ------------------
  |  Branch (4956:20): [True: 0, False: 22]
  ------------------
 4957|     22|      int yyx;
 4958|  3.65k|      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
  ------------------
  |  Branch (4958:28): [True: 3.64k, False: 11]
  ------------------
 4959|  3.64k|        if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror
  ------------------
  |  Branch (4959:13): [True: 74, False: 3.57k]
  |  Branch (4959:42): [True: 74, False: 0]
  ------------------
 4960|      0|            && !yytable_value_is_error (yytable[yyx + yyn]))
  ------------------
  |  | 1456|      0|  0
  ------------------
  |  Branch (4960:16): [True: 0, Folded]
  ------------------
 4961|     74|          {
 4962|     74|            if (!yyarg)
  ------------------
  |  Branch (4962:17): [True: 0, False: 74]
  ------------------
 4963|      0|              ++yycount;
 4964|     74|            else if (yycount == yyargn)
  ------------------
  |  Branch (4964:22): [True: 11, False: 63]
  ------------------
 4965|     11|              return 0;
 4966|     63|            else
 4967|     63|              yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx);
  ------------------
  |  |  100|     63|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  ------------------
 4968|     74|          }
 4969|     22|    }
 4970|     11|  if (yyarg && yycount == 0 && 0 < yyargn)
  ------------------
  |  Branch (4970:7): [True: 11, False: 0]
  |  Branch (4970:16): [True: 0, False: 11]
  |  Branch (4970:32): [True: 0, False: 0]
  ------------------
 4971|      0|    yyarg[0] = YYSYMBOL_YYEMPTY;
 4972|     11|  return yycount;
 4973|     22|}
glslang_tab.cpp:_ZL9yytnamerrPcPKc:
 5024|     82|{
 5025|     82|  if (*yystr == '"')
  ------------------
  |  Branch (5025:7): [True: 20, False: 62]
  ------------------
 5026|     20|    {
 5027|     20|      YYPTRDIFF_T yyn = 0;
  ------------------
  |  |  838|     20|#  define YYPTRDIFF_T __PTRDIFF_TYPE__
  ------------------
 5028|     20|      char const *yyp = yystr;
 5029|     20|      for (;;)
 5030|    240|        switch (*++yyp)
 5031|    240|          {
 5032|      0|          case '\'':
  ------------------
  |  Branch (5032:11): [True: 0, False: 240]
  ------------------
 5033|      0|          case ',':
  ------------------
  |  Branch (5033:11): [True: 0, False: 240]
  ------------------
 5034|      0|            goto do_not_strip_quotes;
 5035|       |
 5036|      0|          case '\\':
  ------------------
  |  Branch (5036:11): [True: 0, False: 240]
  ------------------
 5037|      0|            if (*++yyp != '\\')
  ------------------
  |  Branch (5037:17): [True: 0, False: 0]
  ------------------
 5038|      0|              goto do_not_strip_quotes;
 5039|      0|            else
 5040|      0|              goto append;
 5041|       |
 5042|      0|          append:
 5043|    220|          default:
  ------------------
  |  Branch (5043:11): [True: 220, False: 20]
  ------------------
 5044|    220|            if (yyres)
  ------------------
  |  Branch (5044:17): [True: 110, False: 110]
  ------------------
 5045|    110|              yyres[yyn] = *yyp;
 5046|    220|            yyn++;
 5047|    220|            break;
 5048|       |
 5049|     20|          case '"':
  ------------------
  |  Branch (5049:11): [True: 20, False: 220]
  ------------------
 5050|     20|            if (yyres)
  ------------------
  |  Branch (5050:17): [True: 10, False: 10]
  ------------------
 5051|     10|              yyres[yyn] = '\0';
 5052|     20|            return yyn;
 5053|    240|          }
 5054|      0|    do_not_strip_quotes: ;
 5055|      0|    }
 5056|       |
 5057|     62|  if (yyres)
  ------------------
  |  Branch (5057:7): [True: 31, False: 31]
  ------------------
 5058|     31|    return yystpcpy (yyres, yystr) - yyres;
  ------------------
  |  | 4996|     31|#  define yystpcpy stpcpy
  ------------------
 5059|     31|  else
 5060|     31|    return yystrlen (yystr);
  ------------------
  |  | 4980|     31|#  define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
  |  |  ------------------
  |  |  |  |  100|     31|#   define YY_CAST(Type, Val) static_cast<Type> (Val)
  |  |  ------------------
  ------------------
 5061|     62|}
glslang_tab.cpp:_ZL10yydestructPKc15yysymbol_kind_tP7YYSTYPEPN7glslang13TParseContextE:
 5206|  1.14k|{
 5207|  1.14k|  YY_USE (yyvaluep);
  ------------------
  |  |  911|  1.14k|# define YY_USE(E) ((void) (E))
  ------------------
 5208|  1.14k|  YY_USE (pParseContext);
  ------------------
  |  |  911|  1.14k|# define YY_USE(E) ((void) (E))
  ------------------
 5209|  1.14k|  if (!yymsg)
  ------------------
  |  Branch (5209:7): [True: 0, False: 1.14k]
  ------------------
 5210|      0|    yymsg = "Deleting";
 5211|  1.14k|  YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
  ------------------
  |  | 4800|  1.14k|# define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                    \
  |  | 4801|  1.14k|do {                                                                      \
  |  | 4802|  1.14k|  if (yydebug)                                                            \
  |  |  ------------------
  |  |  |  Branch (4802:7): [True: 0, False: 1.14k]
  |  |  ------------------
  |  | 4803|  1.14k|    {                                                                     \
  |  | 4804|      0|      YYFPRINTF (stderr, "%s ", Title);                                   \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4805|      0|      yy_symbol_print (stderr,                                            \
  |  | 4806|      0|                  Kind, Value, pParseContext); \
  |  | 4807|      0|      YYFPRINTF (stderr, "\n");                                           \
  |  |  ------------------
  |  |  |  | 4788|      0|#  define YYFPRINTF fprintf
  |  |  ------------------
  |  | 4808|      0|    }                                                                     \
  |  | 4809|  1.14k|} while (0)
  |  |  ------------------
  |  |  |  Branch (4809:10): [Folded, False: 1.14k]
  |  |  ------------------
  ------------------
 5212|       |
 5213|  1.14k|  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
 5214|  1.14k|  YY_USE (yykind);
  ------------------
  |  |  911|  1.14k|# define YY_USE(E) ((void) (E))
  ------------------
 5215|  1.14k|  YY_IGNORE_MAYBE_UNINITIALIZED_END
 5216|  1.14k|}

_ZN7glslang13TIntermediate15addUsedLocationERKNS_10TQualifierERKNS_5TTypeERb:
 1971|     72|{
 1972|     72|    typeCollision = false;
 1973|       |
 1974|     72|    int set;
 1975|     72|    if (qualifier.isPipeInput())
  ------------------
  |  Branch (1975:9): [True: 66, False: 6]
  ------------------
 1976|     66|        set = 0;
 1977|      6|    else if (qualifier.isPipeOutput())
  ------------------
  |  Branch (1977:14): [True: 6, False: 0]
  ------------------
 1978|      6|        set = 1;
 1979|      0|    else if (qualifier.storage == EvqUniform)
  ------------------
  |  Branch (1979:14): [True: 0, False: 0]
  ------------------
 1980|      0|        set = 2;
 1981|      0|    else if (qualifier.storage == EvqBuffer)
  ------------------
  |  Branch (1981:14): [True: 0, False: 0]
  ------------------
 1982|      0|        set = 3;
 1983|      0|    else if (qualifier.storage == EvqTileImageEXT)
  ------------------
  |  Branch (1983:14): [True: 0, False: 0]
  ------------------
 1984|      0|        set = 4;
 1985|      0|    else if (qualifier.isAnyPayload())
  ------------------
  |  Branch (1985:14): [True: 0, False: 0]
  ------------------
 1986|      0|        set = 0;
 1987|      0|    else if (qualifier.isAnyCallable())
  ------------------
  |  Branch (1987:14): [True: 0, False: 0]
  ------------------
 1988|      0|        set = 1;
 1989|      0|    else if (qualifier.isHitObjectAttrNV())
  ------------------
  |  Branch (1989:14): [True: 0, False: 0]
  ------------------
 1990|      0|        set = 2;
 1991|      0|    else if (qualifier.isHitObjectAttrEXT())
  ------------------
  |  Branch (1991:14): [True: 0, False: 0]
  ------------------
 1992|      0|        set = 2;
 1993|      0|    else
 1994|      0|        return -1;
 1995|       |
 1996|     72|    int size;
 1997|     72|    if (qualifier.isAnyPayload() || qualifier.isAnyCallable()) {
  ------------------
  |  Branch (1997:9): [True: 0, False: 72]
  |  Branch (1997:37): [True: 0, False: 72]
  ------------------
 1998|      0|        size = 1;
 1999|     72|    } else if (qualifier.isUniformOrBuffer() || qualifier.isTaskMemory()) {
  ------------------
  |  Branch (1999:16): [True: 0, False: 72]
  |  Branch (1999:49): [True: 0, False: 72]
  ------------------
 2000|      0|        if (type.isSizedArray())
  ------------------
  |  Branch (2000:13): [True: 0, False: 0]
  ------------------
 2001|      0|            size = type.getCumulativeArraySize();
 2002|      0|        else
 2003|      0|            size = 1;
 2004|     72|    } else {
 2005|       |        // Strip off the outer array dimension for those having an extra one.
 2006|     72|        if (type.isArray() && qualifier.isArrayedIo(language)) {
  ------------------
  |  Branch (2006:13): [True: 0, False: 72]
  |  Branch (2006:31): [True: 0, False: 0]
  ------------------
 2007|      0|            TType elementType(type, 0);
 2008|      0|            size = computeTypeLocationSize(elementType, language);
 2009|      0|        } else
 2010|     72|            size = computeTypeLocationSize(type, language);
 2011|     72|    }
 2012|       |
 2013|       |    // Locations, and components within locations.
 2014|       |    //
 2015|       |    // Almost always, dealing with components means a single location is involved.
 2016|       |    // The exception is a dvec3. From the spec:
 2017|       |    //
 2018|       |    // "A dvec3 will consume all four components of the first location and components 0 and 1 of
 2019|       |    // the second location. This leaves components 2 and 3 available for other component-qualified
 2020|       |    // declarations."
 2021|       |    //
 2022|       |    // That means, without ever mentioning a component, a component range
 2023|       |    // for a different location gets specified, if it's not a vertex shader input. (!)
 2024|       |    // (A vertex shader input will show using only one location, even for a dvec3/4.)
 2025|       |    //
 2026|       |    // So, for the case of dvec3, we need two independent ioRanges.
 2027|       |    //
 2028|       |    // For raytracing IO (payloads and callabledata) each declaration occupies a single
 2029|       |    // slot irrespective of type.
 2030|     72|    int collision = -1; // no collision
 2031|     72|    if (qualifier.isAnyPayload() || qualifier.isAnyCallable() || qualifier.isHitObjectAttrNV() || qualifier.isHitObjectAttrEXT()) {
  ------------------
  |  Branch (2031:9): [True: 0, False: 72]
  |  Branch (2031:37): [True: 0, False: 72]
  |  Branch (2031:66): [True: 0, False: 72]
  |  Branch (2031:99): [True: 0, False: 72]
  ------------------
 2032|      0|        TRange range(qualifier.layoutLocation, qualifier.layoutLocation);
 2033|      0|        collision = checkLocationRT(set, qualifier.layoutLocation);
 2034|      0|        if (collision < 0)
  ------------------
  |  Branch (2034:13): [True: 0, False: 0]
  ------------------
 2035|      0|            usedIoRT[set].push_back(range);
 2036|      0|        return collision;
 2037|      0|    }
 2038|     72|    if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 &&
  ------------------
  |  Branch (2038:9): [True: 0, False: 72]
  |  Branch (2038:22): [True: 0, False: 0]
  |  Branch (2038:58): [True: 0, False: 0]
  ------------------
 2039|      0|        (qualifier.isPipeInput() || qualifier.isPipeOutput())) {
  ------------------
  |  Branch (2039:10): [True: 0, False: 0]
  |  Branch (2039:37): [True: 0, False: 0]
  ------------------
 2040|       |        // Dealing with dvec3 in/out split across two locations.
 2041|       |        // Need two io-ranges.
 2042|       |        // The case where the dvec3 doesn't start at component 0 was previously caught as overflow.
 2043|       |
 2044|       |        // First range:
 2045|      0|        TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation);
 2046|      0|        TRange componentRange(0, 3);
 2047|      0|        TIoRange range(locationRange, componentRange, type.getBasicType(), 0, qualifier.centroid, qualifier.smooth, qualifier.flat, qualifier.sample, qualifier.patch);
 2048|       |
 2049|       |        // check for collisions
 2050|      0|        collision = checkLocationRange(set, range, type, typeCollision);
 2051|      0|        if (collision < 0) {
  ------------------
  |  Branch (2051:13): [True: 0, False: 0]
  ------------------
 2052|      0|            usedIo[set].push_back(range);
 2053|       |
 2054|       |            // Second range:
 2055|      0|            TRange locationRange2(qualifier.layoutLocation + 1, qualifier.layoutLocation + 1);
 2056|      0|            TRange componentRange2(0, 1);
 2057|      0|            TIoRange range2(locationRange2, componentRange2, type.getBasicType(), 0, qualifier.centroid, qualifier.smooth, qualifier.flat, qualifier.sample, qualifier.patch);
 2058|       |
 2059|       |            // check for collisions
 2060|      0|            collision = checkLocationRange(set, range2, type, typeCollision);
 2061|      0|            if (collision < 0)
  ------------------
  |  Branch (2061:17): [True: 0, False: 0]
  ------------------
 2062|      0|                usedIo[set].push_back(range2);
 2063|      0|        }
 2064|      0|        return collision;
 2065|      0|    }
 2066|       |
 2067|       |    // Not a dvec3 in/out split across two locations, generic path.
 2068|       |    // Need a single IO-range block.
 2069|       |
 2070|     72|    TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation + size - 1);
 2071|     72|    TRange componentRange(0, 3);
 2072|     72|    if (qualifier.hasComponent() || type.getVectorSize() > 0) {
  ------------------
  |  Branch (2072:9): [True: 0, False: 72]
  |  Branch (2072:37): [True: 72, False: 0]
  ------------------
 2073|     72|        int consumedComponents = type.getVectorSize() * (type.getBasicType() == EbtDouble ? 2 : 1);
  ------------------
  |  Branch (2073:58): [True: 0, False: 72]
  ------------------
 2074|     72|        if (qualifier.hasComponent())
  ------------------
  |  Branch (2074:13): [True: 0, False: 72]
  ------------------
 2075|      0|            componentRange.start = qualifier.layoutComponent;
 2076|     72|        componentRange.last  = componentRange.start + consumedComponents - 1;
 2077|     72|    }
 2078|       |
 2079|       |    // combine location and component ranges
 2080|     72|    TBasicType basicTy = type.getBasicType();
 2081|     72|    if (basicTy == EbtSampler && type.getSampler().isAttachmentEXT())
  ------------------
  |  Branch (2081:9): [True: 0, False: 72]
  |  Branch (2081:34): [True: 0, False: 0]
  ------------------
 2082|      0|        basicTy = type.getSampler().type;
 2083|     72|    TIoRange range(locationRange, componentRange, basicTy, qualifier.hasIndex() ? qualifier.getIndex() : 0, qualifier.centroid, qualifier.smooth, qualifier.flat, qualifier.sample, qualifier.patch);
  ------------------
  |  Branch (2083:60): [True: 0, False: 72]
  ------------------
 2084|       |
 2085|       |    // check for collisions, except for vertex inputs on desktop targeting OpenGL
 2086|     72|    if (! (!isEsProfile() && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0)
  ------------------
  |  Branch (2086:12): [True: 72, False: 0]
  |  Branch (2086:30): [True: 0, False: 72]
  |  Branch (2086:59): [True: 0, False: 0]
  |  Branch (2086:87): [True: 0, False: 0]
  ------------------
 2087|     72|        collision = checkLocationRange(set, range, type, typeCollision);
 2088|       |
 2089|     72|    if (collision < 0)
  ------------------
  |  Branch (2089:9): [True: 72, False: 0]
  ------------------
 2090|     72|        usedIo[set].push_back(range);
 2091|       |
 2092|     72|    return collision;
 2093|     72|}
_ZN7glslang13TIntermediate18checkLocationRangeEiRKNS_8TIoRangeERKNS_5TTypeERb:
 2119|     72|{
 2120|    402|    for (size_t r = 0; r < usedIo[set].size(); ++r) {
  ------------------
  |  Branch (2120:24): [True: 330, False: 72]
  ------------------
 2121|    330|        if (range.overlap(usedIo[set][r])) {
  ------------------
  |  Branch (2121:13): [True: 0, False: 330]
  ------------------
 2122|       |            // there is a collision; pick one
 2123|      0|            return std::max(range.location.start, usedIo[set][r].location.start);
 2124|    330|        } else if (range.location.overlap(usedIo[set][r].location) &&
  ------------------
  |  Branch (2124:20): [True: 0, False: 330]
  ------------------
 2125|      0|                   (!checkCompatibleTypes(type.getBasicType(), usedIo[set][r].basicType) ||
  ------------------
  |  Branch (2125:21): [True: 0, False: 0]
  ------------------
 2126|      0|                    type.getQualifier().centroid != usedIo[set][r].centroid ||
  ------------------
  |  Branch (2126:21): [True: 0, False: 0]
  ------------------
 2127|      0|                    type.getQualifier().smooth != usedIo[set][r].smooth ||
  ------------------
  |  Branch (2127:21): [True: 0, False: 0]
  ------------------
 2128|      0|                    type.getQualifier().flat != usedIo[set][r].flat ||
  ------------------
  |  Branch (2128:21): [True: 0, False: 0]
  ------------------
 2129|      0|                    type.getQualifier().sample != usedIo[set][r].sample ||
  ------------------
  |  Branch (2129:21): [True: 0, False: 0]
  ------------------
 2130|      0|                    type.getQualifier().patch != usedIo[set][r].patch)) {
  ------------------
  |  Branch (2130:21): [True: 0, False: 0]
  ------------------
 2131|       |            // aliased-type mismatch
 2132|      0|            typeCollision = true;
 2133|      0|            return std::max(range.location.start, usedIo[set][r].location.start);
 2134|      0|        }
 2135|    330|    }
 2136|       |
 2137|       |    // check typeCollision between tileImageEXT and out
 2138|     72|    if (set == 4 || set == 1) {
  ------------------
  |  Branch (2138:9): [True: 0, False: 72]
  |  Branch (2138:21): [True: 6, False: 66]
  ------------------
 2139|       |      // if the set is "tileImageEXT", check against "out" and vice versa
 2140|      6|      int againstSet = (set == 4) ? 1 : 4;
  ------------------
  |  Branch (2140:24): [True: 0, False: 6]
  ------------------
 2141|      6|      for (size_t r = 0; r < usedIo[againstSet].size(); ++r) {
  ------------------
  |  Branch (2141:26): [True: 0, False: 6]
  ------------------
 2142|      0|        if (range.location.overlap(usedIo[againstSet][r].location) && type.getBasicType() != usedIo[againstSet][r].basicType) {
  ------------------
  |  Branch (2142:13): [True: 0, False: 0]
  |  Branch (2142:71): [True: 0, False: 0]
  ------------------
 2143|       |            // aliased-type mismatch
 2144|      0|            typeCollision = true;
 2145|      0|            return std::max(range.location.start, usedIo[againstSet][r].location.start);
 2146|      0|        }
 2147|      0|      }
 2148|      6|    }
 2149|       |
 2150|     72|    return -1; // no collision
 2151|     72|}
_ZN7glslang13TIntermediate23computeTypeLocationSizeERKNS_5TTypeE11EShLanguage:
 2203|     72|{
 2204|       |    // "If the declared input is an array of size n and each element takes m locations, it will be assigned m * n
 2205|       |    // consecutive locations..."
 2206|     72|    if (type.isArray()) {
  ------------------
  |  Branch (2206:9): [True: 0, False: 72]
  ------------------
 2207|       |        // TODO: perf: this can be flattened by using getCumulativeArraySize(), and a deref that discards all arrayness
 2208|       |        // TODO: are there valid cases of having an unsized array with a location?  If so, running this code too early.
 2209|      0|        TType elementType(type, 0);
 2210|      0|        if (type.isSizedArray() && !type.getQualifier().isPerView())
  ------------------
  |  Branch (2210:13): [True: 0, False: 0]
  |  Branch (2210:36): [True: 0, False: 0]
  ------------------
 2211|      0|            return type.getOuterArraySize() * computeTypeLocationSize(elementType, stage);
 2212|      0|        else {
 2213|       |            // unset perViewNV attributes for arrayed per-view outputs: "perviewNV vec4 v[MAX_VIEWS][3];"
 2214|      0|            elementType.getQualifier().perViewNV = false;
 2215|      0|            return computeTypeLocationSize(elementType, stage);
 2216|      0|        }
 2217|      0|    }
 2218|       |
 2219|       |    // "The locations consumed by block and structure members are determined by applying the rules above
 2220|       |    // recursively..."
 2221|     72|    if (type.isStruct()) {
  ------------------
  |  Branch (2221:9): [True: 0, False: 72]
  ------------------
 2222|      0|        int size = 0;
 2223|      0|        for (int member = 0; member < (int)type.getStruct()->size(); ++member) {
  ------------------
  |  Branch (2223:30): [True: 0, False: 0]
  ------------------
 2224|      0|            TType memberType(type, member);
 2225|      0|            size += computeTypeLocationSize(memberType, stage);
 2226|      0|        }
 2227|      0|        return size;
 2228|      0|    }
 2229|       |
 2230|       |    // ES: "If a shader input is any scalar or vector type, it will consume a single location."
 2231|       |
 2232|       |    // Desktop: "If a vertex shader input is any scalar or vector type, it will consume a single location. If a non-vertex
 2233|       |    // shader input is a scalar or vector type other than dvec3 or dvec4, it will consume a single location, while
 2234|       |    // types dvec3 or dvec4 will consume two consecutive locations. Inputs of type double and dvec2 will
 2235|       |    // consume only a single location, in all stages."
 2236|     72|    if (type.isScalar())
  ------------------
  |  Branch (2236:9): [True: 36, False: 36]
  ------------------
 2237|     36|        return 1;
 2238|     36|    if (type.isVector()) {
  ------------------
  |  Branch (2238:9): [True: 36, False: 0]
  ------------------
 2239|     36|        if (stage == EShLangVertex && type.getQualifier().isPipeInput())
  ------------------
  |  Branch (2239:13): [True: 0, False: 36]
  |  Branch (2239:39): [True: 0, False: 0]
  ------------------
 2240|      0|            return 1;
 2241|     36|        if (type.getBasicType() == EbtDouble && type.getVectorSize() > 2)
  ------------------
  |  Branch (2241:13): [True: 0, False: 36]
  |  Branch (2241:49): [True: 0, False: 0]
  ------------------
 2242|      0|            return 2;
 2243|     36|        else
 2244|     36|            return 1;
 2245|     36|    }
 2246|       |
 2247|       |    // "If the declared input is an n x m single- or double-precision matrix, ...
 2248|       |    // The number of locations assigned for each matrix will be the same as
 2249|       |    // for an n-element array of m-component vectors..."
 2250|      0|    if (type.isMatrix()) {
  ------------------
  |  Branch (2250:9): [True: 0, False: 0]
  ------------------
 2251|      0|        TType columnType(type, 0);
 2252|      0|        return type.getMatrixCols() * computeTypeLocationSize(columnType, stage);
 2253|      0|    }
 2254|       |
 2255|      0|    assert(0);
 2256|      0|    return 1;
 2257|      0|}

_ZN7glslang15TConstTraverser14visitAggregateENS_6TVisitEPNS_16TIntermAggregateE:
   72|    327|{
   73|    327|    if (! node->isConstructor() && node->getOp() != EOpComma) {
  ------------------
  |  Branch (73:9): [True: 0, False: 327]
  |  Branch (73:36): [True: 0, False: 0]
  ------------------
   74|      0|        error = true;
   75|       |
   76|      0|        return false;
   77|      0|    }
   78|       |
   79|    327|    bool flag = node->getSequence().size() == 1 && node->getSequence()[0]->getAsTyped()->getAsConstantUnion();
  ------------------
  |  Branch (79:17): [True: 237, False: 90]
  |  Branch (79:52): [True: 237, False: 0]
  ------------------
   80|    327|    if (flag) {
  ------------------
  |  Branch (80:9): [True: 237, False: 90]
  ------------------
   81|    237|        singleConstantParam = true;
   82|    237|        constructorType = node->getOp();
   83|    237|        size = node->getType().computeNumComponents();
   84|       |
   85|    237|        if (node->getType().isMatrix()) {
  ------------------
  |  Branch (85:13): [True: 0, False: 237]
  ------------------
   86|      0|            isMatrix = true;
   87|      0|            matrixCols = node->getType().getMatrixCols();
   88|      0|            matrixRows = node->getType().getMatrixRows();
   89|      0|        }
   90|    237|    }
   91|       |
   92|    327|    for (TIntermSequence::iterator p = node->getSequence().begin();
   93|    831|                                   p != node->getSequence().end(); p++) {
  ------------------
  |  Branch (93:36): [True: 504, False: 327]
  ------------------
   94|       |
   95|    504|        if (node->getOp() == EOpComma)
  ------------------
  |  Branch (95:13): [True: 0, False: 504]
  ------------------
   96|      0|            index = 0;
   97|       |
   98|    504|        (*p)->traverse(this);
   99|    504|    }
  100|    327|    if (flag)
  ------------------
  |  Branch (100:9): [True: 237, False: 90]
  ------------------
  101|    237|    {
  102|    237|        singleConstantParam = false;
  103|    237|        constructorType = EOpNull;
  104|    237|        size = 0;
  105|    237|        isMatrix = false;
  106|    237|        matrixCols = 0;
  107|    237|        matrixRows = 0;
  108|    237|    }
  109|       |
  110|    327|    return false;
  111|    327|}
_ZN7glslang15TConstTraverser18visitConstantUnionEPNS_20TIntermConstantUnionE:
  114|    504|{
  115|    504|    TConstUnionArray leftUnionArray(unionArray);
  116|    504|    int instanceSize = type.computeNumComponents();
  117|       |
  118|    504|    if (index >= instanceSize)
  ------------------
  |  Branch (118:9): [True: 0, False: 504]
  ------------------
  119|      0|        return;
  120|       |
  121|    504|    if (! singleConstantParam) {
  ------------------
  |  Branch (121:9): [True: 267, False: 237]
  ------------------
  122|    267|        int rightUnionSize = node->getType().computeNumComponents();
  123|       |
  124|    267|        const TConstUnionArray& rightUnionArray = node->getConstArray();
  125|    570|        for (int i = 0; i < rightUnionSize; i++) {
  ------------------
  |  Branch (125:25): [True: 303, False: 267]
  ------------------
  126|    303|            if (index >= instanceSize)
  ------------------
  |  Branch (126:17): [True: 0, False: 303]
  ------------------
  127|      0|                return;
  128|    303|            leftUnionArray[index] = rightUnionArray[i];
  129|       |
  130|    303|            index++;
  131|    303|        }
  132|    267|    } else {
  133|    237|        int endIndex = index + size;
  134|    237|        const TConstUnionArray& rightUnionArray = node->getConstArray();
  135|    237|        if (! isMatrix) {
  ------------------
  |  Branch (135:13): [True: 237, False: 0]
  ------------------
  136|    237|            int count = 0;
  137|    237|            int nodeComps = node->getType().computeNumComponents();
  138|  1.15k|            for (int i = index; i < endIndex; i++) {
  ------------------
  |  Branch (138:33): [True: 918, False: 237]
  ------------------
  139|    918|                if (i >= instanceSize)
  ------------------
  |  Branch (139:21): [True: 0, False: 918]
  ------------------
  140|      0|                    return;
  141|       |
  142|    918|                leftUnionArray[i] = rightUnionArray[count];
  143|       |
  144|    918|                (index)++;
  145|       |
  146|    918|                if (nodeComps > 1)
  ------------------
  |  Branch (146:21): [True: 0, False: 918]
  ------------------
  147|      0|                    count++;
  148|    918|            }
  149|    237|        } 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|    237|    }
  197|    504|}
_ZN7glslang13TIntermediate14parseConstTreeEP11TIntermNodeNS_16TConstUnionArrayENS_9TOperatorERKNS_5TTypeEb:
  200|    327|{
  201|    327|    if (root == nullptr)
  ------------------
  |  Branch (201:9): [True: 0, False: 327]
  ------------------
  202|      0|        return false;
  203|       |
  204|    327|    TConstTraverser it(unionArray, singleConstantParam, constructorType, t);
  205|       |
  206|    327|    root->traverse(&it);
  207|    327|    if (it.error)
  ------------------
  |  Branch (207:9): [True: 0, False: 327]
  ------------------
  208|      0|        return true;
  209|    327|    else
  210|    327|        return false;
  211|    327|}
_ZN7glslang15TConstTraverserC2ERKNS_16TConstUnionArrayEbNS_9TOperatorERKNS_5TTypeE:
   47|    327|      : unionArray(cUnion), type(t),
   48|    327|        constructorType(constructType), singleConstantParam(singleConstParam), error(false), isMatrix(false),
   49|    327|        matrixCols(0), matrixRows(0) {  index = 0; tOp = EOpNull; }

_ZN7glslang10TPpContext9CPPdefineEPNS_8TPpTokenE:
   96|  34.1k|{
   97|  34.1k|    MacroSymbol mac;
   98|       |
   99|       |    // get the macro name
  100|  34.1k|    int token = scanToken(ppToken);
  101|  34.1k|    if (token != PpAtomIdentifier) {
  ------------------
  |  Branch (101:9): [True: 0, False: 34.1k]
  ------------------
  102|      0|        parseContext.ppError(ppToken->loc, "must be followed by macro name", "#define", "");
  103|      0|        return token;
  104|      0|    }
  105|  34.1k|    if (ppToken->loc.string >= 0) {
  ------------------
  |  Branch (105:9): [True: 36, False: 34.0k]
  ------------------
  106|       |        // We are in user code; check for reserved name use:
  107|     36|        parseContext.reservedPpErrorCheck(ppToken->loc, ppToken->name, "#define");
  108|     36|    }
  109|       |
  110|       |    // save the macro name
  111|  34.1k|    const int defAtom = atomStrings.getAddAtom(ppToken->name);
  112|  34.1k|    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|  34.1k|    token = scanToken(ppToken);
  116|  34.1k|    if (token == '(' && !ppToken->space) {
  ------------------
  |  Branch (116:9): [True: 21, False: 34.0k]
  |  Branch (116:25): [True: 21, False: 0]
  ------------------
  117|     21|        mac.functionLike = 1;
  118|     40|        do {
  119|     40|            token = scanToken(ppToken);
  120|     40|            if (mac.args.size() == 0 && token == ')')
  ------------------
  |  Branch (120:17): [True: 21, False: 19]
  |  Branch (120:41): [True: 0, False: 21]
  ------------------
  121|      0|                break;
  122|     40|            if (token != PpAtomIdentifier) {
  ------------------
  |  Branch (122:17): [True: 0, False: 40]
  ------------------
  123|      0|                parseContext.ppError(ppToken->loc, "bad argument", "#define", "");
  124|       |
  125|      0|                return token;
  126|      0|            }
  127|     40|            const int argAtom = atomStrings.getAddAtom(ppToken->name);
  128|       |
  129|       |            // check for duplication of parameter name
  130|     40|            bool duplicate = false;
  131|     59|            for (size_t a = 0; a < mac.args.size(); ++a) {
  ------------------
  |  Branch (131:32): [True: 19, False: 40]
  ------------------
  132|     19|                if (mac.args[a] == argAtom) {
  ------------------
  |  Branch (132:21): [True: 0, False: 19]
  ------------------
  133|      0|                    parseContext.ppError(ppToken->loc, "duplicate macro parameter", "#define", "");
  134|      0|                    duplicate = true;
  135|      0|                    break;
  136|      0|                }
  137|     19|            }
  138|     40|            if (! duplicate)
  ------------------
  |  Branch (138:17): [True: 40, False: 0]
  ------------------
  139|     40|                mac.args.push_back(argAtom);
  140|     40|            token = scanToken(ppToken);
  141|     40|        } while (token == ',');
  ------------------
  |  Branch (141:18): [True: 19, False: 21]
  ------------------
  142|     21|        if (token != ')') {
  ------------------
  |  Branch (142:13): [True: 0, False: 21]
  ------------------
  143|      0|            parseContext.ppError(ppToken->loc, "missing parenthesis", "#define", "");
  144|       |
  145|      0|            return token;
  146|      0|        }
  147|       |
  148|     21|        token = scanToken(ppToken);
  149|  34.0k|    } else if (token != '\n' && token != EndOfInput && !ppToken->space) {
  ------------------
  |  Branch (149:16): [True: 34.0k, False: 3]
  |  Branch (149:33): [True: 34.0k, False: 0]
  |  Branch (149:56): [True: 0, False: 34.0k]
  ------------------
  150|      0|        parseContext.ppWarn(ppToken->loc, "missing space after macro name", "#define", "");
  151|       |
  152|      0|        return token;
  153|      0|    }
  154|       |
  155|  34.1k|    int pendingPoundSymbols = 0;
  156|  34.1k|    TPpToken savePound;
  157|       |    // record the definition of the macro
  158|  68.2k|    while (token != '\n' && token != EndOfInput) {
  ------------------
  |  Branch (158:12): [True: 34.1k, False: 34.1k]
  |  Branch (158:29): [True: 34.1k, False: 0]
  ------------------
  159|  34.1k|        if (token == '#') {
  ------------------
  |  Branch (159:13): [True: 0, False: 34.1k]
  ------------------
  160|      0|            pendingPoundSymbols++;
  161|      0|            if (pendingPoundSymbols == 0) {
  ------------------
  |  Branch (161:17): [True: 0, False: 0]
  ------------------
  162|      0|                savePound = *ppToken;
  163|      0|            }
  164|  34.1k|        } else if (pendingPoundSymbols == 0) {
  ------------------
  |  Branch (164:20): [True: 34.1k, False: 0]
  ------------------
  165|  34.1k|            mac.body.putToken(token, ppToken);
  166|  34.1k|        } else if (pendingPoundSymbols == 1) {
  ------------------
  |  Branch (166:20): [True: 0, False: 0]
  ------------------
  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|      0|        } else if (pendingPoundSymbols % 2 == 0) {
  ------------------
  |  Branch (187:20): [True: 0, False: 0]
  ------------------
  188|       |            // Any number of pastes '##' in a row: idempotent, just becomes one paste
  189|      0|            parseContext.requireProfile(ppToken->loc, ~EEsProfile, "token pasting (##)");
  190|      0|            parseContext.profileRequires(ppToken->loc, ~EEsProfile, 130, nullptr, "token pasting (##)");
  191|      0|            for (int i = 0; i < pendingPoundSymbols / 2; i++) {
  ------------------
  |  Branch (191:29): [True: 0, False: 0]
  ------------------
  192|      0|                mac.body.putToken(PpAtomPaste, &savePound);
  193|      0|            }
  194|      0|            mac.body.putToken(token, ppToken);
  195|      0|            pendingPoundSymbols = 0;
  196|      0|        } 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|  34.1k|        token = scanToken(ppToken);
  203|  34.1k|    }
  204|  34.1k|    if (pendingPoundSymbols != 0) {
  ------------------
  |  Branch (204:9): [True: 0, False: 34.1k]
  ------------------
  205|      0|        parseContext.ppError(ppToken->loc, "Macro ended with incomplete '#' paste/stringify operators", "#", "");
  206|      0|    }
  207|       |
  208|       |    // check for duplicate definition
  209|  34.1k|    MacroSymbol* existing = lookupMacroDef(defAtom);
  210|  34.1k|    if (existing != nullptr) {
  ------------------
  |  Branch (210:9): [True: 25, False: 34.0k]
  ------------------
  211|     25|        if (! existing->undef) {
  ------------------
  |  Branch (211:13): [True: 25, 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|     25|            if (existing->functionLike != mac.functionLike) {
  ------------------
  |  Branch (217:17): [True: 0, False: 25]
  ------------------
  218|      0|                parseContext.ppError(defineLoc, "Macro redefined; function-like versus object-like:", "#define",
  219|      0|                    atomStrings.getString(defAtom));
  220|     25|            } else if (existing->args.size() != mac.args.size()) {
  ------------------
  |  Branch (220:24): [True: 0, False: 25]
  ------------------
  221|      0|                parseContext.ppError(defineLoc, "Macro redefined; different number of arguments:", "#define",
  222|      0|                    atomStrings.getString(defAtom));
  223|     25|            } else {
  224|     25|                if (existing->args != mac.args) {
  ------------------
  |  Branch (224:21): [True: 0, False: 25]
  ------------------
  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|     25|                existing->body.reset();
  230|     25|                mac.body.reset();
  231|     25|                int newToken;
  232|     25|                bool firstToken = true;
  233|     87|                do {
  234|     87|                    int oldToken;
  235|     87|                    TPpToken oldPpToken;
  236|     87|                    TPpToken newPpToken;
  237|     87|                    oldToken = existing->body.getToken(parseContext, &oldPpToken);
  238|     87|                    newToken = mac.body.getToken(parseContext, &newPpToken);
  239|       |                    // for the first token, preceding spaces don't matter
  240|     87|                    if (firstToken) {
  ------------------
  |  Branch (240:25): [True: 25, False: 62]
  ------------------
  241|     25|                        newPpToken.space = oldPpToken.space;
  242|     25|                        firstToken = false;
  243|     25|                    }
  244|     87|                    if (oldToken != newToken || oldPpToken != newPpToken) {
  ------------------
  |  Branch (244:25): [True: 0, False: 87]
  |  Branch (244:49): [True: 10, False: 77]
  ------------------
  245|     10|                        parseContext.ppError(defineLoc, "Macro redefined; different substitutions:", "#define",
  246|     10|                            atomStrings.getString(defAtom));
  247|     10|                        break;
  248|     10|                    }
  249|     87|                } while (newToken != EndOfInput);
  ------------------
  |  Branch (249:26): [True: 62, False: 15]
  ------------------
  250|     25|            }
  251|     25|        }
  252|     25|        *existing = mac;
  253|     25|    } else
  254|  34.0k|        addMacroDef(defAtom, mac);
  255|       |
  256|  34.1k|    return '\n';
  257|  34.1k|}
_ZN7glslang10TPpContext7CPPelseEiPNS_8TPpTokenE:
  287|     10|{
  288|     10|    inElseSkip = true;
  289|     10|    int depth = 0;
  290|     10|    int token = scanToken(ppToken);
  291|       |
  292|    843|    while (token != EndOfInput) {
  ------------------
  |  Branch (292:12): [True: 842, False: 1]
  ------------------
  293|    842|        if (token != '#') {
  ------------------
  |  Branch (293:13): [True: 770, False: 72]
  ------------------
  294|  22.0k|            while (token != '\n' && token != EndOfInput)
  ------------------
  |  Branch (294:20): [True: 21.2k, False: 769]
  |  Branch (294:37): [True: 21.2k, False: 1]
  ------------------
  295|  21.2k|                token = scanToken(ppToken);
  296|       |
  297|    770|            if (token == EndOfInput)
  ------------------
  |  Branch (297:17): [True: 1, False: 769]
  ------------------
  298|      1|                return token;
  299|       |
  300|    769|            token = scanToken(ppToken);
  301|    769|            continue;
  302|    770|        }
  303|       |
  304|     72|        if ((token = scanToken(ppToken)) != PpAtomIdentifier)
  ------------------
  |  Branch (304:13): [True: 0, False: 72]
  ------------------
  305|      0|            continue;
  306|       |
  307|     72|        int nextAtom = atomStrings.getAtom(ppToken->name);
  308|     72|        if (nextAtom == PpAtomIf || nextAtom == PpAtomIfdef || nextAtom == PpAtomIfndef) {
  ------------------
  |  Branch (308:13): [True: 4, False: 68]
  |  Branch (308:37): [True: 9, False: 59]
  |  Branch (308:64): [True: 3, False: 56]
  ------------------
  309|     16|            depth++;
  310|     16|            if (ifdepth >= maxIfNesting || elsetracker >= maxIfNesting) {
  ------------------
  |  Branch (310:17): [True: 0, False: 16]
  |  Branch (310:44): [True: 0, False: 16]
  ------------------
  311|      0|                parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#if/#ifdef/#ifndef", "");
  312|      0|                return EndOfInput;
  313|     16|            } else {
  314|     16|                ifdepth++;
  315|     16|                elsetracker++;
  316|     16|            }
  317|     56|        } else if (nextAtom == PpAtomEndif) {
  ------------------
  |  Branch (317:20): [True: 20, False: 36]
  ------------------
  318|     20|            token = extraTokenCheck(nextAtom, ppToken, scanToken(ppToken));
  319|     20|            elseSeen[elsetracker] = false;
  320|     20|            --elsetracker;
  321|     20|            if (depth == 0) {
  ------------------
  |  Branch (321:17): [True: 6, False: 14]
  ------------------
  322|       |                // found the #endif we are looking for
  323|      6|                if (ifdepth > 0)
  ------------------
  |  Branch (323:21): [True: 4, False: 2]
  ------------------
  324|      4|                    --ifdepth;
  325|      6|                break;
  326|      6|            }
  327|     14|            --depth;
  328|     14|            --ifdepth;
  329|     36|        } else if (matchelse && depth == 0) {
  ------------------
  |  Branch (329:20): [True: 32, False: 4]
  |  Branch (329:33): [True: 14, False: 18]
  ------------------
  330|     14|            if (nextAtom == PpAtomElse) {
  ------------------
  |  Branch (330:17): [True: 2, False: 12]
  ------------------
  331|      2|                elseSeen[elsetracker] = true;
  332|      2|                token = extraTokenCheck(nextAtom, ppToken, scanToken(ppToken));
  333|       |                // found the #else we are looking for
  334|      2|                break;
  335|     12|            } else if (nextAtom == PpAtomElif) {
  ------------------
  |  Branch (335:24): [True: 0, False: 12]
  ------------------
  336|      0|                if (elseSeen[elsetracker])
  ------------------
  |  Branch (336:21): [True: 0, False: 0]
  ------------------
  337|      0|                    parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", "");
  338|       |                /* we decrement ifdepth here, because CPPif will increment
  339|       |                * it and we really want to leave it alone */
  340|      0|                if (ifdepth > 0) {
  ------------------
  |  Branch (340:21): [True: 0, False: 0]
  ------------------
  341|      0|                    --ifdepth;
  342|      0|                    elseSeen[elsetracker] = false;
  343|      0|                    --elsetracker;
  344|      0|                }
  345|      0|                inElseSkip = false;
  346|      0|                return CPPif(ppToken);
  347|      0|            }
  348|     22|        } else if (nextAtom == PpAtomElse) {
  ------------------
  |  Branch (348:20): [True: 4, False: 18]
  ------------------
  349|      4|            if (elseSeen[elsetracker])
  ------------------
  |  Branch (349:17): [True: 1, False: 3]
  ------------------
  350|      1|                parseContext.ppError(ppToken->loc, "#else after #else", "#else", "");
  351|      3|            else
  352|      3|                elseSeen[elsetracker] = true;
  353|      4|            token = extraTokenCheck(nextAtom, ppToken, scanToken(ppToken));
  354|     18|        } else if (nextAtom == PpAtomElif) {
  ------------------
  |  Branch (354:20): [True: 0, False: 18]
  ------------------
  355|      0|            if (elseSeen[elsetracker])
  ------------------
  |  Branch (355:17): [True: 0, False: 0]
  ------------------
  356|      0|                parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", "");
  357|      0|        }
  358|     72|    }
  359|       |    
  360|      9|    inElseSkip = false;
  361|      9|    return token;
  362|     10|}
_ZN7glslang10TPpContext15extraTokenCheckEiPNS_8TPpTokenEi:
  366|     41|{
  367|     41|    if (token != '\n' && token != EndOfInput) {
  ------------------
  |  Branch (367:9): [True: 11, False: 30]
  |  Branch (367:26): [True: 11, False: 0]
  ------------------
  368|     11|        static const char* message = "unexpected tokens following directive";
  369|       |
  370|     11|        const char* label;
  371|     11|        if (contextAtom == PpAtomElse)
  ------------------
  |  Branch (371:13): [True: 0, False: 11]
  ------------------
  372|      0|            label = "#else";
  373|     11|        else if (contextAtom == PpAtomElif)
  ------------------
  |  Branch (373:18): [True: 0, False: 11]
  ------------------
  374|      0|            label = "#elif";
  375|     11|        else if (contextAtom == PpAtomEndif)
  ------------------
  |  Branch (375:18): [True: 5, False: 6]
  ------------------
  376|      5|            label = "#endif";
  377|      6|        else if (contextAtom == PpAtomIf)
  ------------------
  |  Branch (377:18): [True: 6, False: 0]
  ------------------
  378|      6|            label = "#if";
  379|      0|        else if (contextAtom == PpAtomLine)
  ------------------
  |  Branch (379:18): [True: 0, False: 0]
  ------------------
  380|      0|            label = "#line";
  381|      0|        else
  382|      0|            label = "";
  383|       |
  384|     11|        if (parseContext.relaxedErrors())
  ------------------
  |  Branch (384:13): [True: 0, False: 11]
  ------------------
  385|      0|            parseContext.ppWarn(ppToken->loc, message, label, "");
  386|     11|        else
  387|     11|            parseContext.ppError(ppToken->loc, message, label, "");
  388|       |
  389|  35.8k|        while (token != '\n' && token != EndOfInput)
  ------------------
  |  Branch (389:16): [True: 35.7k, False: 10]
  |  Branch (389:33): [True: 35.7k, False: 1]
  ------------------
  390|  35.7k|            token = scanToken(ppToken);
  391|     11|    }
  392|       |
  393|     41|    return token;
  394|     41|}
_ZN7glslang10TPpContext4evalEiibRiRbPNS_8TPpTokenE:
  464|     21|{
  465|     21|    TSourceLoc loc = ppToken->loc;  // because we sometimes read the newline before reporting the error
  466|     21|    if (token == PpAtomIdentifier) {
  ------------------
  |  Branch (466:9): [True: 1, False: 20]
  ------------------
  467|      1|        if (strcmp("defined", ppToken->name) == 0) {
  ------------------
  |  Branch (467:13): [True: 0, False: 1]
  ------------------
  468|      0|            if (! parseContext.isReadingHLSL() && isMacroInput()) {
  ------------------
  |  Branch (468:17): [True: 0, False: 0]
  |  Branch (468:51): [True: 0, False: 0]
  ------------------
  469|      0|                if (parseContext.relaxedErrors())
  ------------------
  |  Branch (469:21): [True: 0, False: 0]
  ------------------
  470|      0|                    parseContext.ppWarn(ppToken->loc, "nonportable when expanded from macros for preprocessor expression",
  471|      0|                        "defined", "");
  472|      0|                else
  473|      0|                    parseContext.ppError(ppToken->loc, "cannot use in preprocessor expression when expanded from macros",
  474|      0|                        "defined", "");
  475|      0|            }
  476|      0|            bool needclose = 0;
  477|      0|            token = scanToken(ppToken);
  478|      0|            if (token == '(') {
  ------------------
  |  Branch (478:17): [True: 0, False: 0]
  ------------------
  479|      0|                needclose = true;
  480|      0|                token = scanToken(ppToken);
  481|      0|            }
  482|      0|            if (token != PpAtomIdentifier) {
  ------------------
  |  Branch (482:17): [True: 0, False: 0]
  ------------------
  483|      0|                parseContext.ppError(loc, "incorrect directive, expected identifier", "preprocessor evaluation", "");
  484|      0|                err = true;
  485|      0|                res = 0;
  486|       |
  487|      0|                return token;
  488|      0|            }
  489|       |
  490|      0|            MacroSymbol* macro = lookupMacroDef(atomStrings.getAtom(ppToken->name));
  491|      0|            res = macro != nullptr ? !macro->undef : 0;
  ------------------
  |  Branch (491:19): [True: 0, False: 0]
  ------------------
  492|      0|            token = scanToken(ppToken);
  493|      0|            if (needclose) {
  ------------------
  |  Branch (493:17): [True: 0, False: 0]
  ------------------
  494|      0|                if (token != ')') {
  ------------------
  |  Branch (494:21): [True: 0, False: 0]
  ------------------
  495|      0|                    parseContext.ppError(loc, "expected ')'", "preprocessor evaluation", "");
  496|      0|                    err = true;
  497|      0|                    res = 0;
  498|       |
  499|      0|                    return token;
  500|      0|                }
  501|      0|                token = scanToken(ppToken);
  502|      0|            }
  503|      1|        } else {
  504|      1|            token = tokenPaste(token, *ppToken);
  505|      1|            token = evalToToken(token, shortCircuit, res, err, ppToken);
  506|      1|            return eval(token, precedence, shortCircuit, res, err, ppToken);
  507|      1|        }
  508|     20|    } else if (token == PpAtomConstInt) {
  ------------------
  |  Branch (508:16): [True: 2, False: 18]
  ------------------
  509|      2|        res = ppToken->ival;
  510|      2|        token = scanToken(ppToken);
  511|     18|    } else if (token == '(') {
  ------------------
  |  Branch (511:16): [True: 6, False: 12]
  ------------------
  512|      6|        token = scanToken(ppToken);
  513|      6|        token = eval(token, MIN_PRECEDENCE, shortCircuit, res, err, ppToken);
  514|      6|        if (! err) {
  ------------------
  |  Branch (514:13): [True: 0, False: 6]
  ------------------
  515|      0|            if (token != ')') {
  ------------------
  |  Branch (515:17): [True: 0, False: 0]
  ------------------
  516|      0|                parseContext.ppError(loc, "expected ')'", "preprocessor evaluation", "");
  517|      0|                err = true;
  518|      0|                res = 0;
  519|       |
  520|      0|                return token;
  521|      0|            }
  522|      0|            token = scanToken(ppToken);
  523|      0|        }
  524|     12|    } else {
  525|     12|        int op = NUM_ELEMENTS(unop) - 1;
  ------------------
  |  |  461|     12|#define NUM_ELEMENTS(A) (sizeof(A) / sizeof(A[0]))
  ------------------
  526|     48|        for (; op >= 0; op--) {
  ------------------
  |  Branch (526:16): [True: 42, False: 6]
  ------------------
  527|     42|            if (unop[op].token == token)
  ------------------
  |  Branch (527:17): [True: 6, False: 36]
  ------------------
  528|      6|                break;
  529|     42|        }
  530|     12|        if (op >= 0) {
  ------------------
  |  Branch (530:13): [True: 6, False: 6]
  ------------------
  531|      6|            token = scanToken(ppToken);
  532|      6|            token = eval(token, UNARY, shortCircuit, res, err, ppToken);
  533|      6|            res = unop[op].op(res);
  534|      6|        } else {
  535|      6|            parseContext.ppError(loc, "bad expression", "preprocessor evaluation", "");
  536|      6|            err = true;
  537|      6|            res = 0;
  538|       |
  539|      6|            return token;
  540|      6|        }
  541|     12|    }
  542|       |
  543|     14|    token = evalToToken(token, shortCircuit, res, err, ppToken);
  544|       |
  545|       |    // Perform evaluation of binary operation, if there is one, otherwise we are done.
  546|     15|    while (! err) {
  ------------------
  |  Branch (546:12): [True: 3, False: 12]
  ------------------
  547|      3|        if (token == ')' || token == '\n')
  ------------------
  |  Branch (547:13): [True: 0, False: 3]
  |  Branch (547:29): [True: 2, False: 1]
  ------------------
  548|      2|            break;
  549|      1|        int op;
  550|     13|        for (op = NUM_ELEMENTS(binop) - 1; op >= 0; op--) {
  ------------------
  |  |  461|      1|#define NUM_ELEMENTS(A) (sizeof(A) / sizeof(A[0]))
  ------------------
  |  Branch (550:44): [True: 13, False: 0]
  ------------------
  551|     13|            if (binop[op].token == token)
  ------------------
  |  Branch (551:17): [True: 1, False: 12]
  ------------------
  552|      1|                break;
  553|     13|        }
  554|      1|        if (op < 0 || binop[op].precedence <= precedence)
  ------------------
  |  Branch (554:13): [True: 0, False: 1]
  |  Branch (554:23): [True: 0, False: 1]
  ------------------
  555|      0|            break;
  556|      1|        int leftSide = res;
  557|       |
  558|       |        // Setup short-circuiting, needed for ES, unless already in a short circuit.
  559|       |        // (Once in a short-circuit, can't turn off again, until that whole subexpression is done.
  560|      1|        if (! shortCircuit) {
  ------------------
  |  Branch (560:13): [True: 1, False: 0]
  ------------------
  561|      1|            if ((token == PpAtomOr  && leftSide == 1) ||
  ------------------
  |  Branch (561:18): [True: 0, False: 1]
  |  Branch (561:40): [True: 0, False: 0]
  ------------------
  562|      1|                (token == PpAtomAnd && leftSide == 0))
  ------------------
  |  Branch (562:18): [True: 0, False: 1]
  |  Branch (562:40): [True: 0, False: 0]
  ------------------
  563|      0|                shortCircuit = true;
  564|      1|        }
  565|       |
  566|      1|        token = scanToken(ppToken);
  567|      1|        token = eval(token, binop[op].precedence, shortCircuit, res, err, ppToken);
  568|       |
  569|      1|        if (binop[op].op == op_div || binop[op].op == op_mod) {
  ------------------
  |  Branch (569:13): [True: 0, False: 1]
  |  Branch (569:39): [True: 0, False: 1]
  ------------------
  570|      0|            if (res == 0) {
  ------------------
  |  Branch (570:17): [True: 0, False: 0]
  ------------------
  571|      0|                parseContext.ppError(loc, "division by 0", "preprocessor evaluation", "");
  572|      0|                res = 1;
  573|      0|            }
  574|      0|        }
  575|      1|        res = binop[op].op(leftSide, res);
  576|      1|    }
  577|       |
  578|     14|    return token;
  579|     21|}
_ZN7glslang10TPpContext11evalToTokenEibRiRbPNS_8TPpTokenE:
  583|     15|{
  584|     16|    while (token == PpAtomIdentifier && strcmp("defined", ppToken->name) != 0) {
  ------------------
  |  Branch (584:12): [True: 1, False: 15]
  |  Branch (584:41): [True: 1, False: 0]
  ------------------
  585|      1|        switch (MacroExpand(ppToken, true, false)) {
  ------------------
  |  Branch (585:17): [True: 1, False: 0]
  ------------------
  586|      0|        case MacroExpandNotStarted:
  ------------------
  |  Branch (586:9): [True: 0, False: 1]
  ------------------
  587|      0|        case MacroExpandError:
  ------------------
  |  Branch (587:9): [True: 0, False: 1]
  ------------------
  588|      0|            parseContext.ppError(ppToken->loc, "can't evaluate expression", "preprocessor evaluation", "");
  589|      0|            err = true;
  590|      0|            res = 0;
  591|      0|            break;
  592|      0|        case MacroExpandStarted:
  ------------------
  |  Branch (592:9): [True: 0, False: 1]
  ------------------
  593|      0|            break;
  594|      1|        case MacroExpandUndef:
  ------------------
  |  Branch (594:9): [True: 1, False: 0]
  ------------------
  595|      1|            if (! shortCircuit && parseContext.isEsProfile()) {
  ------------------
  |  Branch (595:17): [True: 1, False: 0]
  |  Branch (595:35): [True: 0, False: 1]
  ------------------
  596|      0|                const char* message = "undefined macro in expression not allowed in es profile";
  597|      0|                if (parseContext.relaxedErrors())
  ------------------
  |  Branch (597:21): [True: 0, False: 0]
  ------------------
  598|      0|                    parseContext.ppWarn(ppToken->loc, message, "preprocessor evaluation", ppToken->name);
  599|      0|                else
  600|      0|                    parseContext.ppError(ppToken->loc, message, "preprocessor evaluation", ppToken->name);
  601|      0|            }
  602|      1|            break;
  603|      1|        }
  604|      1|        token = scanToken(ppToken);
  605|      1|        if (err)
  ------------------
  |  Branch (605:13): [True: 0, False: 1]
  ------------------
  606|      0|            break;
  607|      1|    }
  608|       |
  609|     15|    return token;
  610|     15|}
_ZN7glslang10TPpContext5CPPifEPNS_8TPpTokenE:
  614|      7|{
  615|      7|    int token = scanToken(ppToken);
  616|      7|    if (ifdepth >= maxIfNesting || elsetracker >= maxIfNesting) {
  ------------------
  |  Branch (616:9): [True: 0, False: 7]
  |  Branch (616:36): [True: 0, False: 7]
  ------------------
  617|      0|        parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#if", "");
  618|      0|        return EndOfInput;
  619|      7|    } else {
  620|      7|        elsetracker++;
  621|      7|        ifdepth++;
  622|      7|    }
  623|      7|    int res = 0;
  624|      7|    bool err = false;
  625|      7|    token = eval(token, MIN_PRECEDENCE, false, res, err, ppToken);
  626|      7|    token = extraTokenCheck(PpAtomIf, ppToken, token);
  627|      7|    if (!res && !err)
  ------------------
  |  Branch (627:9): [True: 7, False: 0]
  |  Branch (627:17): [True: 1, False: 6]
  ------------------
  628|      1|        token = CPPelse(1, ppToken);
  629|       |
  630|      7|    return token;
  631|      7|}
_ZN7glslang10TPpContext8CPPifdefEiPNS_8TPpTokenE:
  635|      6|{
  636|      6|    int token = scanToken(ppToken);
  637|      6|    if (ifdepth > maxIfNesting || elsetracker > maxIfNesting) {
  ------------------
  |  Branch (637:9): [True: 0, False: 6]
  |  Branch (637:35): [True: 0, False: 6]
  ------------------
  638|      0|        parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#ifdef", "");
  639|      0|        return EndOfInput;
  640|      6|    } else {
  641|      6|        elsetracker++;
  642|      6|        ifdepth++;
  643|      6|    }
  644|       |
  645|      6|    if (token != PpAtomIdentifier) {
  ------------------
  |  Branch (645:9): [True: 0, False: 6]
  ------------------
  646|      0|        if (defined)
  ------------------
  |  Branch (646:13): [True: 0, False: 0]
  ------------------
  647|      0|            parseContext.ppError(ppToken->loc, "must be followed by macro name", "#ifdef", "");
  648|      0|        else
  649|      0|            parseContext.ppError(ppToken->loc, "must be followed by macro name", "#ifndef", "");
  650|      6|    } else {
  651|      6|        MacroSymbol* macro = lookupMacroDef(atomStrings.getAtom(ppToken->name));
  652|      6|        token = scanToken(ppToken);
  653|      6|        if (token != '\n') {
  ------------------
  |  Branch (653:13): [True: 0, False: 6]
  ------------------
  654|      0|            parseContext.ppError(ppToken->loc, "unexpected tokens following #ifdef directive - expected a newline", "#ifdef", "");
  655|      0|            while (token != '\n' && token != EndOfInput)
  ------------------
  |  Branch (655:20): [True: 0, False: 0]
  |  Branch (655:37): [True: 0, False: 0]
  ------------------
  656|      0|                token = scanToken(ppToken);
  657|      0|        }
  658|      6|        if (((macro != nullptr && !macro->undef) ? 1 : 0) != defined)
  ------------------
  |  Branch (658:13): [True: 5, False: 1]
  |  Branch (658:15): [True: 0, False: 6]
  |  Branch (658:35): [True: 0, False: 0]
  ------------------
  659|      5|            token = CPPelse(1, ppToken);
  660|      6|    }
  661|       |
  662|      6|    return token;
  663|      6|}
_ZN7glslang10TPpContext8CPPerrorEPNS_8TPpTokenE:
  812|     12|{
  813|     12|    disableEscapeSequences = true;
  814|     12|    int token = scanToken(ppToken);
  815|     12|    disableEscapeSequences = false;
  816|     12|    std::string message;
  817|     12|    TSourceLoc loc = ppToken->loc;
  818|       |
  819|   501k|    while (token != '\n' && token != EndOfInput) {
  ------------------
  |  Branch (819:12): [True: 501k, False: 7]
  |  Branch (819:29): [True: 501k, False: 5]
  ------------------
  820|   501k|        if (token == PpAtomConstInt16 || token == PpAtomConstUint16 ||
  ------------------
  |  Branch (820:13): [True: 0, False: 501k]
  |  Branch (820:42): [True: 0, False: 501k]
  ------------------
  821|   501k|            token == PpAtomConstInt   || token == PpAtomConstUint   ||
  ------------------
  |  Branch (821:13): [True: 9.82k, False: 491k]
  |  Branch (821:42): [True: 0, False: 491k]
  ------------------
  822|   491k|            token == PpAtomConstInt64 || token == PpAtomConstUint64 ||
  ------------------
  |  Branch (822:13): [True: 0, False: 491k]
  |  Branch (822:42): [True: 0, False: 491k]
  ------------------
  823|   491k|            token == PpAtomConstFloat16 ||
  ------------------
  |  Branch (823:13): [True: 0, False: 491k]
  ------------------
  824|   491k|            token == PpAtomConstFloat || token == PpAtomConstDouble) {
  ------------------
  |  Branch (824:13): [True: 0, False: 491k]
  |  Branch (824:42): [True: 0, False: 491k]
  ------------------
  825|  9.82k|                message.append(ppToken->name);
  826|   491k|        } else if (token == PpAtomIdentifier || token == PpAtomConstString) {
  ------------------
  |  Branch (826:20): [True: 102k, False: 389k]
  |  Branch (826:49): [True: 0, False: 389k]
  ------------------
  827|   102k|            message.append(ppToken->name);
  828|   389k|        } else {
  829|   389k|            message.append(atomStrings.getString(token));
  830|   389k|        }
  831|   501k|        message.append(" ");
  832|   501k|        token = scanToken(ppToken);
  833|   501k|    }
  834|     12|    parseContext.notifyErrorDirective(loc.line, message.c_str());
  835|       |    // store this msg into the shader's information log..set the Compile Error flag!!!!
  836|     12|    parseContext.ppError(loc, message.c_str(), "#error", "");
  837|       |
  838|     12|    return '\n';
  839|     12|}
_ZN7glslang10TPpContext10CPPversionEPNS_8TPpTokenE:
  881|     12|{
  882|     12|    int token = scanToken(ppToken);
  883|       |
  884|     12|    if (errorOnVersion || versionSeen) {
  ------------------
  |  Branch (884:9): [True: 1, False: 11]
  |  Branch (884:27): [True: 0, False: 11]
  ------------------
  885|      1|        if (parseContext.isReadingHLSL())
  ------------------
  |  Branch (885:13): [True: 1, False: 0]
  ------------------
  886|      1|            parseContext.ppError(ppToken->loc, "invalid preprocessor command", "#version", "");
  887|      0|        else
  888|      0|            parseContext.ppError(ppToken->loc, "must occur first in shader", "#version", "");
  889|      1|    }
  890|     12|    versionSeen = true;
  891|       |
  892|     12|    if (token == '\n') {
  ------------------
  |  Branch (892:9): [True: 0, False: 12]
  ------------------
  893|      0|        parseContext.ppError(ppToken->loc, "must be followed by version number", "#version", "");
  894|       |
  895|      0|        return token;
  896|      0|    }
  897|       |
  898|     12|    if (token != PpAtomConstInt)
  ------------------
  |  Branch (898:9): [True: 0, False: 12]
  ------------------
  899|      0|        parseContext.ppError(ppToken->loc, "must be followed by version number", "#version", "");
  900|       |
  901|     12|    ppToken->ival = atoi(ppToken->name);
  902|     12|    int versionNumber = ppToken->ival;
  903|     12|    int line = ppToken->loc.line;
  904|     12|    token = scanToken(ppToken);
  905|       |
  906|     12|    if (token == '\n') {
  ------------------
  |  Branch (906:9): [True: 4, False: 8]
  ------------------
  907|      4|        parseContext.notifyVersion(line, versionNumber, nullptr);
  908|      4|        return token;
  909|      8|    } else {
  910|      8|        int profileAtom = atomStrings.getAtom(ppToken->name);
  911|      8|        if (profileAtom != PpAtomCore &&
  ------------------
  |  Branch (911:13): [True: 0, False: 8]
  ------------------
  912|      0|            profileAtom != PpAtomCompatibility &&
  ------------------
  |  Branch (912:13): [True: 0, False: 0]
  ------------------
  913|      0|            profileAtom != PpAtomEs)
  ------------------
  |  Branch (913:13): [True: 0, False: 0]
  ------------------
  914|      0|            parseContext.ppError(ppToken->loc, "bad profile name; use es, core, or compatibility", "#version", "");
  915|      8|        parseContext.notifyVersion(line, versionNumber, ppToken->name);
  916|      8|        token = scanToken(ppToken);
  917|       |
  918|      8|        if (token == '\n')
  ------------------
  |  Branch (918:13): [True: 8, False: 0]
  ------------------
  919|      8|            return token;
  920|      0|        else
  921|      0|            parseContext.ppError(ppToken->loc, "bad tokens following profile -- expected newline", "#version", "");
  922|      8|    }
  923|       |
  924|      0|    return token;
  925|     12|}
_ZN7glslang10TPpContext12CPPextensionEPNS_8TPpTokenE:
  929|    255|{
  930|    255|    int line = ppToken->loc.line;
  931|    255|    int token = scanToken(ppToken);
  932|    255|    char extensionName[MaxTokenLength + 1];
  933|       |
  934|    255|    if (token=='\n') {
  ------------------
  |  Branch (934:9): [True: 0, False: 255]
  ------------------
  935|      0|        parseContext.ppError(ppToken->loc, "extension name not specified", "#extension", "");
  936|      0|        return token;
  937|      0|    }
  938|       |
  939|    255|    if (token != PpAtomIdentifier)
  ------------------
  |  Branch (939:9): [True: 0, False: 255]
  ------------------
  940|      0|        parseContext.ppError(ppToken->loc, "extension name expected", "#extension", "");
  941|       |
  942|    255|    snprintf(extensionName, sizeof(extensionName), "%s", ppToken->name);
  943|       |
  944|    255|    token = scanToken(ppToken);
  945|    255|    if (token != ':') {
  ------------------
  |  Branch (945:9): [True: 0, False: 255]
  ------------------
  946|      0|        parseContext.ppError(ppToken->loc, "':' missing after extension name", "#extension", "");
  947|      0|        return token;
  948|      0|    }
  949|       |
  950|    255|    token = scanToken(ppToken);
  951|    255|    if (token != PpAtomIdentifier) {
  ------------------
  |  Branch (951:9): [True: 0, False: 255]
  ------------------
  952|      0|        parseContext.ppError(ppToken->loc, "behavior for extension not specified", "#extension", "");
  953|      0|        return token;
  954|      0|    }
  955|       |
  956|    255|    parseContext.updateExtensionBehavior(line, extensionName, ppToken->name);
  957|    255|    parseContext.notifyExtensionDirective(line, extensionName, ppToken->name);
  958|       |
  959|    255|    token = scanToken(ppToken);
  960|    255|    if (token == '\n')
  ------------------
  |  Branch (960:9): [True: 255, False: 0]
  ------------------
  961|    255|        return token;
  962|      0|    else
  963|      0|        parseContext.ppError(ppToken->loc,  "extra tokens -- expected newline", "#extension","");
  964|       |
  965|      0|    return token;
  966|    255|}
_ZN7glslang10TPpContext11readCPPlineEPNS_8TPpTokenE:
  969|   194k|{
  970|   194k|    int token = scanToken(ppToken);
  971|       |
  972|   194k|    if (token == PpAtomIdentifier) {
  ------------------
  |  Branch (972:9): [True: 34.4k, False: 160k]
  ------------------
  973|  34.4k|        switch (atomStrings.getAtom(ppToken->name)) {
  974|  34.1k|        case PpAtomDefine:
  ------------------
  |  Branch (974:9): [True: 34.1k, False: 373]
  ------------------
  975|  34.1k|            token = CPPdefine(ppToken);
  976|  34.1k|            break;
  977|      4|        case PpAtomElse:
  ------------------
  |  Branch (977:9): [True: 4, False: 34.4k]
  ------------------
  978|      4|            if (elseSeen[elsetracker])
  ------------------
  |  Branch (978:17): [True: 0, False: 4]
  ------------------
  979|      0|                parseContext.ppError(ppToken->loc, "#else after #else", "#else", "");
  980|      4|            elseSeen[elsetracker] = true;
  981|      4|            if (ifdepth == 0)
  ------------------
  |  Branch (981:17): [True: 3, False: 1]
  ------------------
  982|      3|                parseContext.ppError(ppToken->loc, "mismatched statements", "#else", "");
  983|      4|            token = extraTokenCheck(PpAtomElse, ppToken, scanToken(ppToken));
  984|      4|            token = CPPelse(0, ppToken);
  985|      4|            break;
  986|      0|        case PpAtomElif:
  ------------------
  |  Branch (986:9): [True: 0, False: 34.4k]
  ------------------
  987|      0|            if (ifdepth == 0)
  ------------------
  |  Branch (987:17): [True: 0, False: 0]
  ------------------
  988|      0|                parseContext.ppError(ppToken->loc, "mismatched statements", "#elif", "");
  989|      0|            if (elseSeen[elsetracker])
  ------------------
  |  Branch (989:17): [True: 0, False: 0]
  ------------------
  990|      0|                parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", "");
  991|       |            // this token is really a dont care, but we still need to eat the tokens
  992|      0|            token = scanToken(ppToken);
  993|      0|            while (token != '\n' && token != EndOfInput)
  ------------------
  |  Branch (993:20): [True: 0, False: 0]
  |  Branch (993:37): [True: 0, False: 0]
  ------------------
  994|      0|                token = scanToken(ppToken);
  995|      0|            token = CPPelse(0, ppToken);
  996|      0|            break;
  997|      4|        case PpAtomEndif:
  ------------------
  |  Branch (997:9): [True: 4, False: 34.4k]
  ------------------
  998|      4|            if (ifdepth == 0)
  ------------------
  |  Branch (998:17): [True: 1, False: 3]
  ------------------
  999|      1|                parseContext.ppError(ppToken->loc, "mismatched statements", "#endif", "");
 1000|      3|            else {
 1001|      3|                elseSeen[elsetracker] = false;
 1002|      3|                --elsetracker;
 1003|      3|                --ifdepth;
 1004|      3|            }
 1005|      4|            token = extraTokenCheck(PpAtomEndif, ppToken, scanToken(ppToken));
 1006|      4|            break;
 1007|      7|        case PpAtomIf:
  ------------------
  |  Branch (1007:9): [True: 7, False: 34.4k]
  ------------------
 1008|      7|            token = CPPif(ppToken);
 1009|      7|            break;
 1010|      5|        case PpAtomIfdef:
  ------------------
  |  Branch (1010:9): [True: 5, False: 34.4k]
  ------------------
 1011|      5|            token = CPPifdef(1, ppToken);
 1012|      5|            break;
 1013|      1|        case PpAtomIfndef:
  ------------------
  |  Branch (1013:9): [True: 1, False: 34.4k]
  ------------------
 1014|      1|            token = CPPifdef(0, ppToken);
 1015|      1|            break;
 1016|      0|        case PpAtomLine:
  ------------------
  |  Branch (1016:9): [True: 0, False: 34.4k]
  ------------------
 1017|      0|            token = CPPline(ppToken);
 1018|      0|            break;
 1019|      0|        case PpAtomInclude:
  ------------------
  |  Branch (1019:9): [True: 0, False: 34.4k]
  ------------------
 1020|      0|            if(!parseContext.isReadingHLSL()) {
  ------------------
  |  Branch (1020:16): [True: 0, False: 0]
  ------------------
 1021|      0|                const std::array exts = { E_GL_GOOGLE_include_directive, E_GL_ARB_shading_language_include };
 1022|      0|                parseContext.ppRequireExtensions(ppToken->loc, exts, "#include");
 1023|      0|            }
 1024|      0|            token = CPPinclude(ppToken);
 1025|      0|            break;
 1026|      0|        case PpAtomPragma:
  ------------------
  |  Branch (1026:9): [True: 0, False: 34.4k]
  ------------------
 1027|      0|            token = CPPpragma(ppToken);
 1028|      0|            break;
 1029|      0|        case PpAtomUndef:
  ------------------
  |  Branch (1029:9): [True: 0, False: 34.4k]
  ------------------
 1030|      0|            token = CPPundef(ppToken);
 1031|      0|            break;
 1032|     12|        case PpAtomError:
  ------------------
  |  Branch (1032:9): [True: 12, False: 34.4k]
  ------------------
 1033|     12|            token = CPPerror(ppToken);
 1034|     12|            break;
 1035|     12|        case PpAtomVersion:
  ------------------
  |  Branch (1035:9): [True: 12, False: 34.4k]
  ------------------
 1036|     12|            token = CPPversion(ppToken);
 1037|     12|            break;
 1038|    255|        case PpAtomExtension:
  ------------------
  |  Branch (1038:9): [True: 255, False: 34.2k]
  ------------------
 1039|    255|            token = CPPextension(ppToken);
 1040|    255|            break;
 1041|     73|        default:
  ------------------
  |  Branch (1041:9): [True: 73, False: 34.4k]
  ------------------
 1042|     73|            parseContext.ppError(ppToken->loc, "invalid directive:", "#", ppToken->name);
 1043|     73|            break;
 1044|  34.4k|        }
 1045|   160k|    } else if (token != '\n' && token != EndOfInput)
  ------------------
  |  Branch (1045:16): [True: 558, False: 159k]
  |  Branch (1045:33): [True: 556, False: 2]
  ------------------
 1046|    556|        parseContext.ppError(ppToken->loc, "invalid directive", "#", "");
 1047|       |
 1048|   204k|    while (token != '\n' && token != EndOfInput)
  ------------------
  |  Branch (1048:12): [True: 9.33k, False: 194k]
  |  Branch (1048:29): [True: 9.33k, False: 5]
  ------------------
 1049|  9.33k|        token = scanToken(ppToken);
 1050|       |
 1051|   194k|    return token;
 1052|   194k|}
_ZN7glslang10TPpContext15PrescanMacroArgERNS0_11TokenStreamEPNS_8TPpTokenEb:
 1090|    199|{
 1091|       |    // expand the argument
 1092|    199|    TokenStream* expandedArg = new TokenStream;
 1093|    199|    pushInput(new tMarkerInput(this));
 1094|    199|    pushTokenStreamInput(arg);
 1095|    199|    int token;
 1096|  2.43k|    while ((token = scanToken(ppToken)) != tMarkerInput::marker && token != EndOfInput) {
  ------------------
  |  Branch (1096:12): [True: 2.23k, False: 199]
  |  Branch (1096:68): [True: 2.23k, False: 0]
  ------------------
 1097|  2.23k|        token = tokenPaste(token, *ppToken);
 1098|  2.23k|        if (token == PpAtomIdentifier) {
  ------------------
  |  Branch (1098:13): [True: 17, False: 2.21k]
  ------------------
 1099|     17|            switch (MacroExpand(ppToken, false, newLineOkay)) {
  ------------------
  |  Branch (1099:21): [True: 17, False: 0]
  ------------------
 1100|     17|            case MacroExpandNotStarted:
  ------------------
  |  Branch (1100:13): [True: 17, False: 0]
  ------------------
 1101|     17|                break;
 1102|      0|            case MacroExpandError:
  ------------------
  |  Branch (1102:13): [True: 0, False: 17]
  ------------------
 1103|       |                // toss the rest of the pushed-input argument by scanning until tMarkerInput
 1104|      0|                while ((token = scanToken(ppToken)) != tMarkerInput::marker && token != EndOfInput)
  ------------------
  |  Branch (1104:24): [True: 0, False: 0]
  |  Branch (1104:80): [True: 0, False: 0]
  ------------------
 1105|      0|                    ;
 1106|      0|                break;
 1107|      0|            case MacroExpandStarted:
  ------------------
  |  Branch (1107:13): [True: 0, False: 17]
  ------------------
 1108|      0|            case MacroExpandUndef:
  ------------------
  |  Branch (1108:13): [True: 0, False: 17]
  ------------------
 1109|      0|                continue;
 1110|     17|            }
 1111|     17|        }
 1112|  2.23k|        if (token == tMarkerInput::marker || token == EndOfInput)
  ------------------
  |  Branch (1112:13): [True: 0, False: 2.23k]
  |  Branch (1112:46): [True: 0, False: 2.23k]
  ------------------
 1113|      0|            break;
 1114|  2.23k|        expandedArg->putToken(token, ppToken);
 1115|  2.23k|    }
 1116|       |
 1117|    199|    if (token != tMarkerInput::marker) {
  ------------------
  |  Branch (1117:9): [True: 0, False: 199]
  ------------------
 1118|       |        // Error, or MacroExpand ate the marker, so had bad input, recover
 1119|      0|        delete expandedArg;
 1120|      0|        expandedArg = nullptr;
 1121|      0|    }
 1122|       |
 1123|    199|    return expandedArg;
 1124|    199|}
_ZN7glslang10TPpContext11tMacroInput4scanEPNS_8TPpTokenE:
 1131|    346|{
 1132|    346|    int token;
 1133|    346|    do {
 1134|    346|        token = mac->body.getToken(pp->parseContext, ppToken);
 1135|    346|    } while (token == ' ');  // handle white space in macro
  ------------------
  |  Branch (1135:14): [True: 0, False: 346]
  ------------------
 1136|       |
 1137|       |    // Hash operators basically turn off a round of macro substitution
 1138|       |    // (the round done on the argument before the round done on the RHS of the
 1139|       |    // macro definition):
 1140|       |    //
 1141|       |    // "A parameter in the replacement list, unless preceded by a # or ##
 1142|       |    // preprocessing token or followed by a ## preprocessing token (see below),
 1143|       |    // is replaced by the corresponding argument after all macros contained
 1144|       |    // therein have been expanded."
 1145|       |    //
 1146|       |    // "If, in the replacement list, a parameter is immediately preceded or
 1147|       |    // followed by a ## preprocessing token, the parameter is replaced by the
 1148|       |    // corresponding argument's preprocessing token sequence."
 1149|       |
 1150|    346|    bool pasting = false;
 1151|    346|    if (postpaste) {
  ------------------
  |  Branch (1151:9): [True: 0, False: 346]
  ------------------
 1152|       |        // don't expand next token
 1153|      0|        pasting = true;
 1154|      0|        postpaste = false;
 1155|      0|    }
 1156|       |
 1157|    346|    if (prepaste) {
  ------------------
  |  Branch (1157:9): [True: 0, False: 346]
  ------------------
 1158|       |        // already know we should be on a ##, verify
 1159|      0|        assert(token == PpAtomPaste);
 1160|      0|        prepaste = false;
 1161|      0|        postpaste = true;
 1162|      0|    }
 1163|       |
 1164|       |    // see if are preceding a ##
 1165|    346|    if (mac->body.peekTokenizedPasting(false)) {
  ------------------
  |  Branch (1165:9): [True: 0, False: 346]
  ------------------
 1166|      0|        prepaste = true;
 1167|      0|        pasting = true;
 1168|      0|    }
 1169|       |
 1170|       |
 1171|       |    // TODO: preprocessor:  properly handle whitespace (or lack of it) between tokens when expanding
 1172|    346|    if (token == PpAtomIdentifier) {
  ------------------
  |  Branch (1172:9): [True: 105, False: 241]
  ------------------
 1173|    105|        int i;
 1174|    159|        for (i = (int)mac->args.size() - 1; i >= 0; i--)
  ------------------
  |  Branch (1174:45): [True: 156, False: 3]
  ------------------
 1175|    156|            if (strcmp(pp->atomStrings.getString(mac->args[i]), ppToken->name) == 0)
  ------------------
  |  Branch (1175:17): [True: 102, False: 54]
  ------------------
 1176|    102|                break;
 1177|    105|        if (i >= 0) {
  ------------------
  |  Branch (1177:13): [True: 102, False: 3]
  ------------------
 1178|    102|            TokenStream* arg = expandedArgs[i];
 1179|    102|            bool expanded = !!arg && !pasting;
  ------------------
  |  Branch (1179:29): [True: 102, False: 0]
  |  Branch (1179:38): [True: 102, False: 0]
  ------------------
 1180|       |            // HLSL does expand macros before concatenation
 1181|    102|            if (arg == nullptr || (pasting && !pp->parseContext.isReadingHLSL()) ) {
  ------------------
  |  Branch (1181:17): [True: 0, False: 102]
  |  Branch (1181:36): [True: 0, False: 102]
  |  Branch (1181:47): [True: 0, False: 0]
  ------------------
 1182|      0|                arg = args[i];
 1183|      0|            }
 1184|    102|            pp->pushTokenStreamInput(*arg, prepaste, expanded);
 1185|       |
 1186|    102|            return pp->scanToken(ppToken);
 1187|    102|        }
 1188|    105|    }
 1189|       |
 1190|    244|    if (token == EndOfInput)
  ------------------
  |  Branch (1190:9): [True: 114, False: 130]
  ------------------
 1191|    114|        mac->busy = 0;
 1192|       |
 1193|    244|    return token;
 1194|    346|}
_ZN7glslang10TPpContext10tZeroInput4scanEPNS_8TPpTokenE:
 1198|      2|{
 1199|      2|    if (done)
  ------------------
  |  Branch (1199:9): [True: 1, False: 1]
  ------------------
 1200|      1|        return EndOfInput;
 1201|       |
 1202|      1|    ppToken->name[0] = '0';
 1203|      1|    ppToken->name[1] = 0;
 1204|      1|    ppToken->ival = 0;
 1205|      1|    ppToken->space = false;
 1206|      1|    done = true;
 1207|       |
 1208|      1|    return PpAtomConstInt;
 1209|      2|}
_ZN7glslang10TPpContext11MacroExpandEPNS_8TPpTokenEbb:
 1224|  4.28M|{
 1225|  4.28M|    ppToken->space = false;
 1226|  4.28M|    int macroAtom = atomStrings.getAtom(ppToken->name);
 1227|  4.28M|    if (ppToken->fullyExpanded)
  ------------------
  |  Branch (1227:9): [True: 17, False: 4.28M]
  ------------------
 1228|     17|        return MacroExpandNotStarted;
 1229|       |
 1230|  4.28M|    switch (macroAtom) {
 1231|      0|    case PpAtomLineMacro:
  ------------------
  |  Branch (1231:5): [True: 0, False: 4.28M]
  ------------------
 1232|       |        // Arguments which are macro have been replaced in the first stage.
 1233|      0|        if (ppToken->ival == 0)
  ------------------
  |  Branch (1233:13): [True: 0, False: 0]
  ------------------
 1234|      0|            ppToken->ival = parseContext.getCurrentLoc().line;
 1235|      0|        snprintf(ppToken->name, sizeof(ppToken->name), "%d", ppToken->ival);
 1236|      0|        UngetToken(PpAtomConstInt, ppToken);
 1237|      0|        return MacroExpandStarted;
 1238|       |
 1239|      0|    case PpAtomFileMacro: {
  ------------------
  |  Branch (1239:5): [True: 0, False: 4.28M]
  ------------------
 1240|      0|        if (parseContext.getCurrentLoc().name)
  ------------------
  |  Branch (1240:13): [True: 0, False: 0]
  ------------------
 1241|      0|            parseContext.ppRequireExtensions(ppToken->loc, 1, &E_GL_GOOGLE_cpp_style_line_directive, "filename-based __FILE__");
 1242|      0|        ppToken->ival = parseContext.getCurrentLoc().string;
 1243|      0|        snprintf(ppToken->name, sizeof(ppToken->name), "%s", ppToken->loc.getStringNameOrNum().c_str());
 1244|      0|        UngetToken(PpAtomConstInt, ppToken);
 1245|      0|        return MacroExpandStarted;
 1246|      0|    }
 1247|       |
 1248|      0|    case PpAtomVersionMacro:
  ------------------
  |  Branch (1248:5): [True: 0, False: 4.28M]
  ------------------
 1249|      0|        ppToken->ival = parseContext.version;
 1250|      0|        snprintf(ppToken->name, sizeof(ppToken->name), "%d", ppToken->ival);
 1251|      0|        UngetToken(PpAtomConstInt, ppToken);
 1252|      0|        return MacroExpandStarted;
 1253|       |
 1254|  4.28M|    default:
  ------------------
  |  Branch (1254:5): [True: 4.28M, False: 0]
  ------------------
 1255|  4.28M|        break;
 1256|  4.28M|    }
 1257|       |
 1258|  4.28M|    MacroSymbol* macro = macroAtom == 0 ? nullptr : lookupMacroDef(macroAtom);
  ------------------
  |  Branch (1258:26): [True: 4.28M, False: 290]
  ------------------
 1259|       |
 1260|       |    // no recursive expansions
 1261|  4.28M|    if (macro != nullptr && macro->busy) {
  ------------------
  |  Branch (1261:9): [True: 116, False: 4.28M]
  |  Branch (1261:29): [True: 0, False: 116]
  ------------------
 1262|      0|        ppToken->fullyExpanded = true;
 1263|      0|        return MacroExpandNotStarted;
 1264|      0|    }
 1265|       |
 1266|       |    // not expanding undefined macros
 1267|  4.28M|    if ((macro == nullptr || macro->undef) && ! expandUndef)
  ------------------
  |  Branch (1267:10): [True: 4.28M, False: 116]
  |  Branch (1267:30): [True: 0, False: 116]
  |  Branch (1267:47): [True: 4.28M, False: 1]
  ------------------
 1268|  4.28M|        return MacroExpandNotStarted;
 1269|       |
 1270|       |    // 0 is the value of an undefined macro
 1271|    117|    if ((macro == nullptr || macro->undef) && expandUndef) {
  ------------------
  |  Branch (1271:10): [True: 1, False: 116]
  |  Branch (1271:30): [True: 0, False: 116]
  |  Branch (1271:47): [True: 1, False: 0]
  ------------------
 1272|      1|        pushInput(new tZeroInput(this));
 1273|      1|        return MacroExpandUndef;
 1274|      1|    }
 1275|       |
 1276|    116|    tMacroInput *in = new tMacroInput(this);
 1277|       |
 1278|    116|    TSourceLoc loc = ppToken->loc;  // in case we go to the next line before discovering the error
 1279|    116|    in->mac = macro;
 1280|    116|    if (macro->functionLike) {
  ------------------
  |  Branch (1280:9): [True: 102, False: 14]
  ------------------
 1281|       |        // We don't know yet if this will be a successful call of a
 1282|       |        // function-like macro; need to look for a '(', but without trashing
 1283|       |        // the passed in ppToken, until we know we are no longer speculative.
 1284|    102|        TPpToken parenToken;
 1285|    102|        int token = scanToken(&parenToken);
 1286|    102|        if (newLineOkay) {
  ------------------
  |  Branch (1286:13): [True: 102, False: 0]
  ------------------
 1287|    102|            while (token == '\n')
  ------------------
  |  Branch (1287:20): [True: 0, False: 102]
  ------------------
 1288|      0|                token = scanToken(&parenToken);
 1289|    102|        }
 1290|    102|        if (token != '(') {
  ------------------
  |  Branch (1290:13): [True: 2, False: 100]
  ------------------
 1291|       |            // Function-like macro called with object-like syntax: okay, don't expand.
 1292|       |            // (We ate exactly one token that might not be white space; put it back.
 1293|      2|            UngetToken(token, &parenToken);
 1294|      2|            delete in;
 1295|      2|            return MacroExpandNotStarted;
 1296|      2|        }
 1297|    100|        in->args.resize(in->mac->args.size());
 1298|    299|        for (size_t i = 0; i < in->mac->args.size(); i++)
  ------------------
  |  Branch (1298:28): [True: 199, False: 100]
  ------------------
 1299|    199|            in->args[i] = new TokenStream;
 1300|    100|        in->expandedArgs.resize(in->mac->args.size());
 1301|    299|        for (size_t i = 0; i < in->mac->args.size(); i++)
  ------------------
  |  Branch (1301:28): [True: 199, False: 100]
  ------------------
 1302|    199|            in->expandedArgs[i] = nullptr;
 1303|    100|        size_t arg = 0;
 1304|    100|        bool tokenRecorded = false;
 1305|    199|        do {
 1306|    199|            TVector<char> nestStack;
 1307|  2.43k|            while (true) {
  ------------------
  |  Branch (1307:20): [True: 2.43k, Folded]
  ------------------
 1308|  2.43k|                token = scanToken(ppToken);
 1309|  2.43k|                if (token == EndOfInput || token == tMarkerInput::marker) {
  ------------------
  |  Branch (1309:21): [True: 0, False: 2.43k]
  |  Branch (1309:44): [True: 0, False: 2.43k]
  ------------------
 1310|      0|                    parseContext.ppError(loc, "End of input in macro", "macro expansion", atomStrings.getString(macroAtom));
 1311|      0|                    delete in;
 1312|      0|                    return MacroExpandError;
 1313|      0|                }
 1314|  2.43k|                if (token == '\n') {
  ------------------
  |  Branch (1314:21): [True: 0, False: 2.43k]
  ------------------
 1315|      0|                    if (! newLineOkay) {
  ------------------
  |  Branch (1315:25): [True: 0, False: 0]
  ------------------
 1316|      0|                        parseContext.ppError(loc, "End of line in macro substitution:", "macro expansion", atomStrings.getString(macroAtom));
 1317|      0|                        delete in;
 1318|      0|                        return MacroExpandError;
 1319|      0|                    }
 1320|      0|                    continue;
 1321|      0|                }
 1322|  2.43k|                if (token == '#') {
  ------------------
  |  Branch (1322:21): [True: 0, False: 2.43k]
  ------------------
 1323|      0|                    parseContext.ppError(ppToken->loc, "unexpected '#'", "macro expansion", atomStrings.getString(macroAtom));
 1324|      0|                    delete in;
 1325|      0|                    return MacroExpandError;
 1326|      0|                }
 1327|  2.43k|                if (in->mac->args.size() == 0 && token != ')')
  ------------------
  |  Branch (1327:21): [True: 0, False: 2.43k]
  |  Branch (1327:50): [True: 0, False: 0]
  ------------------
 1328|      0|                    break;
 1329|  2.43k|                if (nestStack.size() == 0 && (token == ',' || token == ')'))
  ------------------
  |  Branch (1329:21): [True: 796, False: 1.63k]
  |  Branch (1329:47): [True: 190, False: 606]
  |  Branch (1329:63): [True: 9, False: 597]
  ------------------
 1330|    199|                    break;
 1331|  2.23k|                if (token == '(')
  ------------------
  |  Branch (1331:21): [True: 273, False: 1.96k]
  ------------------
 1332|    273|                    nestStack.push_back(')');
 1333|  1.96k|                else if (token == '{' && parseContext.isReadingHLSL())
  ------------------
  |  Branch (1333:26): [True: 532, False: 1.43k]
  |  Branch (1333:42): [True: 0, False: 532]
  ------------------
 1334|      0|                    nestStack.push_back('}');
 1335|  1.96k|                else if (nestStack.size() > 0 && token == nestStack.back())
  ------------------
  |  Branch (1335:26): [True: 1.45k, False: 506]
  |  Branch (1335:50): [True: 273, False: 1.18k]
  ------------------
 1336|    273|                    nestStack.pop_back();
 1337|       |
 1338|       |                //Macro replacement list is expanded in the last stage.
 1339|  2.23k|                if (atomStrings.getAtom(ppToken->name) == PpAtomLineMacro)
  ------------------
  |  Branch (1339:21): [True: 0, False: 2.23k]
  ------------------
 1340|      0|                    ppToken->ival = parseContext.getCurrentLoc().line;
 1341|       |
 1342|  2.23k|                in->args[arg]->putToken(token, ppToken);
 1343|  2.23k|                tokenRecorded = true;
 1344|  2.23k|            }
 1345|       |            // end of single argument scan
 1346|       |
 1347|    199|            if (token == ')') {
  ------------------
  |  Branch (1347:17): [True: 9, False: 190]
  ------------------
 1348|       |                // closing paren of call
 1349|      9|                if (in->mac->args.size() == 1 && !tokenRecorded)
  ------------------
  |  Branch (1349:21): [True: 1, False: 8]
  |  Branch (1349:50): [True: 0, False: 1]
  ------------------
 1350|      0|                    break;
 1351|      9|                arg++;
 1352|      9|                break;
 1353|      9|            }
 1354|    190|            arg++;
 1355|    190|        } while (arg < in->mac->args.size());
  ------------------
  |  Branch (1355:18): [True: 99, False: 91]
  ------------------
 1356|       |        // end of all arguments scan
 1357|       |
 1358|    100|        if (arg < in->mac->args.size())
  ------------------
  |  Branch (1358:13): [True: 0, False: 100]
  ------------------
 1359|      0|            parseContext.ppError(loc, "Too few args in Macro", "macro expansion", atomStrings.getString(macroAtom));
 1360|    100|        else if (token != ')') {
  ------------------
  |  Branch (1360:18): [True: 91, False: 9]
  ------------------
 1361|       |            // Error recover code; find end of call, if possible
 1362|     91|            int depth = 0;
 1363|  1.66k|            while (token != EndOfInput && (depth > 0 || token != ')')) {
  ------------------
  |  Branch (1363:20): [True: 1.66k, False: 0]
  |  Branch (1363:44): [True: 107, False: 1.55k]
  |  Branch (1363:57): [True: 1.46k, False: 91]
  ------------------
 1364|  1.57k|                if (token == ')' || token == '}')
  ------------------
  |  Branch (1364:21): [True: 4, False: 1.57k]
  |  Branch (1364:37): [True: 195, False: 1.37k]
  ------------------
 1365|    199|                    depth--;
 1366|  1.57k|                token = scanToken(ppToken);
 1367|  1.57k|                if (token == '(' || token == '{')
  ------------------
  |  Branch (1367:21): [True: 13, False: 1.56k]
  |  Branch (1367:37): [True: 22, False: 1.53k]
  ------------------
 1368|     35|                    depth++;
 1369|  1.57k|            }
 1370|       |
 1371|     91|            if (token == EndOfInput) {
  ------------------
  |  Branch (1371:17): [True: 0, False: 91]
  ------------------
 1372|      0|                parseContext.ppError(loc, "End of input in macro", "macro expansion", atomStrings.getString(macroAtom));
 1373|      0|                delete in;
 1374|      0|                return MacroExpandError;
 1375|      0|            }
 1376|     91|            parseContext.ppError(loc, "Too many args in macro", "macro expansion", atomStrings.getString(macroAtom));
 1377|     91|        }
 1378|       |
 1379|       |        // We need both expanded and non-expanded forms of the argument, for whether or
 1380|       |        // not token pasting will be applied later when the argument is consumed next to ##.
 1381|    299|        for (size_t i = 0; i < in->mac->args.size(); i++)
  ------------------
  |  Branch (1381:28): [True: 199, False: 100]
  ------------------
 1382|    199|            in->expandedArgs[i] = PrescanMacroArg(*in->args[i], ppToken, newLineOkay);
 1383|    100|    }
 1384|       |
 1385|    114|    pushInput(in);
 1386|    114|    macro->busy = 1;
 1387|    114|    macro->body.reset();
 1388|       |
 1389|    114|    return MacroExpandStarted;
 1390|    116|}
Pp.cpp:_ZN7glslang12_GLOBAL__N_16op_negEi:
  423|      6|    int op_neg(int a) { return a == INT_MIN ? INT_MIN : -a; }
  ------------------
  |  Branch (423:32): [True: 0, False: 6]
  ------------------
Pp.cpp:_ZN7glslang12_GLOBAL__N_15op_eqEii:
  409|      1|    int op_eq(int a, int b) { return a == b; }

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

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

_ZN7glslang8TPpTokenC2Ev:
   93|  38.1M|    TPpToken() { clear(); }
_ZN7glslang8TPpToken5clearEv:
   95|  82.7M|    {
   96|  82.7M|        space = false;
   97|  82.7M|        i64val = 0;
   98|  82.7M|        loc.init();
   99|  82.7M|        name[0] = 0;
  100|  82.7M|        fullyExpanded = false;
  101|  82.7M|    }
_ZNK7glslang8TPpTokeneqERKS0_:
  105|     87|    {
  106|     87|        return space == right.space &&
  ------------------
  |  Branch (106:16): [True: 87, False: 0]
  ------------------
  107|     87|               ival == right.ival && dval == right.dval && i64val == right.i64val &&
  ------------------
  |  Branch (107:16): [True: 87, False: 0]
  |  Branch (107:38): [True: 79, False: 8]
  |  Branch (107:60): [True: 79, False: 0]
  ------------------
  108|     79|               strncmp(name, right.name, MaxTokenLength) == 0;
  ------------------
  |  Branch (108:16): [True: 77, False: 2]
  ------------------
  109|     87|    }
_ZNK7glslang8TPpTokenneERKS0_:
  110|     87|    bool operator!=(const TPpToken& right) const { return ! operator==(right); }
_ZNK7glslang14TStringAtomMap7getAtomEPKc:
  141|  4.35M|    {
  142|  4.35M|        auto it = atomMap.find(s);
  143|  4.35M|        return it == atomMap.end() ? 0 : it->second;
  ------------------
  |  Branch (143:16): [True: 4.32M, False: 34.8k]
  ------------------
  144|  4.35M|    }
_ZN7glslang14TStringAtomMap10getAddAtomEPKc:
  148|  34.1k|    {
  149|  34.1k|        int atom = getAtom(s);
  150|  34.1k|        if (atom == 0) {
  ------------------
  |  Branch (150:13): [True: 34.0k, False: 61]
  ------------------
  151|  34.0k|            atom = nextAtom++;
  152|  34.0k|            addAtomFixed(s, atom);
  153|  34.0k|        }
  154|  34.1k|        return atom;
  155|  34.1k|    }
_ZNK7glslang14TStringAtomMap9getStringEi:
  158|  25.1M|    const char* getString(int atom) const { return stringMap[atom]->c_str(); }
_ZN7glslang14TStringAtomMap12addAtomFixedEPKci:
  176|   142k|    {
  177|   142k|        auto it = atomMap.insert(std::pair<TString, int>(s, atom)).first;
  178|   142k|        if (stringMap.size() < (size_t)atom + 1)
  ------------------
  |  Branch (178:13): [True: 2.02k, False: 140k]
  ------------------
  179|  2.02k|            stringMap.resize(atom + 100, &badToken);
  180|   142k|        stringMap[atom] = &it->first;
  181|   142k|    }
_ZN7glslang10TPpContext6tInputC2EPS0_:
  208|  1.40k|        tInput(TPpContext* p) : done(false), pp(p) { }
_ZN7glslang10TPpContext6tInputD2Ev:
  209|  1.40k|        virtual ~tInput() { }
_ZN7glslang10TPpContext6tInput11peekPastingEv:
  214|  43.7M|        virtual bool peekPasting() { return false; }             // true when about to see ##
_ZN7glslang10TPpContext6tInput13isStringInputEv:
  218|  3.69k|        virtual bool isStringInput() { return false; }
_ZN7glslang10TPpContext6tInput15notifyActivatedEv:
  221|  1.40k|        virtual void notifyActivated() {}
_ZN7glslang10TPpContext6tInput13notifyDeletedEv:
  223|  1.40k|        virtual void notifyDeleted() {}
_ZN7glslang10TPpContext9pushInputEPNS0_6tInputE:
  232|  1.40k|    {
  233|  1.40k|        inputStack.push_back(in);
  234|  1.40k|        in->notifyActivated();
  235|  1.40k|    }
_ZN7glslang10TPpContext8popInputEv:
  237|  1.40k|    {
  238|  1.40k|        inputStack.back()->notifyDeleted();
  239|  1.40k|        delete inputStack.back();
  240|  1.40k|        inputStack.pop_back();
  241|  1.40k|    }
_ZN7glslang10TPpContext11TokenStream5TokenC2EiRKNS_8TPpTokenE:
  255|  38.6k|                atom(atom),
  256|  38.6k|                space(ppToken.space),
  257|  38.6k|                i64val(ppToken.i64val),
  258|  38.6k|                name(ppToken.name) { }
_ZN7glslang10TPpContext11TokenStream5Token3getERNS_8TPpTokenE:
  260|  3.63k|            {
  261|  3.63k|                ppToken.clear();
  262|  3.63k|                ppToken.space = space;
  263|  3.63k|                ppToken.i64val = i64val;
  264|  3.63k|                snprintf(ppToken.name, sizeof(ppToken.name), "%s", name.c_str());
  265|  3.63k|                return atom;
  266|  3.63k|            }
_ZNK7glslang10TPpContext11TokenStream5Token6isAtomEi:
  267|  6.25k|            bool isAtom(int a) const { return atom == a; }
_ZN7glslang10TPpContext11TokenStreamC2Ev:
  278|  68.5k|        TokenStream() : currentPos(0) { }
_ZN7glslang10TPpContext11TokenStream9peekTokenEi:
  281|  7.21k|        bool peekToken(int atom) { return !atEnd() && stream[currentPos].isAtom(atom); }
  ------------------
  |  Branch (281:43): [True: 6.25k, False: 962]
  |  Branch (281:55): [True: 0, False: 6.25k]
  ------------------
_ZN7glslang10TPpContext11TokenStream5atEndEv:
  312|  14.8k|        bool atEnd() { return currentPos >= stream.size(); }
_ZN7glslang10TPpContext11TokenStream5resetEv:
  314|    465|        void reset() { currentPos = 0; }
_ZN7glslang10TPpContext11MacroSymbolC2Ev:
  326|  68.1k|        MacroSymbol() : functionLike(0), busy(0), undef(0) { }
_ZN7glslang10TPpContext14lookupMacroDefEi:
  337|  34.4k|    {
  338|  34.4k|        auto existingMacroIt = macroDefs.find(atom);
  339|  34.4k|        return (existingMacroIt == macroDefs.end()) ? nullptr : &(existingMacroIt->second);
  ------------------
  |  Branch (339:16): [True: 34.2k, False: 141]
  ------------------
  340|  34.4k|    }
_ZN7glslang10TPpContext11addMacroDefEiRNS0_11MacroSymbolE:
  341|  34.0k|    void addMacroDef(int atom, MacroSymbol& macroDef) { macroDefs[atom] = macroDef; }
_ZN7glslang10TPpContext9scanTokenEPNS_8TPpTokenE:
  364|  44.5M|    {
  365|  44.5M|        int token = EndOfInput;
  366|       |
  367|  44.5M|        while (! inputStack.empty()) {
  ------------------
  |  Branch (367:16): [True: 44.5M, False: 737]
  ------------------
  368|  44.5M|            token = inputStack.back()->scan(ppToken);
  369|  44.5M|            if (token != EndOfInput || inputStack.empty())
  ------------------
  |  Branch (369:17): [True: 44.5M, False: 1.34k]
  |  Branch (369:40): [True: 0, False: 1.34k]
  ------------------
  370|  44.5M|                break;
  371|  1.34k|            popInput();
  372|  1.34k|        }
  373|  44.5M|        if (!inputStack.empty() && inputStack.back()->isStringInput() && !inElseSkip) {
  ------------------
  |  Branch (373:13): [True: 44.5M, False: 737]
  |  Branch (373:36): [True: 44.5M, False: 3.69k]
  |  Branch (373:74): [True: 44.5M, False: 22.1k]
  ------------------
  374|  44.5M|            if (token == '\n') {
  ------------------
  |  Branch (374:17): [True: 13.4M, False: 31.1M]
  ------------------
  375|  13.4M|                lastLineTokens.clear();
  376|  13.4M|                lastLineTokenLocs.clear();
  377|  31.1M|            } else {
  378|  31.1M|                lastLineTokens.push_back(token);
  379|  31.1M|                lastLineTokenLocs.push_back(ppToken->loc);
  380|  31.1M|            }
  381|  44.5M|        }
  382|  44.5M|        return token;
  383|  44.5M|    }
_ZN7glslang10TPpContext7getCharEv:
  384|  1.96M|    int  getChar() { return inputStack.back()->getch(); }
_ZN7glslang10TPpContext9ungetCharEv:
  385|  37.0k|    void ungetChar() { inputStack.back()->ungetch(); }
_ZN7glslang10TPpContext11peekPastingEv:
  386|  43.7M|    bool peekPasting() { return !inputStack.empty() && inputStack.back()->peekPasting(); }
  ------------------
  |  Branch (386:33): [True: 43.7M, False: 727]
  |  Branch (386:56): [True: 0, False: 43.7M]
  ------------------
_ZN7glslang10TPpContext11tMacroInputC2EPS0_:
  402|    116|        tMacroInput(TPpContext* pp) : tInput(pp), prepaste(false), postpaste(false) { }
_ZN7glslang10TPpContext11tMacroInputD2Ev:
  404|    116|        {
  405|    315|            for (size_t i = 0; i < args.size(); ++i)
  ------------------
  |  Branch (405:32): [True: 199, False: 116]
  ------------------
  406|    199|                delete args[i];
  407|    315|            for (size_t i = 0; i < expandedArgs.size(); ++i)
  ------------------
  |  Branch (407:32): [True: 199, False: 116]
  ------------------
  408|    199|                delete expandedArgs[i];
  409|    116|        }
_ZN7glslang10TPpContext11tMacroInput11peekPastingEv:
  414|    130|        bool peekPasting() override { return prepaste; }
_ZN7glslang10TPpContext12tMarkerInputC2EPS0_:
  430|    199|        tMarkerInput(TPpContext* pp) : tInput(pp) { }
_ZN7glslang10TPpContext12tMarkerInput4scanEPNS_8TPpTokenE:
  432|    398|        {
  433|    398|            if (done)
  ------------------
  |  Branch (433:17): [True: 199, False: 199]
  ------------------
  434|    199|                return EndOfInput;
  435|    199|            done = true;
  436|       |
  437|    199|            return marker;
  438|    398|        }
_ZN7glslang10TPpContext10tZeroInputC2EPS0_:
  478|      1|        tZeroInput(TPpContext* pp) : tInput(pp) { }
_ZN7glslang10TPpContext11tTokenInputC2EPS0_PNS0_11TokenStreamEbb:
  523|    301|            tInput(pp),
  524|    301|            tokens(t),
  525|    301|            lastTokenPastes(prepasting),
  526|    301|            preExpanded(expanded) { }
_ZN7glslang10TPpContext11tTokenInput4scanEPNS_8TPpTokenE:
  527|  3.56k|        virtual int scan(TPpToken *ppToken) override {
  528|  3.56k|            int token = tokens->getToken(pp->parseContext, ppToken);
  529|  3.56k|            ppToken->fullyExpanded = preExpanded;
  530|  3.56k|            if (tokens->atEnd() && token == PpAtomIdentifier) {
  ------------------
  |  Branch (530:17): [True: 602, False: 2.96k]
  |  Branch (530:36): [True: 34, False: 568]
  ------------------
  531|     34|                int macroAtom = pp->atomStrings.getAtom(ppToken->name);
  532|     34|                MacroSymbol* macro = macroAtom == 0 ? nullptr : pp->lookupMacroDef(macroAtom);
  ------------------
  |  Branch (532:38): [True: 2, False: 32]
  ------------------
  533|     34|                if (macro && macro->functionLike)
  ------------------
  |  Branch (533:21): [True: 0, False: 34]
  |  Branch (533:30): [True: 0, False: 0]
  ------------------
  534|      0|                    ppToken->fullyExpanded = false;
  535|     34|            }
  536|  3.56k|            return token;
  537|  3.56k|        }
_ZN7glslang10TPpContext11tTokenInput11peekPastingEv:
  540|  3.26k|        virtual bool peekPasting() override { return tokens->peekTokenizedPasting(lastTokenPastes); }
_ZN7glslang10TPpContext16tUngotTokenInputC2EPS0_iPNS_8TPpTokenE:
  550|      2|        tUngotTokenInput(TPpContext* pp, int t, TPpToken* p) : tInput(pp), token(t), lval(*p) { }
_ZN7glslang10TPpContext12tStringInputC2EPS0_RNS_13TInputScannerE:
  564|    790|        tStringInput(TPpContext* pp, TInputScanner& i) : tInput(pp), input(&i) { }
_ZN7glslang10TPpContext12tStringInput13isStringInputEv:
  566|  44.5M|        bool isStringInput() override { return true; }
_ZN7glslang10TPpContext12tStringInput5getchEv:
  571|  92.4M|        {
  572|  92.4M|            int ch = input->get();
  573|       |
  574|  92.4M|            if (ch == '\\') {
  ------------------
  |  Branch (574:17): [True: 2.59k, False: 92.4M]
  ------------------
  575|       |                // Move past escaped newlines, as many as sequentially exist
  576|  2.59k|                do {
  577|  2.59k|                    if (input->peek() == '\r' || input->peek() == '\n') {
  ------------------
  |  Branch (577:25): [True: 0, False: 2.59k]
  |  Branch (577:50): [True: 0, False: 2.59k]
  ------------------
  578|      0|                        bool allowed = pp->parseContext.lineContinuationCheck(input->getSourceLoc(), pp->inComment);
  579|      0|                        if (! allowed && pp->inComment)
  ------------------
  |  Branch (579:29): [True: 0, False: 0]
  |  Branch (579:42): [True: 0, False: 0]
  ------------------
  580|      0|                            return '\\';
  581|       |
  582|       |                        // escape one newline now
  583|      0|                        ch = input->get();
  584|      0|                        int nextch = input->get();
  585|      0|                        if (ch == '\r' && nextch == '\n')
  ------------------
  |  Branch (585:29): [True: 0, False: 0]
  |  Branch (585:43): [True: 0, False: 0]
  ------------------
  586|      0|                            ch = input->get();
  587|      0|                        else
  588|      0|                            ch = nextch;
  589|      0|                    } else
  590|  2.59k|                        return '\\';
  591|  2.59k|                } while (ch == '\\');
  ------------------
  |  Branch (591:26): [True: 0, False: 0]
  ------------------
  592|  2.59k|            }
  593|       |
  594|       |            // handle any non-escaped newline
  595|  92.4M|            if (ch == '\r' || ch == '\n') {
  ------------------
  |  Branch (595:17): [True: 7.38M, False: 85.0M]
  |  Branch (595:31): [True: 7.55M, False: 77.4M]
  ------------------
  596|  14.9M|                if (ch == '\r' && input->peek() == '\n')
  ------------------
  |  Branch (596:21): [True: 7.38M, False: 7.55M]
  |  Branch (596:35): [True: 41.1k, False: 7.34M]
  ------------------
  597|  41.1k|                    input->get();
  598|  14.9M|                return '\n';
  599|  14.9M|            }
  600|       |
  601|  77.4M|            return ch;
  602|  92.4M|        }
_ZN7glslang10TPpContext12tStringInput7ungetchEv:
  609|  7.68M|        {
  610|  7.68M|            input->unget();
  611|       |
  612|  7.68M|            do {
  613|  7.68M|                int ch = input->peek();
  614|  7.68M|                if (ch == '\r' || ch == '\n') {
  ------------------
  |  Branch (614:21): [True: 39.4k, False: 7.64M]
  |  Branch (614:35): [True: 1.44M, False: 6.20M]
  ------------------
  615|  1.48M|                    if (ch == '\n') {
  ------------------
  |  Branch (615:25): [True: 1.44M, False: 39.4k]
  ------------------
  616|       |                        // correct for two-character newline
  617|  1.44M|                        input->unget();
  618|  1.44M|                        if (input->peek() != '\r')
  ------------------
  |  Branch (618:29): [True: 1.43M, False: 5.39k]
  ------------------
  619|  1.43M|                            input->get();
  620|  1.44M|                    }
  621|       |                    // now in front of a complete newline, move past an escape character
  622|  1.48M|                    input->unget();
  623|  1.48M|                    if (input->peek() == '\\')
  ------------------
  |  Branch (623:25): [True: 0, False: 1.48M]
  ------------------
  624|      0|                        input->unget();
  625|  1.48M|                    else {
  626|  1.48M|                        input->get();
  627|  1.48M|                        break;
  628|  1.48M|                    }
  629|  1.48M|                } else
  630|  6.20M|                    break;
  631|  7.68M|            } while (true);
  ------------------
  |  Branch (631:22): [True: 0, Folded]
  ------------------
  632|  7.68M|        }

_ZN7glslang10TPpContext11lFloatConstEiiPNS_8TPpTokenE:
  113|  36.8k|{
  114|  36.8k|    const auto saveName = [&](int ch) {
  115|  36.8k|        if (len <= MaxTokenLength)
  116|  36.8k|            ppToken->name[len++] = static_cast<char>(ch);
  117|  36.8k|    };
  118|       |
  119|       |    // find the range of non-zero digits before the decimal point
  120|  36.8k|    int startNonZero = 0;
  121|  53.6k|    while (startNonZero < len && ppToken->name[startNonZero] == '0')
  ------------------
  |  Branch (121:12): [True: 42.7k, False: 10.8k]
  |  Branch (121:34): [True: 16.8k, False: 25.9k]
  ------------------
  122|  16.8k|        ++startNonZero;
  123|  36.8k|    int endNonZero = len;
  124|  43.2k|    while (endNonZero > startNonZero && ppToken->name[endNonZero-1] == '0')
  ------------------
  |  Branch (124:12): [True: 32.4k, False: 10.8k]
  |  Branch (124:41): [True: 6.48k, False: 25.9k]
  ------------------
  125|  6.48k|        --endNonZero;
  126|  36.8k|    int numWholeNumberDigits = endNonZero - startNonZero;
  127|       |
  128|       |    // accumulate the range's value
  129|  36.8k|    bool fastPath = numWholeNumberDigits <= 15;  // when the number gets too complex, set to false
  130|  36.8k|    unsigned long long wholeNumber = 0;
  131|  36.8k|    if (fastPath) {
  ------------------
  |  Branch (131:9): [True: 35.9k, False: 890]
  ------------------
  132|   110k|        for (int i = startNonZero; i < endNonZero; ++i)
  ------------------
  |  Branch (132:36): [True: 74.3k, False: 35.9k]
  ------------------
  133|  74.3k|            wholeNumber = wholeNumber * 10 + (ppToken->name[i] - '0');
  134|  35.9k|    }
  135|  36.8k|    int decimalShift = len - endNonZero;
  136|       |
  137|       |    // Decimal point:
  138|  36.8k|    bool hasDecimalOrExponent = false;
  139|  36.8k|    if (ch == '.') {
  ------------------
  |  Branch (139:9): [True: 15.9k, False: 20.8k]
  ------------------
  140|  15.9k|        hasDecimalOrExponent = true;
  141|  15.9k|        saveName(ch);
  142|  15.9k|        ch = getChar();
  143|  15.9k|        int firstDecimal = len;
  144|       |
  145|  15.9k|#ifdef ENABLE_HLSL
  146|       |        // 1.#INF or -1.#INF
  147|  15.9k|        if (ch == '#' && (ifdepth > 0 || parseContext.intermediate.getSource() == EShSourceHlsl)) {
  ------------------
  |  Branch (147:13): [True: 0, False: 15.9k]
  |  Branch (147:27): [True: 0, False: 0]
  |  Branch (147:42): [True: 0, False: 0]
  ------------------
  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|  15.9k|#endif
  174|       |
  175|       |        // Consume leading-zero digits after the decimal point
  176|   179k|        while (ch == '0') {
  ------------------
  |  Branch (176:16): [True: 163k, False: 15.9k]
  ------------------
  177|   163k|            saveName(ch);
  178|   163k|            ch = getChar();
  179|   163k|        }
  180|  15.9k|        int startNonZeroDecimal = len;
  181|  15.9k|        int endNonZeroDecimal = len;
  182|       |
  183|       |        // Consume remaining digits, up to the exponent
  184|   291k|        while (ch >= '0' && ch <= '9') {
  ------------------
  |  Branch (184:16): [True: 283k, False: 8.02k]
  |  Branch (184:29): [True: 275k, False: 7.94k]
  ------------------
  185|   275k|            saveName(ch);
  186|   275k|            if (ch != '0')
  ------------------
  |  Branch (186:17): [True: 71.9k, False: 203k]
  ------------------
  187|  71.9k|                endNonZeroDecimal = len;
  188|   275k|            ch = getChar();
  189|   275k|        }
  190|       |
  191|       |        // Compute accumulation up to the last non-zero digit
  192|  15.9k|        if (endNonZeroDecimal > startNonZeroDecimal) {
  ------------------
  |  Branch (192:13): [True: 12.9k, False: 3.04k]
  ------------------
  193|  12.9k|            numWholeNumberDigits += endNonZeroDecimal - endNonZero - 1; // don't include the "."
  194|  12.9k|            if (numWholeNumberDigits > 15)
  ------------------
  |  Branch (194:17): [True: 2.99k, False: 9.93k]
  ------------------
  195|  2.99k|                fastPath = false;
  196|  12.9k|            if (fastPath) {
  ------------------
  |  Branch (196:17): [True: 9.93k, False: 2.99k]
  ------------------
  197|  58.0k|                for (int i = endNonZero; i < endNonZeroDecimal; ++i) {
  ------------------
  |  Branch (197:42): [True: 48.1k, False: 9.93k]
  ------------------
  198|  48.1k|                    if (ppToken->name[i] != '.')
  ------------------
  |  Branch (198:25): [True: 38.1k, False: 9.93k]
  ------------------
  199|  38.1k|                        wholeNumber = wholeNumber * 10 + (ppToken->name[i] - '0');
  200|  48.1k|                }
  201|  9.93k|            }
  202|  12.9k|            decimalShift = firstDecimal - endNonZeroDecimal;
  203|  12.9k|        }
  204|  15.9k|    }
  205|       |
  206|       |    // Exponent:
  207|  36.8k|    bool negativeExponent = false;
  208|  36.8k|    double exponentValue = 0.0;
  209|  36.8k|    int exponent = 0;
  210|  36.8k|    {
  211|  36.8k|        if (ch == 'e' || ch == 'E') {
  ------------------
  |  Branch (211:13): [True: 1.83k, False: 34.9k]
  |  Branch (211:26): [True: 18.4k, False: 16.5k]
  ------------------
  212|  20.2k|            hasDecimalOrExponent = true;
  213|  20.2k|            saveName(ch);
  214|  20.2k|            ch = getChar();
  215|  20.2k|            if (ch == '+' || ch == '-') {
  ------------------
  |  Branch (215:17): [True: 215, False: 20.0k]
  |  Branch (215:30): [True: 173, False: 19.8k]
  ------------------
  216|    388|                negativeExponent = ch == '-';
  217|    388|                saveName(ch);
  218|    388|                ch = getChar();
  219|    388|            }
  220|  20.2k|            if (ch >= '0' && ch <= '9') {
  ------------------
  |  Branch (220:17): [True: 6.95k, False: 13.3k]
  |  Branch (220:30): [True: 2.19k, False: 4.76k]
  ------------------
  221|  1.00M|                while (ch >= '0' && ch <= '9') {
  ------------------
  |  Branch (221:24): [True: 1.00M, False: 1.24k]
  |  Branch (221:37): [True: 1.00M, False: 950]
  ------------------
  222|  1.00M|                    if (exponent < 500) {
  ------------------
  |  Branch (222:25): [True: 84.2k, False: 918k]
  ------------------
  223|  84.2k|                        exponent = exponent * 10 + (ch - '0');
  224|  84.2k|                    }
  225|  1.00M|                    saveName(ch);
  226|  1.00M|                    ch = getChar();
  227|  1.00M|                }
  228|  18.0k|            } else {
  229|  18.0k|                parseContext.ppError(ppToken->loc, "bad character in float exponent", "", "");
  230|  18.0k|            }
  231|  20.2k|        }
  232|       |
  233|       |        // Compensate for location of decimal
  234|  36.8k|        if (negativeExponent)
  ------------------
  |  Branch (234:13): [True: 173, False: 36.6k]
  ------------------
  235|    173|            exponent -= decimalShift;
  236|  36.6k|        else {
  237|  36.6k|            exponent += decimalShift;
  238|  36.6k|            if (exponent < 0) {
  ------------------
  |  Branch (238:17): [True: 12.3k, False: 24.2k]
  ------------------
  239|  12.3k|                negativeExponent = true;
  240|  12.3k|                exponent = -exponent;
  241|  12.3k|            }
  242|  36.6k|        }
  243|  36.8k|        if (exponent > 22)
  ------------------
  |  Branch (243:13): [True: 1.67k, False: 35.1k]
  ------------------
  244|  1.67k|            fastPath = false;
  245|       |
  246|  36.8k|        if (fastPath) {
  ------------------
  |  Branch (246:13): [True: 32.0k, False: 4.76k]
  ------------------
  247|       |            // Compute the floating-point value of the exponent
  248|  32.0k|            exponentValue = 1.0;
  249|  32.0k|            if (exponent > 0) {
  ------------------
  |  Branch (249:17): [True: 13.5k, False: 18.4k]
  ------------------
  250|  13.5k|                double expFactor = 10;
  251|  40.2k|                while (exponent > 0) {
  ------------------
  |  Branch (251:24): [True: 26.7k, False: 13.5k]
  ------------------
  252|  26.7k|                    if (exponent & 0x1)
  ------------------
  |  Branch (252:25): [True: 18.1k, False: 8.56k]
  ------------------
  253|  18.1k|                        exponentValue *= expFactor;
  254|  26.7k|                    expFactor *= expFactor;
  255|  26.7k|                    exponent >>= 1;
  256|  26.7k|                }
  257|  13.5k|            }
  258|  32.0k|        }
  259|  36.8k|    }
  260|       |
  261|       |    // Suffix:
  262|  36.8k|    bool isDouble = false;
  263|  36.8k|    bool isFloat16 = false;
  264|  36.8k|    if (ch == 'l' || ch == 'L') {
  ------------------
  |  Branch (264:9): [True: 1, False: 36.8k]
  |  Branch (264:22): [True: 7, False: 36.8k]
  ------------------
  265|      8|        if (ifdepth == 0 && parseContext.intermediate.getSource() == EShSourceGlsl)
  ------------------
  |  Branch (265:13): [True: 8, False: 0]
  |  Branch (265:29): [True: 2, False: 6]
  ------------------
  266|      2|            parseContext.doubleCheck(ppToken->loc, "double floating-point suffix");
  267|      8|        if (ifdepth == 0 && !hasDecimalOrExponent)
  ------------------
  |  Branch (267:13): [True: 8, False: 0]
  |  Branch (267:29): [True: 0, False: 8]
  ------------------
  268|      0|            parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
  269|      8|        if (parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (269:13): [True: 2, False: 6]
  ------------------
  270|      2|            int ch2 = getChar();
  271|      2|            if (ch2 != 'f' && ch2 != 'F') {
  ------------------
  |  Branch (271:17): [True: 2, False: 0]
  |  Branch (271:31): [True: 2, False: 0]
  ------------------
  272|      2|                ungetChar();
  273|      2|                ungetChar();
  274|      2|            } else {
  275|      0|                saveName(ch);
  276|      0|                saveName(ch2);
  277|      0|                isDouble = true;
  278|      0|            }
  279|      6|        } else if (parseContext.intermediate.getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (279:20): [True: 6, False: 0]
  ------------------
  280|      6|            saveName(ch);
  281|      6|            isDouble = true;
  282|      6|        }
  283|  36.8k|    } else if (ch == 'h' || ch == 'H') {
  ------------------
  |  Branch (283:16): [True: 1.25k, False: 35.5k]
  |  Branch (283:29): [True: 224, False: 35.3k]
  ------------------
  284|  1.48k|        if (ifdepth == 0 && parseContext.intermediate.getSource() == EShSourceGlsl)
  ------------------
  |  Branch (284:13): [True: 1.48k, False: 0]
  |  Branch (284:29): [True: 1.25k, False: 224]
  ------------------
  285|  1.25k|            parseContext.float16Check(ppToken->loc, "half floating-point suffix");
  286|  1.48k|        if (ifdepth == 0 && !hasDecimalOrExponent)
  ------------------
  |  Branch (286:13): [True: 1.48k, False: 0]
  |  Branch (286:29): [True: 1.48k, False: 0]
  ------------------
  287|  1.48k|            parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
  288|  1.48k|        if (parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (288:13): [True: 1.25k, False: 224]
  ------------------
  289|  1.25k|            int ch2 = getChar();
  290|  1.25k|            if (ch2 != 'f' && ch2 != 'F') {
  ------------------
  |  Branch (290:17): [True: 1.25k, False: 0]
  |  Branch (290:31): [True: 1.25k, False: 0]
  ------------------
  291|  1.25k|                ungetChar();
  292|  1.25k|                ungetChar();
  293|  1.25k|            } else {
  294|      0|                saveName(ch);
  295|      0|                saveName(ch2);
  296|      0|                isFloat16 = true;
  297|      0|            }
  298|  1.25k|        } else if (parseContext.intermediate.getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (298:20): [True: 224, False: 0]
  ------------------
  299|    224|            saveName(ch);
  300|    224|            isFloat16 = true;
  301|    224|        }
  302|  1.48k|    } else
  303|  35.3k|    if (ch == 'f' || ch == 'F') {
  ------------------
  |  Branch (303:9): [True: 263, False: 35.0k]
  |  Branch (303:22): [True: 560, False: 34.5k]
  ------------------
  304|    823|        if (ifdepth == 0)
  ------------------
  |  Branch (304:13): [True: 823, False: 0]
  ------------------
  305|    823|            parseContext.profileRequires(ppToken->loc,  EEsProfile, 300, nullptr, "floating-point suffix");
  306|    823|        if (ifdepth == 0 && !parseContext.relaxedErrors())
  ------------------
  |  Branch (306:13): [True: 823, False: 0]
  |  Branch (306:29): [True: 823, False: 0]
  ------------------
  307|    823|            parseContext.profileRequires(ppToken->loc, ~EEsProfile, 120, nullptr, "floating-point suffix");
  308|    823|        if (ifdepth == 0 && !hasDecimalOrExponent)
  ------------------
  |  Branch (308:13): [True: 823, False: 0]
  |  Branch (308:29): [True: 768, False: 55]
  ------------------
  309|    768|            parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", "");
  310|    823|        saveName(ch);
  311|    823|    } else
  312|  34.5k|        ungetChar();
  313|       |
  314|       |    // Patch up the name and length for overflow
  315|       |
  316|  36.8k|    if (len > MaxTokenLength) {
  ------------------
  |  Branch (316:9): [True: 21, False: 36.7k]
  ------------------
  317|     21|        len = MaxTokenLength;
  318|     21|        parseContext.ppError(ppToken->loc, "float literal too long", "", "");
  319|     21|    }
  320|  36.8k|    ppToken->name[len] = '\0';
  321|       |
  322|       |    // Compute the numerical value
  323|  36.8k|    if (fastPath) {
  ------------------
  |  Branch (323:9): [True: 32.0k, False: 4.76k]
  ------------------
  324|       |        // compute the floating-point value of the exponent
  325|  32.0k|        if (exponentValue == 0.0)
  ------------------
  |  Branch (325:13): [True: 0, False: 32.0k]
  ------------------
  326|      0|            ppToken->dval = (double)wholeNumber;
  327|  32.0k|        else if (negativeExponent)
  ------------------
  |  Branch (327:18): [True: 9.48k, False: 22.5k]
  ------------------
  328|  9.48k|            ppToken->dval = (double)wholeNumber / exponentValue;
  329|  22.5k|        else
  330|  22.5k|            ppToken->dval = (double)wholeNumber * exponentValue;
  331|  32.0k|    } else {
  332|       |        // slow path
  333|  4.76k|        ppToken->dval = 0.0;
  334|       |
  335|       |        // remove suffix
  336|  4.76k|        TString numstr(ppToken->name);
  337|  4.76k|        if (numstr.back() == 'f' || numstr.back() == 'F')
  ------------------
  |  Branch (337:13): [True: 91, False: 4.67k]
  |  Branch (337:37): [True: 339, False: 4.33k]
  ------------------
  338|    430|            numstr.pop_back();
  339|  4.76k|        if (numstr.back() == 'h' || numstr.back() == 'H')
  ------------------
  |  Branch (339:13): [True: 0, False: 4.76k]
  |  Branch (339:37): [True: 0, False: 4.76k]
  ------------------
  340|      0|            numstr.pop_back();
  341|  4.76k|        if (numstr.back() == 'l' || numstr.back() == 'L')
  ------------------
  |  Branch (341:13): [True: 0, False: 4.76k]
  |  Branch (341:37): [True: 0, False: 4.76k]
  ------------------
  342|      0|            numstr.pop_back();
  343|       |
  344|       |        // use platform library
  345|  4.76k|        strtodStream.clear();
  346|  4.76k|        strtodStream.str(numstr.c_str());
  347|  4.76k|        strtodStream >> ppToken->dval;
  348|  4.76k|        if (strtodStream.fail()) {
  ------------------
  |  Branch (348:13): [True: 591, False: 4.17k]
  ------------------
  349|       |            // Assume failure combined with a large exponent was overflow, in
  350|       |            // an attempt to set INF.
  351|    591|            if (!negativeExponent && exponent + numWholeNumberDigits > 300)
  ------------------
  |  Branch (351:17): [True: 538, False: 53]
  |  Branch (351:38): [True: 442, False: 96]
  ------------------
  352|    442|                ppToken->i64val = 0x7ff0000000000000; // +Infinity
  353|       |            // Assume failure combined with a small exponent was overflow.
  354|    591|            if (negativeExponent && exponent + numWholeNumberDigits > 300)
  ------------------
  |  Branch (354:17): [True: 53, False: 538]
  |  Branch (354:37): [True: 47, False: 6]
  ------------------
  355|     47|                ppToken->dval = 0.0;
  356|       |            // Unknown reason for failure. Theory is that either
  357|       |            //  - the 0.0 is still there, or
  358|       |            //  - something reasonable was written that is better than 0.0
  359|    591|        }
  360|  4.76k|    }
  361|       |
  362|       |    // Return the right token type
  363|  36.8k|    if (isDouble)
  ------------------
  |  Branch (363:9): [True: 6, False: 36.8k]
  ------------------
  364|      6|        return PpAtomConstDouble;
  365|  36.8k|    else if (isFloat16)
  ------------------
  |  Branch (365:14): [True: 224, False: 36.5k]
  ------------------
  366|    224|        return PpAtomConstFloat16;
  367|  36.5k|    else
  368|  36.5k|        return PpAtomConstFloat;
  369|  36.8k|}
_ZN7glslang10TPpContext16characterLiteralEPNS_8TPpTokenE:
  378|   236k|{
  379|   236k|    ppToken->name[0] = 0;
  380|   236k|    ppToken->ival = 0;
  381|       |
  382|   236k|    if (parseContext.intermediate.getSource() != EShSourceHlsl) {
  ------------------
  |  Branch (382:9): [True: 49.2k, False: 187k]
  ------------------
  383|       |        // illegal, except in macro definition, for which case we report the character
  384|  49.2k|        return '\'';
  385|  49.2k|    }
  386|       |
  387|   187k|    int ch = getChar();
  388|   187k|    switch (ch) {
  389|   152k|    case '\'':
  ------------------
  |  Branch (389:5): [True: 152k, False: 34.8k]
  ------------------
  390|       |        // As empty sequence:  ''
  391|   152k|        parseContext.ppError(ppToken->loc, "unexpected", "\'", "");
  392|   152k|        return PpAtomConstInt;
  393|      0|    case '\\':
  ------------------
  |  Branch (393:5): [True: 0, False: 187k]
  ------------------
  394|       |        // As escape sequence:  '\XXX'
  395|      0|        switch (ch = getChar()) {
  396|      0|        case 'a':
  ------------------
  |  Branch (396:9): [True: 0, False: 0]
  ------------------
  397|      0|            ppToken->ival = 7;
  398|      0|            break;
  399|      0|        case 'b':
  ------------------
  |  Branch (399:9): [True: 0, False: 0]
  ------------------
  400|      0|            ppToken->ival = 8;
  401|      0|            break;
  402|      0|        case 't':
  ------------------
  |  Branch (402:9): [True: 0, False: 0]
  ------------------
  403|      0|            ppToken->ival = 9;
  404|      0|            break;
  405|      0|        case 'n':
  ------------------
  |  Branch (405:9): [True: 0, False: 0]
  ------------------
  406|      0|            ppToken->ival = 10;
  407|      0|            break;
  408|      0|        case 'v':
  ------------------
  |  Branch (408:9): [True: 0, False: 0]
  ------------------
  409|      0|            ppToken->ival = 11;
  410|      0|            break;
  411|      0|        case 'f':
  ------------------
  |  Branch (411:9): [True: 0, False: 0]
  ------------------
  412|      0|            ppToken->ival = 12;
  413|      0|            break;
  414|      0|        case 'r':
  ------------------
  |  Branch (414:9): [True: 0, False: 0]
  ------------------
  415|      0|            ppToken->ival = 13;
  416|      0|            break;
  417|      0|        case 'x':
  ------------------
  |  Branch (417:9): [True: 0, False: 0]
  ------------------
  418|      0|        case '0':
  ------------------
  |  Branch (418:9): [True: 0, False: 0]
  ------------------
  419|      0|            parseContext.ppError(ppToken->loc, "octal and hex sequences not supported", "\\", "");
  420|      0|            break;
  421|      0|        default:
  ------------------
  |  Branch (421:9): [True: 0, False: 0]
  ------------------
  422|       |            // This catches '\'', '\"', '\?', etc.
  423|       |            // Also, things like '\C' mean the same thing as 'C'
  424|       |            // (after the above cases are filtered out).
  425|      0|            ppToken->ival = ch;
  426|      0|            break;
  427|      0|        }
  428|      0|        break;
  429|  34.8k|    default:
  ------------------
  |  Branch (429:5): [True: 34.8k, False: 152k]
  ------------------
  430|  34.8k|        ppToken->ival = ch;
  431|  34.8k|        break;
  432|   187k|    }
  433|  34.8k|    ppToken->name[0] = (char)ppToken->ival;
  434|  34.8k|    ppToken->name[1] = '\0';
  435|  34.8k|    ch = getChar();
  436|  34.8k|    if (ch != '\'') {
  ------------------
  |  Branch (436:9): [True: 20.6k, False: 14.2k]
  ------------------
  437|  20.6k|        parseContext.ppError(ppToken->loc, "expected", "\'", "");
  438|       |        // Look ahead for a closing '
  439|   263k|        do {
  440|   263k|            ch = getChar();
  441|   263k|        } while (ch != '\'' && ch != EndOfInput && ch != '\n');
  ------------------
  |  Branch (441:18): [True: 243k, False: 20.4k]
  |  Branch (441:32): [True: 243k, False: 1]
  |  Branch (441:52): [True: 243k, False: 259]
  ------------------
  442|  20.6k|    }
  443|       |
  444|  34.8k|    return PpAtomConstInt;
  445|   187k|}
_ZN7glslang10TPpContext12tStringInput4scanEPNS_8TPpTokenE:
  459|  44.5M|{
  460|  44.5M|    int AlreadyComplained = 0;
  461|  44.5M|    int len = 0;
  462|  44.5M|    int ch = 0;
  463|  44.5M|    int ii = 0;
  464|  44.5M|    unsigned long long ival = 0;
  465|  44.5M|    const auto floatingPointChar = [&](int ch) { return ch == '.' || ch == 'e' || ch == 'E' ||
  466|  44.5M|                                                                     ch == 'f' || ch == 'F' ||
  467|  44.5M|                                                                     ch == 'h' || ch == 'H'; };
  468|       |
  469|  44.5M|    static const char* const Int64_Extensions[] = {
  470|  44.5M|        E_GL_ARB_gpu_shader_int64,
  471|  44.5M|        E_GL_EXT_shader_explicit_arithmetic_types,
  472|  44.5M|        E_GL_NV_gpu_shader5,
  473|  44.5M|        E_GL_EXT_shader_explicit_arithmetic_types_int64 };
  474|  44.5M|    static const int Num_Int64_Extensions = sizeof(Int64_Extensions) / sizeof(Int64_Extensions[0]);
  475|       |
  476|  44.5M|    static const char* const Int16_Extensions[] = {
  477|  44.5M|        E_GL_AMD_gpu_shader_int16,
  478|  44.5M|        E_GL_EXT_shader_explicit_arithmetic_types,
  479|  44.5M|        E_GL_EXT_shader_explicit_arithmetic_types_int16 };
  480|  44.5M|    static const int Num_Int16_Extensions = sizeof(Int16_Extensions) / sizeof(Int16_Extensions[0]);
  481|       |
  482|  44.5M|    ppToken->clear();
  483|  44.5M|    ch = getch();
  484|  44.5M|    for (;;) {
  485|  48.5M|        while (ch == ' ' || ch == '\t') {
  ------------------
  |  Branch (485:16): [True: 3.48M, False: 45.0M]
  |  Branch (485:29): [True: 480k, False: 44.5M]
  ------------------
  486|  3.96M|            ppToken->space = true;
  487|  3.96M|            ch = getch();
  488|  3.96M|        }
  489|       |
  490|  44.5M|        ppToken->loc = pp->parseContext.getCurrentLoc();
  491|  44.5M|        len = 0;
  492|  44.5M|        switch (ch) {
  493|  36.5M|        default:
  ------------------
  |  Branch (493:9): [True: 36.5M, False: 8.07M]
  ------------------
  494|       |            // Single character token, including EndOfInput, '#' and '\' (escaped newlines are handled at a lower level, so this is just a '\' token)
  495|  36.5M|            if (ch > PpAtomMaxSingle)
  ------------------
  |  Branch (495:17): [True: 6.46M, False: 30.0M]
  ------------------
  496|  6.46M|                ch = PpAtomBadToken;
  497|  36.5M|            return ch;
  498|       |
  499|   161k|        case 'A': case 'B': case 'C': case 'D': case 'E':
  ------------------
  |  Branch (499:9): [True: 4.55k, False: 44.5M]
  |  Branch (499:19): [True: 7.31k, False: 44.5M]
  |  Branch (499:29): [True: 133k, False: 44.4M]
  |  Branch (499:39): [True: 3.83k, False: 44.5M]
  |  Branch (499:49): [True: 12.3k, False: 44.5M]
  ------------------
  500|   345k|        case 'F': case 'G': case 'H': case 'I': case 'J':
  ------------------
  |  Branch (500:9): [True: 3.68k, False: 44.5M]
  |  Branch (500:19): [True: 34.9k, False: 44.5M]
  |  Branch (500:29): [True: 9.83k, False: 44.5M]
  |  Branch (500:39): [True: 135k, False: 44.4M]
  |  Branch (500:49): [True: 1.09k, False: 44.5M]
  ------------------
  501|   370k|        case 'K': case 'L': case 'M': case 'N': case 'O':
  ------------------
  |  Branch (501:9): [True: 2.96k, False: 44.5M]
  |  Branch (501:19): [True: 2.34k, False: 44.5M]
  |  Branch (501:29): [True: 15.6k, False: 44.5M]
  |  Branch (501:39): [True: 2.91k, False: 44.5M]
  |  Branch (501:49): [True: 1.00k, False: 44.5M]
  ------------------
  502|   452k|        case 'P': case 'Q': case 'R': case 'S': case 'T':
  ------------------
  |  Branch (502:9): [True: 5.28k, False: 44.5M]
  |  Branch (502:19): [True: 7.43k, False: 44.5M]
  |  Branch (502:29): [True: 10.1k, False: 44.5M]
  |  Branch (502:39): [True: 16.7k, False: 44.5M]
  |  Branch (502:49): [True: 42.1k, False: 44.5M]
  ------------------
  503|   491k|        case 'U': case 'V': case 'W': case 'X': case 'Y':
  ------------------
  |  Branch (503:9): [True: 6.15k, False: 44.5M]
  |  Branch (503:19): [True: 12.2k, False: 44.5M]
  |  Branch (503:29): [True: 13.0k, False: 44.5M]
  |  Branch (503:39): [True: 1.83k, False: 44.5M]
  |  Branch (503:49): [True: 5.81k, False: 44.5M]
  ------------------
  504|   536k|        case 'Z': case '_':
  ------------------
  |  Branch (504:9): [True: 1.65k, False: 44.5M]
  |  Branch (504:19): [True: 43.6k, False: 44.5M]
  ------------------
  505|  1.15M|        case 'a': case 'b': case 'c': case 'd': case 'e':
  ------------------
  |  Branch (505:9): [True: 190k, False: 44.3M]
  |  Branch (505:19): [True: 152k, False: 44.4M]
  |  Branch (505:29): [True: 160k, False: 44.4M]
  |  Branch (505:39): [True: 88.3k, False: 44.4M]
  |  Branch (505:49): [True: 22.0k, False: 44.5M]
  ------------------
  506|  2.52M|        case 'f': case 'g': case 'h': case 'i': case 'j':
  ------------------
  |  Branch (506:9): [True: 442k, False: 44.1M]
  |  Branch (506:19): [True: 18.7k, False: 44.5M]
  |  Branch (506:29): [True: 100k, False: 44.4M]
  |  Branch (506:39): [True: 810k, False: 43.7M]
  |  Branch (506:49): [True: 705, False: 44.5M]
  ------------------
  507|  2.78M|        case 'k': case 'l': case 'm': case 'n': case 'o':
  ------------------
  |  Branch (507:9): [True: 1.45k, False: 44.5M]
  |  Branch (507:19): [True: 14.7k, False: 44.5M]
  |  Branch (507:29): [True: 57.3k, False: 44.5M]
  |  Branch (507:39): [True: 124k, False: 44.4M]
  |  Branch (507:49): [True: 64.2k, False: 44.5M]
  ------------------
  508|  3.44M|        case 'p': case 'q': case 'r': case 's': case 't':
  ------------------
  |  Branch (508:9): [True: 124k, False: 44.4M]
  |  Branch (508:19): [True: 14.6k, False: 44.5M]
  |  Branch (508:29): [True: 75.6k, False: 44.5M]
  |  Branch (508:39): [True: 332k, False: 44.2M]
  |  Branch (508:49): [True: 109k, False: 44.4M]
  ------------------
  509|  4.44M|        case 'u': case 'v': case 'w': case 'x': case 'y':
  ------------------
  |  Branch (509:9): [True: 631k, False: 43.9M]
  |  Branch (509:19): [True: 336k, False: 44.2M]
  |  Branch (509:29): [True: 6.22k, False: 44.5M]
  |  Branch (509:39): [True: 3.20k, False: 44.5M]
  |  Branch (509:49): [True: 29.0k, False: 44.5M]
  ------------------
  510|  4.46M|        case 'z':
  ------------------
  |  Branch (510:9): [True: 12.4k, False: 44.5M]
  ------------------
  511|  33.5M|            do {
  512|  33.5M|                if (len < MaxTokenLength) {
  ------------------
  |  Branch (512:21): [True: 31.4M, False: 2.08M]
  ------------------
  513|  31.4M|                    ppToken->name[len++] = (char)ch;
  514|  31.4M|                    ch = getch();
  515|  31.4M|                } else {
  516|  2.08M|                    if (! AlreadyComplained) {
  ------------------
  |  Branch (516:25): [True: 260, False: 2.08M]
  ------------------
  517|    260|                        pp->parseContext.ppError(ppToken->loc, "name too long", "", "");
  518|    260|                        AlreadyComplained = 1;
  519|    260|                    }
  520|  2.08M|                    ch = getch();
  521|  2.08M|                }
  522|  33.5M|            } while ((ch >= 'a' && ch <= 'z') ||
  ------------------
  |  Branch (522:23): [True: 21.5M, False: 11.9M]
  |  Branch (522:36): [True: 21.4M, False: 138k]
  ------------------
  523|  12.1M|                     (ch >= 'A' && ch <= 'Z') ||
  ------------------
  |  Branch (523:23): [True: 3.45M, False: 8.64M]
  |  Branch (523:36): [True: 2.95M, False: 503k]
  ------------------
  524|  9.14M|                     (ch >= '0' && ch <= '9') ||
  ------------------
  |  Branch (524:23): [True: 5.29M, False: 3.85M]
  |  Branch (524:36): [True: 4.33M, False: 962k]
  ------------------
  525|  4.81M|                     ch == '_');
  ------------------
  |  Branch (525:22): [True: 351k, False: 4.46M]
  ------------------
  526|       |
  527|       |            // line continuation with no token before or after makes len == 0, and need to start over skipping white space, etc.
  528|  4.46M|            if (len == 0)
  ------------------
  |  Branch (528:17): [True: 0, False: 4.46M]
  ------------------
  529|      0|                continue;
  530|       |
  531|  4.46M|            ppToken->name[len] = '\0';
  532|  4.46M|            ungetch();
  533|  4.46M|            return PpAtomIdentifier;
  534|  63.0k|        case '0':
  ------------------
  |  Branch (534:9): [True: 63.0k, False: 44.5M]
  ------------------
  535|  63.0k|            ppToken->name[len++] = (char)ch;
  536|  63.0k|            ch = getch();
  537|  63.0k|            if (ch == 'x' || ch == 'X') {
  ------------------
  |  Branch (537:17): [True: 1.47k, False: 61.5k]
  |  Branch (537:30): [True: 108, False: 61.4k]
  ------------------
  538|       |                // must be hexadecimal
  539|       |
  540|  1.57k|                bool isUnsigned = false;
  541|  1.57k|                bool isInt64 = false;
  542|  1.57k|                bool isInt16 = false;
  543|  1.57k|                ppToken->name[len++] = (char)ch;
  544|  1.57k|                ch = getch();
  545|  1.57k|                if ((ch >= '0' && ch <= '9') ||
  ------------------
  |  Branch (545:22): [True: 1.20k, False: 378]
  |  Branch (545:35): [True: 382, False: 818]
  ------------------
  546|  1.19k|                    (ch >= 'A' && ch <= 'F') ||
  ------------------
  |  Branch (546:22): [True: 753, False: 443]
  |  Branch (546:35): [True: 742, False: 11]
  ------------------
  547|  1.12k|                    (ch >= 'a' && ch <= 'f')) {
  ------------------
  |  Branch (547:22): [True: 3, False: 451]
  |  Branch (547:35): [True: 0, False: 3]
  ------------------
  548|       |
  549|  1.12k|                    ival = 0;
  550|  2.05k|                    do {
  551|  2.05k|                        if (len < MaxTokenLength && ival <= 0x7fffffffffffffffull) {
  ------------------
  |  Branch (551:29): [True: 2.05k, False: 0]
  |  Branch (551:53): [True: 2.05k, False: 0]
  ------------------
  552|  2.05k|                            ppToken->name[len++] = (char)ch;
  553|  2.05k|                            if (ch >= '0' && ch <= '9') {
  ------------------
  |  Branch (553:33): [True: 2.05k, False: 0]
  |  Branch (553:46): [True: 866, False: 1.19k]
  ------------------
  554|    866|                                ii = ch - '0';
  555|  1.19k|                            } else if (ch >= 'A' && ch <= 'F') {
  ------------------
  |  Branch (555:40): [True: 1.19k, False: 0]
  |  Branch (555:53): [True: 922, False: 270]
  ------------------
  556|    922|                                ii = ch - 'A' + 10;
  557|    922|                            } else if (ch >= 'a' && ch <= 'f') {
  ------------------
  |  Branch (557:40): [True: 270, False: 0]
  |  Branch (557:53): [True: 270, False: 0]
  ------------------
  558|    270|                                ii = ch - 'a' + 10;
  559|    270|                            } else
  560|      0|                                pp->parseContext.ppError(ppToken->loc, "bad digit in hexadecimal literal", "", "");
  561|  2.05k|                            ival = (ival << 4) | ii;
  562|  2.05k|                        } else {
  563|      0|                            if (! AlreadyComplained) {
  ------------------
  |  Branch (563:33): [True: 0, False: 0]
  ------------------
  564|      0|                                if(len < MaxTokenLength)
  ------------------
  |  Branch (564:36): [True: 0, False: 0]
  ------------------
  565|      0|                                    pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too big", "", "");
  566|      0|                                else
  567|      0|                                    pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too long", "", "");
  568|      0|                                AlreadyComplained = 1;
  569|      0|                            }
  570|      0|                            ival = 0xffffffffffffffffull;
  571|      0|                        }
  572|  2.05k|                        ch = getch();
  573|  2.05k|                    } while ((ch >= '0' && ch <= '9') ||
  ------------------
  |  Branch (573:31): [True: 1.40k, False: 655]
  |  Branch (573:44): [True: 484, False: 919]
  ------------------
  574|  1.57k|                             (ch >= 'A' && ch <= 'F') ||
  ------------------
  |  Branch (574:31): [True: 652, False: 922]
  |  Branch (574:44): [True: 180, False: 472]
  ------------------
  575|  1.39k|                             (ch >= 'a' && ch <= 'f'));
  ------------------
  |  Branch (575:31): [True: 442, False: 952]
  |  Branch (575:44): [True: 270, False: 172]
  ------------------
  576|  1.12k|                } else {
  577|    454|                    pp->parseContext.ppError(ppToken->loc, "bad digit in hexadecimal literal", "", "");
  578|    454|                }
  579|  1.57k|                if (ch == 'u' || ch == 'U') {
  ------------------
  |  Branch (579:21): [True: 2, False: 1.57k]
  |  Branch (579:34): [True: 22, False: 1.55k]
  ------------------
  580|     24|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (580:25): [True: 24, False: 0]
  ------------------
  581|     24|                        ppToken->name[len++] = (char)ch;
  582|     24|                    isUnsigned = true;
  583|       |
  584|     24|                    int nextCh = getch();
  585|     24|                    if (nextCh == 'l' || nextCh == 'L') {
  ------------------
  |  Branch (585:25): [True: 2, False: 22]
  |  Branch (585:42): [True: 0, False: 22]
  ------------------
  586|      2|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (586:29): [True: 2, False: 0]
  ------------------
  587|      2|                            ppToken->name[len++] = (char)nextCh;
  588|      2|                        isInt64 = true;
  589|      2|                    } else
  590|     22|                        ungetch();
  591|       |
  592|     24|                    nextCh = getch();
  593|     24|                    if ((nextCh == 's' || nextCh == 'S') &&
  ------------------
  |  Branch (593:26): [True: 0, False: 24]
  |  Branch (593:43): [True: 0, False: 24]
  ------------------
  594|      0|                            pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (594:29): [True: 0, False: 0]
  ------------------
  595|      0|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (595:29): [True: 0, False: 0]
  ------------------
  596|      0|                            ppToken->name[len++] = (char)nextCh;
  597|      0|                        isInt16 = true;
  598|      0|                    } else
  599|     24|                        ungetch();
  600|  1.55k|                } else if (ch == 'l' || ch == 'L') {
  ------------------
  |  Branch (600:28): [True: 5, False: 1.54k]
  |  Branch (600:41): [True: 0, False: 1.54k]
  ------------------
  601|      5|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (601:25): [True: 5, False: 0]
  ------------------
  602|      5|                        ppToken->name[len++] = (char)ch;
  603|      5|                    isInt64 = true;
  604|  1.54k|                } else if ((ch == 's' || ch == 'S') &&
  ------------------
  |  Branch (604:29): [True: 0, False: 1.54k]
  |  Branch (604:42): [True: 6, False: 1.54k]
  ------------------
  605|      6|                           pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (605:28): [True: 0, False: 6]
  ------------------
  606|      0|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (606:25): [True: 0, False: 0]
  ------------------
  607|      0|                        ppToken->name[len++] = (char)ch;
  608|      0|                    isInt16 = true;
  609|      0|                } else
  610|  1.54k|                    ungetch();
  611|  1.57k|                ppToken->name[len] = '\0';
  612|       |
  613|  1.57k|                if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (613:21): [True: 7, False: 1.57k]
  |  Branch (613:32): [True: 4, False: 3]
  ------------------
  614|      4|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (614:25): [True: 4, False: 0]
  ------------------
  615|      4|                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  616|      4|                                                        "64-bit hexadecimal literal");
  617|      4|                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  618|      4|                            Num_Int64_Extensions, Int64_Extensions, "64-bit hexadecimal literal");
  619|      4|                    }
  620|      4|                    ppToken->i64val = ival;
  621|      4|                    return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
  ------------------
  |  Branch (621:28): [True: 2, False: 2]
  ------------------
  622|  1.57k|                } else if (isInt16) {
  ------------------
  |  Branch (622:28): [True: 0, False: 1.57k]
  ------------------
  623|      0|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (623:25): [True: 0, False: 0]
  ------------------
  624|      0|                        if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (624:29): [True: 0, False: 0]
  ------------------
  625|      0|                            pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  626|      0|                                                             "16-bit hexadecimal literal");
  627|      0|                            pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  628|      0|                                Num_Int16_Extensions, Int16_Extensions, "16-bit hexadecimal literal");
  629|      0|                        }
  630|      0|                    }
  631|      0|                    ppToken->ival = (int)ival;
  632|      0|                    return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
  ------------------
  |  Branch (632:28): [True: 0, False: 0]
  ------------------
  633|  1.57k|                } else {
  634|  1.57k|                    if (ival > 0xffffffffu && !AlreadyComplained)
  ------------------
  |  Branch (634:25): [True: 39, False: 1.53k]
  |  Branch (634:47): [True: 39, False: 0]
  ------------------
  635|     39|                        pp->parseContext.ppError(ppToken->loc, "hexadecimal literal too big", "", "");
  636|  1.57k|                    ppToken->ival = (int)ival;
  637|  1.57k|                    return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
  ------------------
  |  Branch (637:28): [True: 22, False: 1.55k]
  ------------------
  638|  1.57k|                }
  639|  61.4k|            } else if ((ch == 'b' || ch == 'B') && pp->parseContext.intermediate.getSource() == EShSourceHlsl) {
  ------------------
  |  Branch (639:25): [True: 5, False: 61.4k]
  |  Branch (639:38): [True: 0, False: 61.4k]
  |  Branch (639:52): [True: 0, False: 5]
  ------------------
  640|       |                // must be binary
  641|      0|                bool isUnsigned = false;
  642|      0|                bool isInt64 = false;
  643|      0|                bool isInt16 = false;
  644|      0|                ppToken->name[len++] = (char)ch;
  645|      0|                ch = getch();
  646|       |
  647|       |                // Check value
  648|      0|                if ((ch == '0' || ch == '1'))
  ------------------
  |  Branch (648:22): [True: 0, False: 0]
  |  Branch (648:35): [True: 0, False: 0]
  ------------------
  649|      0|                {
  650|      0|                    ival = 0;
  651|      0|                    do {
  652|      0|                        if (len < MaxTokenLength && ival <= 0x7fffffffffffffffull) {
  ------------------
  |  Branch (652:29): [True: 0, False: 0]
  |  Branch (652:53): [True: 0, False: 0]
  ------------------
  653|      0|                            ppToken->name[len++] = (char)ch;
  654|      0|                            if (ch == '0' || ch == '1') {
  ------------------
  |  Branch (654:33): [True: 0, False: 0]
  |  Branch (654:46): [True: 0, False: 0]
  ------------------
  655|      0|                                ii = ch - '0';
  656|      0|                            } else {
  657|      0|                                pp->parseContext.ppError(ppToken->loc, "bad digit in binary literal", "", "");
  658|      0|                            }
  659|      0|                            ival = (ival << 1) | ii;
  660|      0|                        }
  661|      0|                        else
  662|      0|                        {
  663|      0|                            if (! AlreadyComplained) {
  ------------------
  |  Branch (663:33): [True: 0, False: 0]
  ------------------
  664|      0|                                if(len < MaxTokenLength)
  ------------------
  |  Branch (664:36): [True: 0, False: 0]
  ------------------
  665|      0|                                    pp->parseContext.ppError(ppToken->loc, "binary literal too big", "", "");
  666|      0|                                else
  667|      0|                                    pp->parseContext.ppError(ppToken->loc, "binary literal too long", "", "");
  668|      0|                                AlreadyComplained = 1;
  669|      0|                            }
  670|      0|                            ival = 0xffffffffffffffffull;
  671|      0|                        }
  672|      0|                        ch = getch();
  673|      0|                    } while (ch == '0' || ch == '1');
  ------------------
  |  Branch (673:30): [True: 0, False: 0]
  |  Branch (673:43): [True: 0, False: 0]
  ------------------
  674|      0|                }
  675|      0|                else
  676|      0|                {
  677|      0|                   pp->parseContext.ppError(ppToken->loc, "bad digit in binary literal", "", "");
  678|      0|                }
  679|       |
  680|       |                // check type
  681|      0|                if (ch == 'u' || ch == 'U') {
  ------------------
  |  Branch (681:21): [True: 0, False: 0]
  |  Branch (681:34): [True: 0, False: 0]
  ------------------
  682|      0|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (682:25): [True: 0, False: 0]
  ------------------
  683|      0|                        ppToken->name[len++] = (char)ch;
  684|      0|                    isUnsigned = true;
  685|       |
  686|      0|                    int nextCh = getch();
  687|      0|                    if (nextCh == 'l' || nextCh == 'L') {
  ------------------
  |  Branch (687:25): [True: 0, False: 0]
  |  Branch (687:42): [True: 0, False: 0]
  ------------------
  688|      0|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (688:29): [True: 0, False: 0]
  ------------------
  689|      0|                            ppToken->name[len++] = (char)nextCh;
  690|      0|                        isInt64 = true;
  691|      0|                    } else
  692|      0|                        ungetch();
  693|       |
  694|      0|                    nextCh = getch();
  695|      0|                    if ((nextCh == 's' || nextCh == 'S') &&
  ------------------
  |  Branch (695:26): [True: 0, False: 0]
  |  Branch (695:43): [True: 0, False: 0]
  ------------------
  696|      0|                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (696:33): [True: 0, False: 0]
  ------------------
  697|      0|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (697:29): [True: 0, False: 0]
  ------------------
  698|      0|                            ppToken->name[len++] = (char)nextCh;
  699|      0|                        isInt16 = true;
  700|      0|                    } else
  701|      0|                        ungetch();
  702|      0|                } else if (ch == 'l' || ch == 'L') {
  ------------------
  |  Branch (702:28): [True: 0, False: 0]
  |  Branch (702:41): [True: 0, False: 0]
  ------------------
  703|      0|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (703:25): [True: 0, False: 0]
  ------------------
  704|      0|                        ppToken->name[len++] = (char)ch;
  705|      0|                    isInt64 = true;
  706|      0|                } else if ((ch == 's' || ch == 'S') &&
  ------------------
  |  Branch (706:29): [True: 0, False: 0]
  |  Branch (706:42): [True: 0, False: 0]
  ------------------
  707|      0|                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (707:33): [True: 0, False: 0]
  ------------------
  708|      0|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (708:25): [True: 0, False: 0]
  ------------------
  709|      0|                        ppToken->name[len++] = (char)ch;
  710|      0|                    isInt16 = true;
  711|      0|                } else {
  712|      0|                    ungetch();
  713|      0|                }
  714|      0|                ppToken->name[len] = '\0';
  715|       |
  716|       |                // Assign value
  717|      0|                if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (717:21): [True: 0, False: 0]
  |  Branch (717:32): [True: 0, False: 0]
  ------------------
  718|      0|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (718:25): [True: 0, False: 0]
  ------------------
  719|      0|                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  720|      0|                                                        "64-bit binary literal");
  721|      0|                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  722|      0|                            Num_Int64_Extensions, Int64_Extensions, "64-bit binary literal");
  723|      0|                    }
  724|      0|                    ppToken->i64val = ival;
  725|      0|                    return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
  ------------------
  |  Branch (725:28): [True: 0, False: 0]
  ------------------
  726|      0|                } else if (isInt16) {
  ------------------
  |  Branch (726:28): [True: 0, False: 0]
  ------------------
  727|      0|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (727:25): [True: 0, False: 0]
  ------------------
  728|      0|                        if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (728:29): [True: 0, False: 0]
  ------------------
  729|      0|                            pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  730|      0|                                                            "16-bit binary literal");
  731|      0|                            pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  732|      0|                                Num_Int16_Extensions, Int16_Extensions, "16-bit binary literal");
  733|      0|                        }
  734|      0|                    }
  735|      0|                    ppToken->ival = (int)ival;
  736|      0|                    return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
  ------------------
  |  Branch (736:28): [True: 0, False: 0]
  ------------------
  737|      0|                } else {
  738|      0|                    ppToken->ival = (int)ival;
  739|      0|                    return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
  ------------------
  |  Branch (739:28): [True: 0, False: 0]
  ------------------
  740|      0|                }
  741|  61.4k|            } else {
  742|       |                // could be octal integer or floating point, speculative pursue octal until it must be floating point
  743|       |
  744|  61.4k|                bool isUnsigned = false;
  745|  61.4k|                bool isInt64 = false;
  746|  61.4k|                bool isInt16 = false;
  747|  61.4k|                bool octalOverflow = false;
  748|  61.4k|                bool nonOctal = false;
  749|  61.4k|                ival = 0;
  750|       |
  751|       |                // see how much octal-like stuff we can read
  752|  1.58M|                while (ch >= '0' && ch <= '7') {
  ------------------
  |  Branch (752:24): [True: 1.54M, False: 42.1k]
  |  Branch (752:37): [True: 1.52M, False: 19.3k]
  ------------------
  753|  1.52M|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (753:25): [True: 330k, False: 1.19M]
  ------------------
  754|   330k|                        ppToken->name[len++] = (char)ch;
  755|  1.19M|                    else if (! AlreadyComplained) {
  ------------------
  |  Branch (755:30): [True: 189, False: 1.19M]
  ------------------
  756|    189|                        pp->parseContext.ppError(ppToken->loc, "numeric literal too long", "", "");
  757|    189|                        AlreadyComplained = 1;
  758|    189|                    }
  759|  1.52M|                    if (ival <= 0x1fffffffffffffffull) {
  ------------------
  |  Branch (759:25): [True: 1.47M, False: 50.7k]
  ------------------
  760|  1.47M|                        ii = ch - '0';
  761|  1.47M|                        ival = (ival << 3) | ii;
  762|  1.47M|                    } else
  763|  50.7k|                        octalOverflow = true;
  764|  1.52M|                    ch = getch();
  765|  1.52M|                }
  766|       |
  767|       |                // could be part of a float...
  768|  61.4k|                if (ch == '8' || ch == '9') {
  ------------------
  |  Branch (768:21): [True: 1.16k, False: 60.2k]
  |  Branch (768:34): [True: 998, False: 59.2k]
  ------------------
  769|  2.16k|                    nonOctal = true;
  770|   102k|                    do {
  771|   102k|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (771:29): [True: 30.7k, False: 71.6k]
  ------------------
  772|  30.7k|                            ppToken->name[len++] = (char)ch;
  773|  71.6k|                        else if (! AlreadyComplained) {
  ------------------
  |  Branch (773:34): [True: 12, False: 71.6k]
  ------------------
  774|     12|                            pp->parseContext.ppError(ppToken->loc, "numeric literal too long", "", "");
  775|     12|                            AlreadyComplained = 1;
  776|     12|                        }
  777|   102k|                        ch = getch();
  778|   102k|                    } while (ch >= '0' && ch <= '9');
  ------------------
  |  Branch (778:30): [True: 100k, False: 1.81k]
  |  Branch (778:43): [True: 100k, False: 348]
  ------------------
  779|  2.16k|                }
  780|  61.4k|                if (floatingPointChar(ch))
  ------------------
  |  Branch (780:21): [True: 2.83k, False: 58.5k]
  ------------------
  781|  2.83k|                    return pp->lFloatConst(len, ch, ppToken);
  782|       |
  783|       |                // wasn't a float, so must be octal...
  784|  58.5k|                if (nonOctal)
  ------------------
  |  Branch (784:21): [True: 1.57k, False: 57.0k]
  ------------------
  785|  1.57k|                    pp->parseContext.ppError(ppToken->loc, "octal literal digit too large", "", "");
  786|       |
  787|  58.5k|                if (ch == 'u' || ch == 'U') {
  ------------------
  |  Branch (787:21): [True: 3, False: 58.5k]
  |  Branch (787:34): [True: 334, False: 58.2k]
  ------------------
  788|    337|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (788:25): [True: 324, False: 13]
  ------------------
  789|    324|                        ppToken->name[len++] = (char)ch;
  790|    337|                    isUnsigned = true;
  791|       |
  792|    337|                    int nextCh = getch();
  793|    337|                    if (nextCh == 'l' || nextCh == 'L') {
  ------------------
  |  Branch (793:25): [True: 4, False: 333]
  |  Branch (793:42): [True: 1, False: 332]
  ------------------
  794|      5|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (794:29): [True: 4, False: 1]
  ------------------
  795|      4|                            ppToken->name[len++] = (char)nextCh;
  796|      5|                        isInt64 = true;
  797|      5|                    } else
  798|    332|                        ungetch();
  799|       |
  800|    337|                    nextCh = getch();
  801|    337|                    if ((nextCh == 's' || nextCh == 'S') && 
  ------------------
  |  Branch (801:26): [True: 0, False: 337]
  |  Branch (801:43): [True: 3, False: 334]
  ------------------
  802|      3|                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (802:33): [True: 0, False: 3]
  ------------------
  803|      0|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (803:29): [True: 0, False: 0]
  ------------------
  804|      0|                            ppToken->name[len++] = (char)nextCh;
  805|      0|                        isInt16 = true;
  806|      0|                    } else
  807|    337|                        ungetch();
  808|  58.2k|                } else if (ch == 'l' || ch == 'L') {
  ------------------
  |  Branch (808:28): [True: 153, False: 58.0k]
  |  Branch (808:41): [True: 3, False: 58.0k]
  ------------------
  809|    156|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (809:25): [True: 156, False: 0]
  ------------------
  810|    156|                        ppToken->name[len++] = (char)ch;
  811|    156|                    isInt64 = true;
  812|  58.0k|                } else if ((ch == 's' || ch == 'S') && 
  ------------------
  |  Branch (812:29): [True: 146, False: 57.9k]
  |  Branch (812:42): [True: 799, False: 57.1k]
  ------------------
  813|    945|                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (813:33): [True: 518, False: 427]
  ------------------
  814|    518|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (814:25): [True: 518, False: 0]
  ------------------
  815|    518|                        ppToken->name[len++] = (char)ch;
  816|    518|                    isInt16 = true;
  817|    518|                } else
  818|  57.5k|                    ungetch();
  819|  58.5k|                ppToken->name[len] = '\0';
  820|       |
  821|  58.5k|                if (!isInt64 && ival > 0xffffffffu)
  ------------------
  |  Branch (821:21): [True: 58.4k, False: 161]
  |  Branch (821:33): [True: 152, False: 58.2k]
  ------------------
  822|    152|                    octalOverflow = true;
  823|       |
  824|  58.5k|                if (octalOverflow)
  ------------------
  |  Branch (824:21): [True: 152, False: 58.4k]
  ------------------
  825|    152|                    pp->parseContext.ppError(ppToken->loc, "octal literal too big", "", "");
  826|       |
  827|  58.5k|                if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (827:21): [True: 161, False: 58.4k]
  |  Branch (827:32): [True: 15, False: 146]
  ------------------
  828|     15|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (828:25): [True: 15, False: 0]
  ------------------
  829|     15|                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  830|     15|                                                        "64-bit octal literal");
  831|     15|                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  832|     15|                            Num_Int64_Extensions, Int64_Extensions, "64-bit octal literal");
  833|     15|                    }
  834|     15|                    ppToken->i64val = ival;
  835|     15|                    return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
  ------------------
  |  Branch (835:28): [True: 4, False: 11]
  ------------------
  836|  58.5k|                } else if (isInt16) {
  ------------------
  |  Branch (836:28): [True: 518, False: 58.0k]
  ------------------
  837|    518|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (837:25): [True: 518, False: 0]
  ------------------
  838|    518|                        if (pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (838:29): [True: 518, False: 0]
  ------------------
  839|    518|                            pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  840|    518|                                                            "16-bit octal literal");
  841|    518|                            pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  842|    518|                                Num_Int16_Extensions, Int16_Extensions, "16-bit octal literal");
  843|    518|                        }
  844|    518|                    }
  845|    518|                    ppToken->ival = (int)ival;
  846|    518|                    return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
  ------------------
  |  Branch (846:28): [True: 0, False: 518]
  ------------------
  847|  58.0k|                } else {
  848|  58.0k|                    ppToken->ival = (int)ival;
  849|  58.0k|                    return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
  ------------------
  |  Branch (849:28): [True: 333, False: 57.7k]
  ------------------
  850|  58.0k|                }
  851|  58.5k|            }
  852|      0|            break;
  853|   794k|        case '1': case '2': case '3': case '4':
  ------------------
  |  Branch (853:9): [True: 608k, False: 43.9M]
  |  Branch (853:19): [True: 133k, False: 44.4M]
  |  Branch (853:29): [True: 22.5k, False: 44.5M]
  |  Branch (853:39): [True: 30.4k, False: 44.5M]
  ------------------
  854|   934k|        case '5': case '6': case '7': case '8': case '9':
  ------------------
  |  Branch (854:9): [True: 14.8k, False: 44.5M]
  |  Branch (854:19): [True: 9.14k, False: 44.5M]
  |  Branch (854:29): [True: 93.6k, False: 44.4M]
  |  Branch (854:39): [True: 11.5k, False: 44.5M]
  |  Branch (854:49): [True: 10.6k, False: 44.5M]
  ------------------
  855|       |            // can't be hexadecimal or octal, is either decimal or floating point
  856|       |
  857|  3.03M|            do {
  858|  3.03M|                if (len < MaxTokenLength)
  ------------------
  |  Branch (858:21): [True: 1.68M, False: 1.35M]
  ------------------
  859|  1.68M|                    ppToken->name[len++] = (char)ch;
  860|  1.35M|                else if (! AlreadyComplained) {
  ------------------
  |  Branch (860:26): [True: 64, False: 1.35M]
  ------------------
  861|     64|                    pp->parseContext.ppError(ppToken->loc, "numeric literal too long", "", "");
  862|     64|                    AlreadyComplained = 1;
  863|     64|                }
  864|  3.03M|                ch = getch();
  865|  3.03M|            } while (ch >= '0' && ch <= '9');
  ------------------
  |  Branch (865:22): [True: 2.28M, False: 753k]
  |  Branch (865:35): [True: 2.10M, False: 180k]
  ------------------
  866|   934k|            if (floatingPointChar(ch))
  ------------------
  |  Branch (866:17): [True: 25.2k, False: 908k]
  ------------------
  867|  25.2k|                return pp->lFloatConst(len, ch, ppToken);
  868|   908k|            else {
  869|       |                // Finish handling signed and unsigned integers
  870|   908k|                int numericLen = len;
  871|   908k|                bool isUnsigned = false;
  872|   908k|                bool isInt64 = false;
  873|   908k|                bool isInt16 = false;
  874|   908k|                if (ch == 'u' || ch == 'U') {
  ------------------
  |  Branch (874:21): [True: 38, False: 908k]
  |  Branch (874:34): [True: 5.49k, False: 903k]
  ------------------
  875|  5.53k|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (875:25): [True: 5.53k, False: 0]
  ------------------
  876|  5.53k|                        ppToken->name[len++] = (char)ch;
  877|  5.53k|                    isUnsigned = true;
  878|       |
  879|  5.53k|                    int nextCh = getch();
  880|  5.53k|                    if (nextCh == 'l' || nextCh == 'L') {
  ------------------
  |  Branch (880:25): [True: 9, False: 5.52k]
  |  Branch (880:42): [True: 2, False: 5.52k]
  ------------------
  881|     11|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (881:29): [True: 11, False: 0]
  ------------------
  882|     11|                            ppToken->name[len++] = (char)nextCh;
  883|     11|                        isInt64 = true;
  884|     11|                    } else
  885|  5.52k|                        ungetch();
  886|       |
  887|  5.53k|                    nextCh = getch();
  888|  5.53k|                    if ((nextCh == 's' || nextCh == 'S') &&
  ------------------
  |  Branch (888:26): [True: 0, False: 5.53k]
  |  Branch (888:43): [True: 25, False: 5.50k]
  ------------------
  889|     25|                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (889:33): [True: 24, False: 1]
  ------------------
  890|     24|                        if (len < MaxTokenLength)
  ------------------
  |  Branch (890:29): [True: 24, False: 0]
  ------------------
  891|     24|                            ppToken->name[len++] = (char)nextCh;
  892|     24|                        isInt16 = true;
  893|     24|                    } else
  894|  5.51k|                        ungetch();
  895|   903k|                } else if (ch == 'l' || ch == 'L') {
  ------------------
  |  Branch (895:28): [True: 224, False: 903k]
  |  Branch (895:41): [True: 361, False: 902k]
  ------------------
  896|    585|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (896:25): [True: 585, False: 0]
  ------------------
  897|    585|                        ppToken->name[len++] = (char)ch;
  898|    585|                    isInt64 = true;
  899|   902k|                } else if ((ch == 's' || ch == 'S') &&
  ------------------
  |  Branch (899:29): [True: 166, False: 902k]
  |  Branch (899:42): [True: 521, False: 902k]
  ------------------
  900|    687|                                pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (900:33): [True: 652, False: 35]
  ------------------
  901|    652|                    if (len < MaxTokenLength)
  ------------------
  |  Branch (901:25): [True: 652, False: 0]
  ------------------
  902|    652|                        ppToken->name[len++] = (char)ch;
  903|    652|                    isInt16 = true;
  904|    652|                } else
  905|   902k|                    ungetch();
  906|       |
  907|   908k|                ppToken->name[len] = '\0';
  908|   908k|                ival = 0;
  909|   908k|                const unsigned oneTenthMaxInt  = 0xFFFFFFFFu / 10;
  910|   908k|                const unsigned remainderMaxInt = 0xFFFFFFFFu - 10 * oneTenthMaxInt;
  911|   908k|                const unsigned long long oneTenthMaxInt64  = 0xFFFFFFFFFFFFFFFFull / 10;
  912|   908k|                const unsigned long long remainderMaxInt64 = 0xFFFFFFFFFFFFFFFFull - 10 * oneTenthMaxInt64;
  913|   908k|                const unsigned short oneTenthMaxInt16  = 0xFFFFu / 10;
  914|   908k|                const unsigned short remainderMaxInt16 = 0xFFFFu - 10 * oneTenthMaxInt16;
  915|  2.37M|                for (int i = 0; i < numericLen; i++) {
  ------------------
  |  Branch (915:33): [True: 1.46M, False: 905k]
  ------------------
  916|  1.46M|                    ch = ppToken->name[i] - '0';
  917|  1.46M|                    bool overflow = false;
  918|  1.46M|                    if (isInt64)
  ------------------
  |  Branch (918:25): [True: 989, False: 1.46M]
  ------------------
  919|    989|                        overflow = (ival > oneTenthMaxInt64 || (ival == oneTenthMaxInt64 && (unsigned long long)ch > remainderMaxInt64));
  ------------------
  |  Branch (919:37): [True: 1, False: 988]
  |  Branch (919:65): [True: 9, False: 979]
  |  Branch (919:93): [True: 0, False: 9]
  ------------------
  920|  1.46M|                    else if (isInt16)
  ------------------
  |  Branch (920:30): [True: 2.96k, False: 1.46M]
  ------------------
  921|  2.96k|                        overflow = (ival > oneTenthMaxInt16 || (ival == oneTenthMaxInt16 && (unsigned short)ch > remainderMaxInt16));
  ------------------
  |  Branch (921:37): [True: 164, False: 2.80k]
  |  Branch (921:65): [True: 0, False: 2.80k]
  |  Branch (921:93): [True: 0, False: 0]
  ------------------
  922|  1.46M|                    else
  923|  1.46M|                        overflow = (ival > oneTenthMaxInt || (ival == oneTenthMaxInt && (unsigned)ch > remainderMaxInt));
  ------------------
  |  Branch (923:37): [True: 3.60k, False: 1.45M]
  |  Branch (923:63): [True: 25, False: 1.45M]
  |  Branch (923:89): [True: 22, False: 3]
  ------------------
  924|  1.46M|                    if (overflow) {
  ------------------
  |  Branch (924:25): [True: 3.78k, False: 1.46M]
  ------------------
  925|  3.78k|                        pp->parseContext.ppError(ppToken->loc, "numeric literal too big", "", "");
  926|  3.78k|                        ival = 0xFFFFFFFFFFFFFFFFull;
  927|  3.78k|                        break;
  928|  3.78k|                    } else
  929|  1.46M|                        ival = ival * 10 + ch;
  930|  1.46M|                }
  931|       |
  932|   908k|                if (isInt64 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (932:21): [True: 596, False: 908k]
  |  Branch (932:32): [True: 134, False: 462]
  ------------------
  933|    134|                    if (pp->ifdepth == 0) {
  ------------------
  |  Branch (933:25): [True: 134, False: 0]
  ------------------
  934|    134|                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  935|    134|                                                        "64-bit literal");
  936|    134|                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  937|    134|                            Num_Int64_Extensions, Int64_Extensions, "64-bit literal");
  938|    134|                    }
  939|    134|                    ppToken->i64val = ival;
  940|    134|                    return isUnsigned ? PpAtomConstUint64 : PpAtomConstInt64;
  ------------------
  |  Branch (940:28): [True: 11, False: 123]
  ------------------
  941|   908k|                } else if (isInt16) {
  ------------------
  |  Branch (941:28): [True: 676, False: 908k]
  ------------------
  942|    676|                    if (pp->ifdepth == 0 && pp->parseContext.intermediate.getSource() == EShSourceGlsl) {
  ------------------
  |  Branch (942:25): [True: 676, False: 0]
  |  Branch (942:45): [True: 676, False: 0]
  ------------------
  943|    676|                        pp->parseContext.requireProfile(ppToken->loc, ~EEsProfile,
  944|    676|                                                        "16-bit  literal");
  945|    676|                        pp->parseContext.profileRequires(ppToken->loc, ~EEsProfile, 0,
  946|    676|                            Num_Int16_Extensions, Int16_Extensions, "16-bit literal");
  947|    676|                    }
  948|    676|                    ppToken->ival = (int)ival;
  949|    676|                    return isUnsigned ? PpAtomConstUint16 : PpAtomConstInt16;
  ------------------
  |  Branch (949:28): [True: 24, False: 652]
  ------------------
  950|   908k|                } else {
  951|   908k|                    ppToken->ival = (int)ival;
  952|   908k|                    return isUnsigned ? PpAtomConstUint : PpAtomConstInt;
  ------------------
  |  Branch (952:28): [True: 5.49k, False: 902k]
  ------------------
  953|   908k|                }
  954|   908k|            }
  955|      0|            break;
  956|   145k|        case '-':
  ------------------
  |  Branch (956:9): [True: 145k, False: 44.4M]
  ------------------
  957|   145k|            ch = getch();
  958|   145k|            if (ch == '-') {
  ------------------
  |  Branch (958:17): [True: 2.26k, False: 143k]
  ------------------
  959|  2.26k|                return PpAtomDecrement;
  960|   143k|            } else if (ch == '=') {
  ------------------
  |  Branch (960:24): [True: 37.2k, False: 105k]
  ------------------
  961|  37.2k|                return PPAtomSubAssign;
  962|   105k|            } else {
  963|   105k|                ungetch();
  964|   105k|                return '-';
  965|   105k|            }
  966|  12.9k|        case '+':
  ------------------
  |  Branch (966:9): [True: 12.9k, False: 44.5M]
  ------------------
  967|  12.9k|            ch = getch();
  968|  12.9k|            if (ch == '+') {
  ------------------
  |  Branch (968:17): [True: 348, False: 12.5k]
  ------------------
  969|    348|                return PpAtomIncrement;
  970|  12.5k|            } else if (ch == '=') {
  ------------------
  |  Branch (970:24): [True: 2.28k, False: 10.2k]
  ------------------
  971|  2.28k|                return PPAtomAddAssign;
  972|  10.2k|            } else {
  973|  10.2k|                ungetch();
  974|  10.2k|                return '+';
  975|  10.2k|            }
  976|  23.9k|        case '*':
  ------------------
  |  Branch (976:9): [True: 23.9k, False: 44.5M]
  ------------------
  977|  23.9k|            ch = getch();
  978|  23.9k|            if (ch == '=') {
  ------------------
  |  Branch (978:17): [True: 13, False: 23.9k]
  ------------------
  979|     13|                return PPAtomMulAssign;
  980|  23.9k|            } else {
  981|  23.9k|                ungetch();
  982|  23.9k|                return '*';
  983|  23.9k|            }
  984|  40.2k|        case '%':
  ------------------
  |  Branch (984:9): [True: 40.2k, False: 44.5M]
  ------------------
  985|  40.2k|            ch = getch();
  986|  40.2k|            if (ch == '=') {
  ------------------
  |  Branch (986:17): [True: 249, False: 39.9k]
  ------------------
  987|    249|                return PPAtomModAssign;
  988|  39.9k|            } else {
  989|  39.9k|                ungetch();
  990|  39.9k|                return '%';
  991|  39.9k|            }
  992|    228|        case '^':
  ------------------
  |  Branch (992:9): [True: 228, False: 44.5M]
  ------------------
  993|    228|            ch = getch();
  994|    228|            if (ch == '^') {
  ------------------
  |  Branch (994:17): [True: 17, False: 211]
  ------------------
  995|     17|                return PpAtomXor;
  996|    211|            } else {
  997|    211|                if (ch == '=')
  ------------------
  |  Branch (997:21): [True: 3, False: 208]
  ------------------
  998|      3|                    return PpAtomXorAssign;
  999|    208|                else{
 1000|    208|                    ungetch();
 1001|    208|                    return '^';
 1002|    208|                }
 1003|    211|            }
 1004|       |
 1005|   217k|        case '=':
  ------------------
  |  Branch (1005:9): [True: 217k, False: 44.3M]
  ------------------
 1006|   217k|            ch = getch();
 1007|   217k|            if (ch == '=') {
  ------------------
  |  Branch (1007:17): [True: 124, False: 217k]
  ------------------
 1008|    124|                return PpAtomEQ;
 1009|   217k|            } else {
 1010|   217k|                ungetch();
 1011|   217k|                return '=';
 1012|   217k|            }
 1013|   148k|        case '!':
  ------------------
  |  Branch (1013:9): [True: 148k, False: 44.4M]
  ------------------
 1014|   148k|            ch = getch();
 1015|   148k|            if (ch == '=') {
  ------------------
  |  Branch (1015:17): [True: 14, False: 148k]
  ------------------
 1016|     14|                return PpAtomNE;
 1017|   148k|            } else {
 1018|   148k|                ungetch();
 1019|   148k|                return '!';
 1020|   148k|            }
 1021|  1.97k|        case '|':
  ------------------
  |  Branch (1021:9): [True: 1.97k, False: 44.5M]
  ------------------
 1022|  1.97k|            ch = getch();
 1023|  1.97k|            if (ch == '|') {
  ------------------
  |  Branch (1023:17): [True: 31, False: 1.94k]
  ------------------
 1024|     31|                return PpAtomOr;
 1025|  1.94k|            } else if (ch == '=') {
  ------------------
  |  Branch (1025:24): [True: 3, False: 1.94k]
  ------------------
 1026|      3|                return PpAtomOrAssign;
 1027|  1.94k|            } else {
 1028|  1.94k|                ungetch();
 1029|  1.94k|                return '|';
 1030|  1.94k|            }
 1031|  1.31k|        case '&':
  ------------------
  |  Branch (1031:9): [True: 1.31k, False: 44.5M]
  ------------------
 1032|  1.31k|            ch = getch();
 1033|  1.31k|            if (ch == '&') {
  ------------------
  |  Branch (1033:17): [True: 161, False: 1.15k]
  ------------------
 1034|    161|                return PpAtomAnd;
 1035|  1.15k|            } else if (ch == '=') {
  ------------------
  |  Branch (1035:24): [True: 3, False: 1.15k]
  ------------------
 1036|      3|                return PpAtomAndAssign;
 1037|  1.15k|            } else {
 1038|  1.15k|                ungetch();
 1039|  1.15k|                return '&';
 1040|  1.15k|            }
 1041|  65.2k|        case '<':
  ------------------
  |  Branch (1041:9): [True: 65.2k, False: 44.5M]
  ------------------
 1042|  65.2k|            ch = getch();
 1043|  65.2k|            if (ch == '<') {
  ------------------
  |  Branch (1043:17): [True: 3.56k, False: 61.6k]
  ------------------
 1044|  3.56k|                ch = getch();
 1045|  3.56k|                if (ch == '=')
  ------------------
  |  Branch (1045:21): [True: 116, False: 3.44k]
  ------------------
 1046|    116|                    return PpAtomLeftAssign;
 1047|  3.44k|                else {
 1048|  3.44k|                    ungetch();
 1049|  3.44k|                    return PpAtomLeft;
 1050|  3.44k|                }
 1051|  61.6k|            } else if (ch == '=') {
  ------------------
  |  Branch (1051:24): [True: 122, False: 61.5k]
  ------------------
 1052|    122|                return PpAtomLE;
 1053|  61.5k|            } else {
 1054|  61.5k|                ungetch();
 1055|  61.5k|                return '<';
 1056|  61.5k|            }
 1057|   189k|        case '>':
  ------------------
  |  Branch (1057:9): [True: 189k, False: 44.3M]
  ------------------
 1058|   189k|            ch = getch();
 1059|   189k|            if (ch == '>') {
  ------------------
  |  Branch (1059:17): [True: 4.31k, False: 184k]
  ------------------
 1060|  4.31k|                ch = getch();
 1061|  4.31k|                if (ch == '=')
  ------------------
  |  Branch (1061:21): [True: 15, False: 4.29k]
  ------------------
 1062|     15|                    return PpAtomRightAssign;
 1063|  4.29k|                else {
 1064|  4.29k|                    ungetch();
 1065|  4.29k|                    return PpAtomRight;
 1066|  4.29k|                }
 1067|   184k|            } else if (ch == '=') {
  ------------------
  |  Branch (1067:24): [True: 21, False: 184k]
  ------------------
 1068|     21|                return PpAtomGE;
 1069|   184k|            } else {
 1070|   184k|                ungetch();
 1071|   184k|                return '>';
 1072|   184k|            }
 1073|  30.2k|        case '.':
  ------------------
  |  Branch (1073:9): [True: 30.2k, False: 44.5M]
  ------------------
 1074|  30.2k|            ch = getch();
 1075|  30.2k|            if (ch >= '0' && ch <= '9') {
  ------------------
  |  Branch (1075:17): [True: 18.8k, False: 11.3k]
  |  Branch (1075:30): [True: 8.68k, False: 10.1k]
  ------------------
 1076|  8.68k|                ungetch();
 1077|  8.68k|                return pp->lFloatConst(0, '.', ppToken);
 1078|  21.5k|            } else {
 1079|  21.5k|                ungetch();
 1080|  21.5k|                return '.';
 1081|  21.5k|            }
 1082|  30.7k|        case '/':
  ------------------
  |  Branch (1082:9): [True: 30.7k, False: 44.5M]
  ------------------
 1083|  30.7k|            ch = getch();
 1084|  30.7k|            if (ch == '/') {
  ------------------
  |  Branch (1084:17): [True: 2.94k, False: 27.8k]
  ------------------
 1085|  2.94k|                pp->inComment = true;
 1086|   586k|                do {
 1087|   586k|                    ch = getch();
 1088|   586k|                } while (ch != '\n' && ch != EndOfInput);
  ------------------
  |  Branch (1088:26): [True: 583k, False: 2.94k]
  |  Branch (1088:40): [True: 583k, False: 3]
  ------------------
 1089|  2.94k|                ppToken->space = true;
 1090|  2.94k|                pp->inComment = false;
 1091|       |
 1092|  2.94k|                return ch;
 1093|  27.8k|            } else if (ch == '*') {
  ------------------
  |  Branch (1093:24): [True: 3, False: 27.8k]
  ------------------
 1094|      3|                ch = getch();
 1095|  26.7k|                do {
 1096|  50.3k|                    while (ch != '*') {
  ------------------
  |  Branch (1096:28): [True: 23.6k, False: 26.7k]
  ------------------
 1097|  23.6k|                        if (ch == EndOfInput) {
  ------------------
  |  Branch (1097:29): [True: 0, False: 23.6k]
  ------------------
 1098|      0|                            pp->parseContext.ppError(ppToken->loc, "End of input in comment", "comment", "");
 1099|      0|                            return ch;
 1100|      0|                        }
 1101|  23.6k|                        ch = getch();
 1102|  23.6k|                    }
 1103|  26.7k|                    ch = getch();
 1104|  26.7k|                    if (ch == EndOfInput) {
  ------------------
  |  Branch (1104:25): [True: 0, False: 26.7k]
  ------------------
 1105|      0|                        pp->parseContext.ppError(ppToken->loc, "End of input in comment", "comment", "");
 1106|      0|                        return ch;
 1107|      0|                    }
 1108|  26.7k|                } while (ch != '/');
  ------------------
  |  Branch (1108:26): [True: 26.7k, False: 3]
  ------------------
 1109|      3|                ppToken->space = true;
 1110|       |                // loop again to get the next token...
 1111|      3|                break;
 1112|  27.8k|            } else if (ch == '=') {
  ------------------
  |  Branch (1112:24): [True: 2, False: 27.8k]
  ------------------
 1113|      2|                return PPAtomDivAssign;
 1114|  27.8k|            } else {
 1115|  27.8k|                ungetch();
 1116|  27.8k|                return '/';
 1117|  27.8k|            }
 1118|      0|            break;
 1119|   236k|        case '\'':
  ------------------
  |  Branch (1119:9): [True: 236k, False: 44.3M]
  ------------------
 1120|   236k|            return pp->characterLiteral(ppToken);
 1121|   121k|        case '"':
  ------------------
  |  Branch (1121:9): [True: 121k, False: 44.4M]
  ------------------
 1122|       |            // #include uses scanHeaderName() to ignore these escape sequences.
 1123|   121k|            ch = getch();
 1124|   750k|            while (ch != '"' && ch != '\n' && ch != EndOfInput) {
  ------------------
  |  Branch (1124:20): [True: 630k, False: 119k]
  |  Branch (1124:33): [True: 629k, False: 1.45k]
  |  Branch (1124:47): [True: 629k, False: 5]
  ------------------
 1125|   629k|                if (len < MaxTokenLength) {
  ------------------
  |  Branch (1125:21): [True: 629k, False: 424]
  ------------------
 1126|   629k|                    if (ch == '\\' && !pp->disableEscapeSequences) {
  ------------------
  |  Branch (1126:25): [True: 1.02k, False: 627k]
  |  Branch (1126:39): [True: 1.02k, False: 0]
  ------------------
 1127|  1.02k|                        int nextCh = getch();
 1128|  1.02k|                        switch (nextCh) {
 1129|      0|                        case '\'': ch = 0x27; break;
  ------------------
  |  Branch (1129:25): [True: 0, False: 1.02k]
  ------------------
 1130|      0|                        case '"':  ch = 0x22; break;
  ------------------
  |  Branch (1130:25): [True: 0, False: 1.02k]
  ------------------
 1131|      0|                        case '?':  ch = 0x3f; break;
  ------------------
  |  Branch (1131:25): [True: 0, False: 1.02k]
  ------------------
 1132|  1.02k|                        case '\\': ch = 0x5c; break;
  ------------------
  |  Branch (1132:25): [True: 1.02k, False: 0]
  ------------------
 1133|      0|                        case 'a':  ch = 0x07; break;
  ------------------
  |  Branch (1133:25): [True: 0, False: 1.02k]
  ------------------
 1134|      0|                        case 'b':  ch = 0x08; break;
  ------------------
  |  Branch (1134:25): [True: 0, False: 1.02k]
  ------------------
 1135|      0|                        case 'f':  ch = 0x0c; break;
  ------------------
  |  Branch (1135:25): [True: 0, False: 1.02k]
  ------------------
 1136|      0|                        case 'n':  ch = 0x0a; break;
  ------------------
  |  Branch (1136:25): [True: 0, False: 1.02k]
  ------------------
 1137|      0|                        case 'r':  ch = 0x0d; break;
  ------------------
  |  Branch (1137:25): [True: 0, False: 1.02k]
  ------------------
 1138|      0|                        case 't':  ch = 0x09; break;
  ------------------
  |  Branch (1138:25): [True: 0, False: 1.02k]
  ------------------
 1139|      0|                        case 'v':  ch = 0x0b; break;
  ------------------
  |  Branch (1139:25): [True: 0, False: 1.02k]
  ------------------
 1140|      0|                        case 'x': 
  ------------------
  |  Branch (1140:25): [True: 0, False: 1.02k]
  ------------------
 1141|       |                            // Hex value, arbitrary number of characters. Terminated by the first
 1142|       |                            // non-hex digit
 1143|      0|                            {
 1144|      0|                                int numDigits = 0;
 1145|      0|                                ch = 0;
 1146|      0|                                while (true) {
  ------------------
  |  Branch (1146:40): [True: 0, Folded]
  ------------------
 1147|      0|                                    nextCh = getch();
 1148|      0|                                    if (nextCh >= '0' && nextCh <= '9')
  ------------------
  |  Branch (1148:41): [True: 0, False: 0]
  |  Branch (1148:58): [True: 0, False: 0]
  ------------------
 1149|      0|                                        nextCh -= '0';
 1150|      0|                                    else if (nextCh >= 'A' && nextCh <= 'F')
  ------------------
  |  Branch (1150:46): [True: 0, False: 0]
  |  Branch (1150:63): [True: 0, False: 0]
  ------------------
 1151|      0|                                        nextCh -= 'A' - 10;
 1152|      0|                                    else if (nextCh >= 'a' && nextCh <= 'f')
  ------------------
  |  Branch (1152:46): [True: 0, False: 0]
  |  Branch (1152:63): [True: 0, False: 0]
  ------------------
 1153|      0|                                        nextCh -= 'a' - 10;
 1154|      0|                                    else {
 1155|      0|                                        ungetch();
 1156|      0|                                        break;
 1157|      0|                                    }
 1158|      0|                                    numDigits++;
 1159|      0|                                    ch = ch * 0x10 + nextCh;
 1160|      0|                                }
 1161|      0|                                if (numDigits == 0) {
  ------------------
  |  Branch (1161:37): [True: 0, False: 0]
  ------------------
 1162|      0|                                    pp->parseContext.ppError(ppToken->loc, "Expected hex value in escape sequence", "string", "");
 1163|      0|                                }
 1164|      0|                                break;
 1165|      0|                            }
 1166|      0|                        case '0':
  ------------------
  |  Branch (1166:25): [True: 0, False: 1.02k]
  ------------------
 1167|      0|                        case '1':
  ------------------
  |  Branch (1167:25): [True: 0, False: 1.02k]
  ------------------
 1168|      0|                        case '2':
  ------------------
  |  Branch (1168:25): [True: 0, False: 1.02k]
  ------------------
 1169|      0|                        case '3':
  ------------------
  |  Branch (1169:25): [True: 0, False: 1.02k]
  ------------------
 1170|      0|                        case '4':
  ------------------
  |  Branch (1170:25): [True: 0, False: 1.02k]
  ------------------
 1171|      0|                        case '5':
  ------------------
  |  Branch (1171:25): [True: 0, False: 1.02k]
  ------------------
 1172|      0|                        case '6':
  ------------------
  |  Branch (1172:25): [True: 0, False: 1.02k]
  ------------------
 1173|      0|                        case '7':
  ------------------
  |  Branch (1173:25): [True: 0, False: 1.02k]
  ------------------
 1174|       |                            // Octal value, up to three octal digits
 1175|      0|                            {
 1176|      0|                                int numDigits = 1;
 1177|      0|                                ch = nextCh - '0';
 1178|      0|                                while (numDigits < 3) {
  ------------------
  |  Branch (1178:40): [True: 0, False: 0]
  ------------------
 1179|      0|                                    nextCh = getch();
 1180|      0|                                    if (nextCh >= '0' && nextCh <= '7')
  ------------------
  |  Branch (1180:41): [True: 0, False: 0]
  |  Branch (1180:58): [True: 0, False: 0]
  ------------------
 1181|      0|                                        nextCh -= '0';
 1182|      0|                                    else {
 1183|      0|                                        ungetch();
 1184|      0|                                        break;
 1185|      0|                                    }
 1186|      0|                                    numDigits++;
 1187|      0|                                    ch = ch * 8 + nextCh;
 1188|      0|                                }
 1189|      0|                                break;
 1190|      0|                            }
 1191|      0|                        default:
  ------------------
  |  Branch (1191:25): [True: 0, False: 1.02k]
  ------------------
 1192|      0|                            pp->parseContext.ppError(ppToken->loc, "Invalid escape sequence", "string", "");
 1193|      0|                            break;
 1194|  1.02k|                        }
 1195|  1.02k|                    }
 1196|   629k|                    ppToken->name[len] = (char)ch;
 1197|   629k|                    len++;
 1198|   629k|                    ch = getch();
 1199|   629k|                } else
 1200|    424|                    break;
 1201|   629k|            };
 1202|   121k|            ppToken->name[len] = '\0';
 1203|   121k|            if (ch != '"') {
  ------------------
  |  Branch (1203:17): [True: 1.87k, False: 119k]
  ------------------
 1204|  1.87k|                ungetch();
 1205|  1.87k|                pp->parseContext.ppError(ppToken->loc, "End of line in string", "string", "");
 1206|  1.87k|            }
 1207|   121k|            return PpAtomConstString;
 1208|  1.35M|        case ':':
  ------------------
  |  Branch (1208:9): [True: 1.35M, False: 43.2M]
  ------------------
 1209|  1.35M|            ch = getch();
 1210|  1.35M|            if (ch == ':')
  ------------------
  |  Branch (1210:17): [True: 1.95k, False: 1.35M]
  ------------------
 1211|  1.95k|                return PpAtomColonColon;
 1212|  1.35M|            ungetch();
 1213|  1.35M|            return ':';
 1214|  44.5M|        }
 1215|       |
 1216|      3|        ch = getch();
 1217|      3|    }
 1218|  44.5M|}
_ZN7glslang10TPpContext8tokenizeERNS_8TPpTokenE:
 1227|  30.0M|{
 1228|  30.0M|    int stringifyDepth = 0;
 1229|  30.0M|    TPpToken stringifiedToken; // Tokens are appended to this as they come in
 1230|  43.7M|    for (;;) {
 1231|  43.7M|        int token = scanToken(&ppToken);
 1232|       |
 1233|       |        // Handle token-pasting logic
 1234|  43.7M|        token = tokenPaste(token, ppToken);
 1235|       |
 1236|  43.7M|        if (token == EndOfInput) {
  ------------------
  |  Branch (1236:13): [True: 727, False: 43.7M]
  ------------------
 1237|    727|            missingEndifCheck();
 1238|    727|            return EndOfInput;
 1239|    727|        }
 1240|  43.7M|        if (token == '#') {
  ------------------
  |  Branch (1240:13): [True: 194k, False: 43.5M]
  ------------------
 1241|   194k|            if (previous_token == '\n') {
  ------------------
  |  Branch (1241:17): [True: 194k, False: 8]
  ------------------
 1242|   194k|                token = readCPPline(&ppToken);
 1243|   194k|                if (token == EndOfInput) {
  ------------------
  |  Branch (1243:21): [True: 5, False: 194k]
  ------------------
 1244|      5|                    missingEndifCheck();
 1245|      5|                    return EndOfInput;
 1246|      5|                }
 1247|   194k|                continue;
 1248|   194k|            } else {
 1249|      8|                parseContext.ppError(ppToken.loc, "preprocessor directive cannot be preceded by another token", "#", "");
 1250|      8|                return EndOfInput;
 1251|      8|            }
 1252|   194k|        }
 1253|  43.5M|        previous_token = token;
 1254|       |
 1255|  43.5M|        if (token == '\n')
  ------------------
  |  Branch (1255:13): [True: 13.2M, False: 30.2M]
  ------------------
 1256|  13.2M|            continue;
 1257|       |
 1258|  30.2M|        if (token == tStringifyLevelInput::PUSH) {
  ------------------
  |  Branch (1258:13): [True: 0, False: 30.2M]
  ------------------
 1259|      0|            stringifyDepth++;
 1260|      0|            continue;
 1261|      0|        }
 1262|  30.2M|        if (token == tStringifyLevelInput::POP) {
  ------------------
  |  Branch (1262:13): [True: 0, False: 30.2M]
  ------------------
 1263|      0|            assert(stringifyDepth > 0);
 1264|      0|            stringifyDepth--;
 1265|      0|            if (stringifyDepth == 0) {
  ------------------
  |  Branch (1265:17): [True: 0, False: 0]
  ------------------
 1266|      0|                snprintf(ppToken.name, sizeof(ppToken.name), "%s", stringifiedToken.name);
 1267|      0|                return PpAtomConstString;
 1268|      0|            }
 1269|      0|            continue;
 1270|      0|        }
 1271|       |
 1272|       |        // expand macros
 1273|  30.2M|        if (token == PpAtomIdentifier) {
  ------------------
  |  Branch (1273:13): [True: 4.28M, False: 25.9M]
  ------------------
 1274|  4.28M|            switch (MacroExpand(&ppToken, false, true)) {
  ------------------
  |  Branch (1274:21): [True: 4.28M, False: 0]
  ------------------
 1275|  4.28M|            case MacroExpandNotStarted:
  ------------------
  |  Branch (1275:13): [True: 4.28M, False: 114]
  ------------------
 1276|  4.28M|                break;
 1277|      0|            case MacroExpandError:
  ------------------
  |  Branch (1277:13): [True: 0, False: 4.28M]
  ------------------
 1278|      0|                return EndOfInput;
 1279|    114|            case MacroExpandStarted:
  ------------------
  |  Branch (1279:13): [True: 114, False: 4.28M]
  ------------------
 1280|    114|            case MacroExpandUndef:
  ------------------
  |  Branch (1280:13): [True: 0, False: 4.28M]
  ------------------
 1281|    114|                continue;
 1282|  4.28M|            }
 1283|  4.28M|        }
 1284|       |
 1285|  30.2M|        bool needStringSupport = ifdepth == 0 && (token == PpAtomConstString || stringifyDepth > 0);
  ------------------
  |  Branch (1285:34): [True: 30.0M, False: 191k]
  |  Branch (1285:51): [True: 121k, False: 29.9M]
  |  Branch (1285:81): [True: 0, False: 29.9M]
  ------------------
 1286|  30.2M|        if (needStringSupport && parseContext.intermediate.getSource() != EShSourceHlsl) {
  ------------------
  |  Branch (1286:13): [True: 121k, False: 30.1M]
  |  Branch (1286:34): [True: 36.6k, False: 84.5k]
  ------------------
 1287|       |            // HLSL allows string literals.
 1288|       |            // GLSL allows string literals with GL_EXT_debug_printf.
 1289|  36.6k|            const char* const string_literal_EXTs[] = { E_GL_EXT_debug_printf, E_GL_EXT_spirv_intrinsics, E_GL_EXT_abort };
 1290|  36.6k|            parseContext.requireExtensions(ppToken.loc, 3, string_literal_EXTs, "string literal");
 1291|  36.6k|            if (!parseContext.extensionTurnedOn(E_GL_EXT_debug_printf) &&
  ------------------
  |  Branch (1291:17): [True: 36.6k, False: 0]
  ------------------
 1292|  36.6k|                !parseContext.extensionTurnedOn(E_GL_EXT_spirv_intrinsics)&&
  ------------------
  |  Branch (1292:17): [True: 36.6k, False: 0]
  ------------------
 1293|  36.6k|                !parseContext.extensionTurnedOn(E_GL_EXT_abort)) {
  ------------------
  |  Branch (1293:17): [True: 36.6k, False: 0]
  ------------------
 1294|  36.6k|                continue;
 1295|  36.6k|            }
 1296|  36.6k|        }
 1297|       |
 1298|  30.2M|        switch (token) {
 1299|  84.5k|        case PpAtomConstString:
  ------------------
  |  Branch (1299:9): [True: 84.5k, False: 30.1M]
  ------------------
 1300|  84.5k|            break;
 1301|  4.28M|        case PpAtomIdentifier:
  ------------------
  |  Branch (1301:9): [True: 4.28M, False: 25.9M]
  ------------------
 1302|  5.36M|        case PpAtomConstInt:
  ------------------
  |  Branch (1302:9): [True: 1.07M, False: 29.1M]
  ------------------
 1303|  5.36M|        case PpAtomConstUint:
  ------------------
  |  Branch (1303:9): [True: 5.85k, False: 30.2M]
  ------------------
 1304|  5.40M|        case PpAtomConstFloat:
  ------------------
  |  Branch (1304:9): [True: 36.4k, False: 30.1M]
  ------------------
 1305|  5.40M|        case PpAtomConstInt64:
  ------------------
  |  Branch (1305:9): [True: 136, False: 30.2M]
  ------------------
 1306|  5.40M|        case PpAtomConstUint64:
  ------------------
  |  Branch (1306:9): [True: 17, False: 30.2M]
  ------------------
 1307|  5.40M|        case PpAtomConstInt16:
  ------------------
  |  Branch (1307:9): [True: 1.17k, False: 30.2M]
  ------------------
 1308|  5.40M|        case PpAtomConstUint16:
  ------------------
  |  Branch (1308:9): [True: 24, False: 30.2M]
  ------------------
 1309|  5.40M|        case PpAtomConstDouble:
  ------------------
  |  Branch (1309:9): [True: 6, False: 30.2M]
  ------------------
 1310|  5.40M|        case PpAtomConstFloat16:
  ------------------
  |  Branch (1310:9): [True: 224, False: 30.2M]
  ------------------
 1311|  5.40M|            if (ppToken.name[0] == '\0')
  ------------------
  |  Branch (1311:17): [True: 152k, False: 5.25M]
  ------------------
 1312|   152k|                continue;
 1313|  5.25M|            break;
 1314|  5.25M|        case '\'':
  ------------------
  |  Branch (1314:9): [True: 9.66k, False: 30.2M]
  ------------------
 1315|  9.66k|            parseContext.ppError(ppToken.loc, "character literals not supported", "\'", "");
 1316|  9.66k|            continue;
 1317|  24.7M|        default:
  ------------------
  |  Branch (1317:9): [True: 24.7M, False: 5.50M]
  ------------------
 1318|  24.7M|            snprintf(ppToken.name, sizeof(ppToken.name), "%s", atomStrings.getString(token));
 1319|  24.7M|            break;
 1320|  30.2M|        }
 1321|  30.0M|        if (stringifyDepth > 0) {
  ------------------
  |  Branch (1321:13): [True: 0, False: 30.0M]
  ------------------
 1322|      0|            size_t existingLen = strlen(stringifiedToken.name);
 1323|      0|            char* dst = stringifiedToken.name + existingLen;
 1324|       |            // stringify_depth would determine how many layers of \\\"\\\" are needed, if we wanted to.
 1325|      0|            if (ppToken.space) {
  ------------------
  |  Branch (1325:17): [True: 0, False: 0]
  ------------------
 1326|      0|                snprintf(dst, sizeof(stringifiedToken.name) - existingLen - 1, " %s", ppToken.name);
 1327|      0|            } else {
 1328|      0|                snprintf(dst, sizeof(stringifiedToken.name) - existingLen, "%s", ppToken.name);
 1329|      0|            }
 1330|      0|            continue;
 1331|      0|        }
 1332|       |
 1333|  30.0M|        return token;
 1334|  30.0M|    }
 1335|  30.0M|}
_ZN7glslang10TPpContext10tokenPasteEiRNS_8TPpTokenE:
 1343|  43.7M|{
 1344|       |    // starting with ## is illegal, skip to next token
 1345|  43.7M|    if (token == PpAtomPaste) {
  ------------------
  |  Branch (1345:9): [True: 0, False: 43.7M]
  ------------------
 1346|      0|        parseContext.ppError(ppToken.loc, "unexpected location", "##", "");
 1347|      0|        return scanToken(&ppToken);
 1348|      0|    }
 1349|       |
 1350|  43.7M|    int resultToken = token; // "foo" pasted with "35" is an identifier, not a number
 1351|       |
 1352|       |    // ## can be chained, process all in the chain at once
 1353|  43.7M|    while (peekPasting()) {
  ------------------
  |  Branch (1353:12): [True: 0, False: 43.7M]
  ------------------
 1354|      0|        TPpToken pastedPpToken;
 1355|       |
 1356|       |        // next token has to be ##
 1357|      0|        token = scanToken(&pastedPpToken);
 1358|      0|        assert(token == PpAtomPaste);
 1359|       |
 1360|       |        // This covers end of macro expansion
 1361|      0|        if (endOfReplacementList()) {
  ------------------
  |  Branch (1361:13): [True: 0, False: 0]
  ------------------
 1362|       |            // this should be unreachable, incomplete #/## sequences are caught at macro parsing time.
 1363|      0|            parseContext.ppError(ppToken.loc, "unexpected location; end of replacement list", "##", "");
 1364|      0|            break;
 1365|      0|        }
 1366|       |
 1367|       |        // Get the token(s) after the ##.
 1368|       |        // Because of "space" semantics, and prior tokenization, what
 1369|       |        // appeared a single token, e.g. "3A", might have been tokenized
 1370|       |        // into two tokens "3" and "A", but the "A" will have 'space' set to
 1371|       |        // false.  Accumulate all of these to recreate the original lexical
 1372|       |        // appearing token.
 1373|      0|        do {
 1374|      0|            token = scanToken(&pastedPpToken);
 1375|       |
 1376|       |            // This covers end of argument expansion
 1377|      0|            if (token == tMarkerInput::marker) {
  ------------------
  |  Branch (1377:17): [True: 0, False: 0]
  ------------------
 1378|      0|                parseContext.ppError(ppToken.loc, "unexpected location; end of argument", "##", "");
 1379|      0|                return resultToken;
 1380|      0|            }
 1381|       |
 1382|       |            // get the token text
 1383|      0|            switch (resultToken) {
 1384|      0|            case PpAtomIdentifier:
  ------------------
  |  Branch (1384:13): [True: 0, False: 0]
  ------------------
 1385|       |                // already have the correct text in token.names
 1386|      0|                break;
 1387|      0|            case '=':
  ------------------
  |  Branch (1387:13): [True: 0, False: 0]
  ------------------
 1388|      0|            case '!':
  ------------------
  |  Branch (1388:13): [True: 0, False: 0]
  ------------------
 1389|      0|            case '-':
  ------------------
  |  Branch (1389:13): [True: 0, False: 0]
  ------------------
 1390|      0|            case '~':
  ------------------
  |  Branch (1390:13): [True: 0, False: 0]
  ------------------
 1391|      0|            case '+':
  ------------------
  |  Branch (1391:13): [True: 0, False: 0]
  ------------------
 1392|      0|            case '*':
  ------------------
  |  Branch (1392:13): [True: 0, False: 0]
  ------------------
 1393|      0|            case '/':
  ------------------
  |  Branch (1393:13): [True: 0, False: 0]
  ------------------
 1394|      0|            case '%':
  ------------------
  |  Branch (1394:13): [True: 0, False: 0]
  ------------------
 1395|      0|            case '<':
  ------------------
  |  Branch (1395:13): [True: 0, False: 0]
  ------------------
 1396|      0|            case '>':
  ------------------
  |  Branch (1396:13): [True: 0, False: 0]
  ------------------
 1397|      0|            case '|':
  ------------------
  |  Branch (1397:13): [True: 0, False: 0]
  ------------------
 1398|      0|            case '^':
  ------------------
  |  Branch (1398:13): [True: 0, False: 0]
  ------------------
 1399|      0|            case '&':
  ------------------
  |  Branch (1399:13): [True: 0, False: 0]
  ------------------
 1400|      0|            case PpAtomRight:
  ------------------
  |  Branch (1400:13): [True: 0, False: 0]
  ------------------
 1401|      0|            case PpAtomLeft:
  ------------------
  |  Branch (1401:13): [True: 0, False: 0]
  ------------------
 1402|      0|            case PpAtomAnd:
  ------------------
  |  Branch (1402:13): [True: 0, False: 0]
  ------------------
 1403|      0|            case PpAtomOr:
  ------------------
  |  Branch (1403:13): [True: 0, False: 0]
  ------------------
 1404|      0|            case PpAtomXor:
  ------------------
  |  Branch (1404:13): [True: 0, False: 0]
  ------------------
 1405|      0|                snprintf(ppToken.name, sizeof(ppToken.name), "%s", atomStrings.getString(resultToken));
 1406|      0|                snprintf(pastedPpToken.name, sizeof(pastedPpToken.name), "%s", atomStrings.getString(token));
 1407|      0|                break;
 1408|      0|            default:
  ------------------
  |  Branch (1408:13): [True: 0, False: 0]
  ------------------
 1409|      0|                parseContext.ppError(ppToken.loc, "not supported for these tokens", "##", "");
 1410|      0|                return resultToken;
 1411|      0|            }
 1412|       |
 1413|       |            // combine the tokens
 1414|      0|            if (strlen(ppToken.name) + strlen(pastedPpToken.name) > MaxTokenLength) {
  ------------------
  |  Branch (1414:17): [True: 0, False: 0]
  ------------------
 1415|      0|                parseContext.ppError(ppToken.loc, "combined tokens are too long", "##", "");
 1416|      0|                return resultToken;
 1417|      0|            }
 1418|      0|            snprintf(&ppToken.name[0] + strlen(ppToken.name), sizeof(ppToken.name) - strlen(ppToken.name),
 1419|      0|                "%s", pastedPpToken.name);
 1420|       |
 1421|       |            // correct the kind of token we are making, if needed (identifiers stay identifiers)
 1422|      0|            if (resultToken != PpAtomIdentifier) {
  ------------------
  |  Branch (1422:17): [True: 0, False: 0]
  ------------------
 1423|      0|                int newToken = atomStrings.getAtom(ppToken.name);
 1424|      0|                if (newToken > 0)
  ------------------
  |  Branch (1424:21): [True: 0, False: 0]
  ------------------
 1425|      0|                    resultToken = newToken;
 1426|      0|                else
 1427|      0|                    parseContext.ppError(ppToken.loc, "combined token is invalid", "##", "");
 1428|      0|            }
 1429|      0|        } while (peekContinuedPasting(resultToken));
  ------------------
  |  Branch (1429:18): [True: 0, False: 0]
  ------------------
 1430|      0|    }
 1431|       |
 1432|  43.7M|    return resultToken;
 1433|  43.7M|}
_ZN7glslang10TPpContext17missingEndifCheckEv:
 1437|    732|{
 1438|    732|    if (ifdepth > 0)
  ------------------
  |  Branch (1438:9): [True: 8, False: 724]
  ------------------
 1439|      8|        parseContext.ppError(parseContext.getCurrentLoc(), "missing #endif", "", "");
 1440|    732|}
PpScanner.cpp:_ZZN7glslang10TPpContext11lFloatConstEiiPNS_8TPpTokenEENK3$_0clEi:
  114|  1.47M|    const auto saveName = [&](int ch) {
  115|  1.47M|        if (len <= MaxTokenLength)
  ------------------
  |  Branch (115:13): [True: 164k, False: 1.31M]
  ------------------
  116|   164k|            ppToken->name[len++] = static_cast<char>(ch);
  117|  1.47M|    };
PpScanner.cpp:_ZZN7glslang10TPpContext12tStringInput4scanEPNS_8TPpTokenEENK3$_0clEi:
  465|   995k|    const auto floatingPointChar = [&](int ch) { return ch == '.' || ch == 'e' || ch == 'E' ||
  ------------------
  |  Branch (465:57): [True: 7.28k, False: 988k]
  |  Branch (465:70): [True: 726, False: 987k]
  |  Branch (465:83): [True: 17.8k, False: 969k]
  ------------------
  466|   969k|                                                                     ch == 'f' || ch == 'F' ||
  ------------------
  |  Branch (466:70): [True: 210, False: 969k]
  |  Branch (466:83): [True: 558, False: 969k]
  ------------------
  467|   969k|                                                                     ch == 'h' || ch == 'H'; };
  ------------------
  |  Branch (467:70): [True: 1.25k, False: 967k]
  |  Branch (467:83): [True: 224, False: 967k]
  ------------------

_ZN7glslang10TPpContext11TokenStream8putTokenEiPNS_8TPpTokenE:
  102|  38.6k|{
  103|  38.6k|    TokenStream::Token streamToken(atom, *ppToken);
  104|  38.6k|    stream.push_back(streamToken);
  105|  38.6k|}
_ZN7glslang10TPpContext11TokenStream8getTokenERNS_17TParseContextBaseEPNS_8TPpTokenE:
  109|  4.08k|{
  110|  4.08k|    if (atEnd())
  ------------------
  |  Branch (110:9): [True: 445, False: 3.63k]
  ------------------
  111|    445|        return EndOfInput;
  112|       |
  113|  3.63k|    int atom = stream[currentPos++].get(*ppToken);
  114|  3.63k|    ppToken->loc = parseContext.getCurrentLoc();
  115|       |
  116|  3.63k|    return atom;
  117|  4.08k|}
_ZN7glslang10TPpContext11TokenStream20peekTokenizedPastingEb:
  125|  3.60k|{
  126|       |    // 1. preceding ##?
  127|       |
  128|  3.60k|    size_t savePos = currentPos;
  129|       |    // skip white space
  130|  3.60k|    while (peekToken(' '))
  ------------------
  |  Branch (130:12): [True: 0, False: 3.60k]
  ------------------
  131|      0|        ++currentPos;
  132|  3.60k|    if (peekToken(PpAtomPaste)) {
  ------------------
  |  Branch (132:9): [True: 0, False: 3.60k]
  ------------------
  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|  3.60k|    if (! lastTokenPastes) {
  ------------------
  |  Branch (139:9): [True: 3.60k, False: 0]
  ------------------
  140|  3.60k|        currentPos = savePos;
  141|  3.60k|        return false;
  142|  3.60k|    }
  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|  3.60k|}
_ZN7glslang10TPpContext20pushTokenStreamInputERNS0_11TokenStreamEbb:
  163|    301|{
  164|    301|    pushInput(new tTokenInput(this, &ts, prepasting, expanded));
  165|    301|    ts.reset();
  166|    301|}
_ZN7glslang10TPpContext16tUngotTokenInput4scanEPNS_8TPpTokenE:
  169|      4|{
  170|      4|    if (done)
  ------------------
  |  Branch (170:9): [True: 2, False: 2]
  ------------------
  171|      2|        return EndOfInput;
  172|       |
  173|      2|    int ret = token;
  174|      2|    *ppToken = lval;
  175|      2|    done = true;
  176|       |
  177|      2|    return ret;
  178|      4|}
_ZN7glslang10TPpContext10UngetTokenEiPNS_8TPpTokenE:
  181|      2|{
  182|      2|    pushInput(new tUngotTokenInput(this, token, ppToken));
  183|      2|}

Initialize.cpp:_ZN4spanIKN7glslang12_GLOBAL__N_110VersioningEEC2Ev:
   50|     90|    span() = default;
Initialize.cpp:_ZNK4spanIKN7glslang12_GLOBAL__N_115BuiltInFunctionEE5beginEv:
   58|    208|    const_iterator begin() const { return data_; }
Initialize.cpp:_ZNK4spanIKN7glslang12_GLOBAL__N_115BuiltInFunctionEE3endEv:
   61|    208|    const_iterator end() const { return data_ + count_; }
Initialize.cpp:_ZNK4spanIKN7glslang12_GLOBAL__N_110VersioningEE5emptyEv:
   73|  8.14k|    bool empty() const { return count_ == 0; }
Initialize.cpp:_ZNK4spanIKN7glslang12_GLOBAL__N_110VersioningEE5beginEv:
   58|  3.36k|    const_iterator begin() const { return data_; }
Initialize.cpp:_ZNK4spanIKN7glslang12_GLOBAL__N_110VersioningEE3endEv:
   61|  3.36k|    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|     99|    span(Container &c) : data_(c.data()), count_(c.size()) {}
Initialize.cpp:_ZN4spanIKN7glslang12_GLOBAL__N_115BuiltInFunctionEEC2IKNSt3__15arrayIS2_Lm3EEEEERT_:
   55|    109|    span(Container &c) : data_(c.data()), count_(c.size()) {}

_ZN7glslang7TShader8IncluderD2Ev:
  662|    200|        virtual ~Includer() {}
_ZN7glslang7TShader11setPreambleEPKc:
  478|    220|    void setPreamble(const char* s) { preamble = s; }
_ZN7glslang7TShader12setEnvClientENS_9EShClientENS_22EShTargetClientVersionE:
  563|    220|    {
  564|    220|        environment.client.client = client;
  565|    220|        environment.client.version = version;
  566|    220|    }
_ZN7glslang7TShader12setEnvTargetENS_17EShTargetLanguageENS_24EShTargetLanguageVersionE:
  568|     65|    {
  569|     65|        environment.target.language = lang;
  570|     65|        environment.target.version = version;
  571|     65|    }
_ZN7glslang7TShader30setEnvTargetHlslFunctionality1Ev:
  576|    109|    void setEnvTargetHlslFunctionality1() { environment.target.hlslFunctionality1 = true; }  // deprecated, see issue #4210

_ZN8spvtools3optorENS0_9IRContext8AnalysisES2_:
  986|      2|                                     IRContext::Analysis rhs) {
  987|      2|  return static_cast<IRContext::Analysis>(static_cast<int>(lhs) |
  988|      2|                                          static_cast<int>(rhs));
  989|      2|}

LLVMFuzzerTestOneInput:
   87|    125|extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   88|    125|  FuzzedDataProvider fdp(data, size);
   89|       |
   90|       |  // Prepare GLSL shader content with valid version
   91|    125|  shaderc_shader_kind kind = fdp.PickValueInArray(KindArray);
   92|       |
   93|       |  // Prepare Compiler and options
   94|    125|  shaderc::Compiler compiler;
   95|    125|  shaderc::CompileOptions options;
   96|    125|  options.SetOptimizationLevel(fdp.PickValueInArray(OptArray));
   97|       |
   98|    125|  options.SetHlslFunctionality1(fdp.ConsumeBool());
   99|    125|  options.SetHlsl16BitTypes(fdp.ConsumeBool());
  100|    125|  options.SetInvertY(fdp.ConsumeBool());
  101|    125|  options.SetNanClamp(fdp.ConsumeBool());
  102|    125|  options.SetPreserveBindings(fdp.ConsumeBool());
  103|    125|  options.SetAutoMapLocations(fdp.ConsumeBool());
  104|    125|  options.SetHlslOffsets(fdp.ConsumeBool());
  105|    125|  options.SetAutoBindUniforms(fdp.ConsumeBool());
  106|    125|  options.SetSourceLanguage(fdp.PickValueInArray(LangArray));
  107|       |
  108|       |  // Get the actual content
  109|    125|  std::string shader_content = fdp.ConsumeRandomLengthString();
  110|       |
  111|       |  // Preprocessing
  112|    125|  shaderc::PreprocessedSourceCompilationResult preprocess_result =
  113|    125|      compiler.PreprocessGlsl(shader_content, kind, "input.glsl", options);
  114|    125|  if (preprocess_result.GetCompilationStatus() ==
  ------------------
  |  Branch (114:7): [True: 25, False: 100]
  ------------------
  115|    125|      shaderc_compilation_status_success) {
  116|     25|    std::string preprocessed_code(preprocess_result.cbegin(),
  117|     25|                                  preprocess_result.cend());
  118|    100|  } else {
  119|    100|    return 0;
  120|    100|  }
  121|       |
  122|       |  // Compile to SPIR-V binary
  123|     25|  shaderc::SpvCompilationResult binary_result =
  124|     25|      compiler.CompileGlslToSpv(shader_content, kind, "input.glsl", options);
  125|     25|  if (binary_result.GetCompilationStatus() ==
  ------------------
  |  Branch (125:7): [True: 0, False: 25]
  ------------------
  126|     25|      shaderc_compilation_status_success) {
  127|      0|    std::vector<uint32_t> spirv_binary(binary_result.cbegin(),
  128|      0|                                       binary_result.cend());
  129|      0|  }
  130|       |
  131|       |  // Compile to SPIR-V assembly
  132|     25|  shaderc::AssemblyCompilationResult assembly_result =
  133|     25|      compiler.CompileGlslToSpvAssembly(shader_content, kind, "input.glsl",
  134|     25|                                        options);
  135|     25|  if (assembly_result.GetCompilationStatus() ==
  ------------------
  |  Branch (135:7): [True: 0, False: 25]
  ------------------
  136|     25|      shaderc_compilation_status_success) {
  137|      0|    std::string spirv_assembly(assembly_result.cbegin(),
  138|      0|                               assembly_result.cend());
  139|      0|  }
  140|       |
  141|       |  // Compile with C API
  142|     25|  shaderc_compiler_t c_compiler = shaderc_compiler_initialize();
  143|     25|  shaderc_compilation_result_t c_result = shaderc_compile_into_spv(
  144|     25|      c_compiler, shader_content.c_str(), shader_content.size(), kind,
  145|     25|      "main.vert", "main", nullptr);
  146|       |
  147|     25|  if (shaderc_result_get_compilation_status(c_result) ==
  ------------------
  |  Branch (147:7): [True: 0, False: 25]
  ------------------
  148|     25|      shaderc_compilation_status_success) {
  149|      0|    std::vector<uint32_t> spirv_c_binary(shaderc_result_get_length(c_result) /
  150|      0|                                         sizeof(uint32_t));
  151|      0|    std::memcpy(spirv_c_binary.data(), shaderc_result_get_bytes(c_result),
  152|      0|                shaderc_result_get_length(c_result));
  153|      0|  }
  154|     25|  shaderc_result_release(c_result);
  155|     25|  shaderc_compiler_release(c_compiler);
  156|       |
  157|     25|  return 0;
  158|    125|}

