| " Syntax highlighting rules for GIMPLE dump files (for Vim). | |
| " | |
| " Copyright (C) 2015-2025 Free Software Foundation, Inc. | |
| " | |
| " This script is free software; you can redistribute it and/or modify | |
| " it under the terms of the GNU General Public License as published by | |
| " the Free Software Foundation; either version 3, or (at your option) | |
| " any later version | |
| " | |
| " This Vim script highlights syntax in debug dumps containing GIMPLE | |
| " intermediate representation. Such dumps are produced by GCC when | |
| " it is invoked with -fdump-tree-* and/or -fdump-ipa-* switches. Tested | |
| " in Vim 7.4 (but should also work with earlier versions). | |
| " Do not continue, if syntax is already enabled in current buffer. | |
| if exists("b:current_syntax") | |
| finish | |
| endif | |
| " If this variable is set to true, "Unknown tree" in -fdump-tree-original will | |
| " be highlighted as an error. | |
| let s:unknown_tree_is_error=0 | |
| " Comments for Phi nodes, value ranges, use/def-chains, etc. | |
| syn match gimpleAnnotation "\v#.*$" | |
| \ contains=gimpleAnnotationOp, gimpleAnnotationMark, | |
| \ gimpleNumber, gimpleLineNo | |
| syn match gimpleAnnotationMark "#" contained | |
| syn keyword gimpleAnnotationOp PHI VUSE VDEF RANGE PT USE CLB | |
| \ ALIGN MISALIGN NONZERO contained | |
| " General-purpose comments. | |
| syn match gimpleComment ";;.*$" | |
| " Types - mostly borrowed from original Vim syntax file for C | |
| syn keyword gimpleType int long short char void | |
| \ signed unsigned float double | |
| \ size_t ssize_t off_t wchar_t ptrdiff_t sig_atomic_t fpos_t | |
| \ clock_t time_t va_list jmp_buf FILE DIR div_t ldiv_t | |
| \ mbstate_t wctrans_t wint_t wctype_t | |
| \ _Bool bool _Complex complex _Imaginary imaginary | |
| \ int8_t int16_t int32_t int64_t | |
| \ uint8_t uint16_t uint32_t uint64_t | |
| \ int_least8_t int_least16_t int_least32_t int_least64_t | |
| \ uint_least8_t uint_least16_t uint_least32_t uint_least64_t | |
| \ int_fast8_t int_fast16_t int_fast32_t int_fast64_t | |
| \ uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t | |
| \ intptr_t uintptr_t | |
| \ intmax_t uintmax_t | |
| \ __label__ __complex__ __volatile__ | |
| \ char16_t char32_t sizetype __vtbl_ptr_type | |
| " C/C++-like control structures | |
| syn keyword gimpleStatement goto return | |
| syn keyword gimpleConditional if else | |
| syn keyword gimpleLoop while | |
| syn keyword gimpleException try catch finally | |
| " Special 'values' | |
| syn match gimpleConstant "{CLOBBER}" | |
| syn match gimpleConstant "{ref-all}" | |
| syn match gimpleConstant "{v}" | |
| " Blocks | |
| syn region gimpleBlock start="{" end="}" transparent fold | |
| " String literals | |
| syn region gimpleString start=/\v"/ skip=/\v\\./ end=/\v"/ | |
| " GENERIC AST nodes | |
| syn keyword gimpleASTNode BIT_FIELD_REF TARGET_EXPR expr_stmt | |
| \ NON_LVALUE_EXPR | |
| \ must_not_throw_expr eh_spec_block eh_filter | |
| \ eh_must_not_throw aggr_init_expr cleanup_point | |
| if s:unknown_tree_is_error | |
| syn match gimpleUnknownTree "\vUnknown tree: \w+" | |
| end | |
| " Ignore probability of edges and basic blocks | |
| " <bb 2> [70.00%]: | |
| syn match gimpleFrequency " \[\d*\.\d*%\]" | |
| " Ignore basic block with a count | |
| " <bb 10> [local count: 118111601]: | |
| syn match gimpleBBCount "\v\[(local )?count: \d+\]" | |
| " Numbers | |
| syn match gimpleNumber "\v([^.a-zA-Z0-9_])\zs-?\d+B?" | |
| syn match gimpleFloat "\v\W\zs-?\d*\.\d+(e\+\d+)?" | |
| " Basic block label | |
| " <bb 123>: | |
| syn match gimpleLabel "\v^\s*\zs\<bb \d+\>" | |
| " <D.1234>: | |
| " <L1>: | |
| syn match gimpleLabel "\v^\s*\zs\<[DL]\.?\d+\>" | |
| " label: - user-defined label | |
| " bb1L.1: | |
| syn match gimpleLabel "\v^\s*[a-zA-Z0-9._]+\ze:\s*$" | |
| " Match label after goto to suppress highlighting of numbers inside | |
| syn match gimpleGotoLabel "\v<bb \d+\>[^:]" | |
| " Line numbers, generated with -fdump-tree-*-lineno | |
| syn match gimpleLineNo "\v\[[^\]]+:\d+:\d+\]" | |
| " DEBUG statements | |
| syn match gimpleDebug "\v# DEBUG.*" | |
| " GIMPLE predict statement | |
| syn match gimplePrediction "\v\/\/ predicted.*" | |
| " Misc C/C++-like keywords | |
| syn keyword gimpleStructure struct union enum typedef class | |
| syn keyword gimpleStorageClass static register auto volatile extern const | |
| \ template inline __attribute__ _Alignas alignas _Atomic | |
| \ _Thread_local thread_local _Alignof alignof sizeof | |
| hi def link gimpleType Type | |
| hi def link gimpleNumber Number | |
| hi def link gimpleFloat Float | |
| hi def link gimpleConstant Constant | |
| hi def link gimpleStructure Structure | |
| hi def link gimpleStorageClass StorageClass | |
| hi def link gimpleOperator Operator | |
| hi def link gimpleASTNode Operator | |
| hi def link gimpleStatement Statement | |
| hi def link gimpleConditional Conditional | |
| hi def link gimpleLoop Repeat | |
| hi def link gimpleException Exception | |
| hi def link gimpleComment Comment | |
| hi def link gimpleLineNo Comment | |
| hi def link gimpleLabel Label | |
| hi def link gimpleAnnotationOp Debug | |
| hi def link gimpleAnnotationMark Debug | |
| hi def link gimpleString String | |
| hi def link gimpleUnknownTree Error | |
| hi def link gimpleDebug Debug | |
| hi def link gimplePrediction Debug | |
| hi def link gimpleFrequency Debug | |
| hi def link gimpleBBCount Debug | |
| let b:current_syntax = "gimple" |