xref: /llvm-project/llvm/utils/vim/syntax/llvm.vim (revision 2e56497bf7b2c848b2c43ce8c64e585bc006240a)
1" Vim syntax file
2" Language:   llvm
3" Maintainer: The LLVM team, http://llvm.org/
4" Version:      $Revision$
5
6if version < 600
7  syntax clear
8elseif exists("b:current_syntax")
9  finish
10endif
11
12syn case match
13
14" Types.
15" Types also include struct, array, vector, etc. but these don't
16" benefit as much from having dedicated highlighting rules.
17syn keyword llvmType void half bfloat float double x86_fp80 fp128 ppc_fp128
18syn keyword llvmType label metadata x86_mmx x86_amx
19syn keyword llvmType type label opaque token ptr
20syn match   llvmType /\<i\d\+\>/
21
22" Instructions.
23" The true and false tokens can be used for comparison opcodes, but it's
24" much more common for these tokens to be used for boolean constants.
25syn keyword llvmStatement add addrspacecast alloca and arcp ashr atomicrmw
26syn keyword llvmStatement bitcast br catchpad catchswitch catchret call callbr
27syn keyword llvmStatement cleanuppad cleanupret cmpxchg eq exact extractelement
28syn keyword llvmStatement extractvalue fadd fast fcmp fdiv fence fmul fneg fpext
29syn keyword llvmStatement fptosi fptoui fptrunc free freeze frem fsub
30syn keyword llvmStatement getelementptr icmp inbounds indirectbr insertelement
31syn keyword llvmStatement insertvalue inttoptr invoke landingpad load lshr
32syn keyword llvmStatement malloc max min mul nand ne ninf nnan nsw nsz nuw oeq
33syn keyword llvmStatement oge ogt ole olt one or ord phi ptrtoint resume ret
34syn keyword llvmStatement sdiv select sext sge sgt shl shufflevector sitofp
35syn keyword llvmStatement sle slt srem store sub switch trunc udiv ueq uge ugt
36syn keyword llvmStatement uitofp ule ult umax umin une uno unreachable unwind
37syn keyword llvmStatement urem va_arg xchg xor zext
38
39" Debug records.
40syn match llvmStatement /\v#dbg_(assign|declare|label|value)/
41
42" Keywords.
43syn keyword llvmKeyword
44      \ acq_rel
45      \ acquire
46      \ addrspace
47      \ alias
48      \ align
49      \ alignstack
50      \ allocsize
51      \ alwaysinline
52      \ appending
53      \ argmemonly
54      \ arm_aapcs_vfpcc
55      \ arm_aapcscc
56      \ arm_apcscc
57      \ asm
58      \ atomic
59      \ available_externally
60      \ blockaddress
61      \ builtin
62      \ byref
63      \ byval
64      \ c
65      \ caller
66      \ catch
67      \ cc
68      \ ccc
69      \ cleanup
70      \ cold
71      \ coldcc
72      \ comdat
73      \ common
74      \ constant
75      \ convergent
76      \ datalayout
77      \ declare
78      \ default
79      \ define
80      \ deplibs
81      \ dereferenceable
82      \ dereferenceable_or_null
83      \ distinct
84      \ dllexport
85      \ dllimport
86      \ dso_local
87      \ dso_preemptable
88      \ except
89      \ extern_weak
90      \ external
91      \ externally_initialized
92      \ fastcc
93      \ filter
94      \ from
95      \ gc
96      \ global
97      \ hhvm_ccc
98      \ hhvmcc
99      \ hidden
100      \ hot
101      \ immarg
102      \ inaccessiblemem_or_argmemonly
103      \ inaccessiblememonly
104      \ inalloca
105      \ initialexec
106      \ inlinehint
107      \ inreg
108      \ intel_ocl_bicc
109      \ inteldialect
110      \ internal
111      \ jumptable
112      \ linkonce
113      \ linkonce_odr
114      \ local_unnamed_addr
115      \ localdynamic
116      \ localexec
117      \ minsize
118      \ module
119      \ monotonic
120      \ msp430_intrcc
121      \ mustprogress
122      \ musttail
123      \ naked
124      \ nest
125      \ noalias
126      \ nobuiltin
127      \ nocallback
128      \ nocapture
129      \ nocf_check
130      \ no_cfi
131      \ noduplicate
132      \ nofree
133      \ noimplicitfloat
134      \ noinline
135      \ nomerge
136      \ nonlazybind
137      \ nonnull
138      \ noprofile
139      \ norecurse
140      \ noredzone
141      \ noreturn
142      \ nosync
143      \ noundef
144      \ nounwind
145      \ nosanitize_bounds
146      \ nosanitize_coverage
147      \ null_pointer_is_valid
148      \ optdebug
149      \ optforfuzzing
150      \ optnone
151      \ optsize
152      \ personality
153      \ preallocated
154      \ private
155      \ protected
156      \ ptrauth
157      \ ptx_device
158      \ ptx_kernel
159      \ readnone
160      \ readonly
161      \ release
162      \ returned
163      \ returns_twice
164      \ safestack
165      \ sanitize_address
166      \ sanitize_hwaddress
167      \ sanitize_memory
168      \ sanitize_memtag
169      \ sanitize_thread
170      \ section
171      \ seq_cst
172      \ shadowcallstack
173      \ sideeffect
174      \ signext
175      \ source_filename
176      \ speculatable
177      \ speculative_load_hardening
178      \ spir_func
179      \ spir_kernel
180      \ splat
181      \ sret
182      \ ssp
183      \ sspreq
184      \ sspstrong
185      \ strictfp
186      \ swiftcc
187      \ swifterror
188      \ swifttailcc
189      \ swiftself
190      \ syncscope
191      \ tail
192      \ tailcc
193      \ target
194      \ thread_local
195      \ to
196      \ triple
197      \ unnamed_addr
198      \ unordered
199      \ uselistorder
200      \ uselistorder_bb
201      \ uwtable
202      \ volatile
203      \ weak
204      \ weak_odr
205      \ willreturn
206      \ win64cc
207      \ within
208      \ writeonly
209      \ x86_64_sysvcc
210      \ x86_fastcallcc
211      \ x86_stdcallcc
212      \ x86_thiscallcc
213      \ zeroext
214
215" Obsolete keywords.
216syn keyword llvmError  getresult begin end
217
218" Misc syntax.
219syn match   llvmNoName /[%@!]\d\+\>/
220syn match   llvmNumber /-\?\<\d\+\>/
221syn match   llvmFloat  /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
222syn match   llvmFloat  /\<0x[KLMHR]\?\x\+\>/
223syn keyword llvmBoolean true false
224syn keyword llvmConstant zeroinitializer undef null none poison vscale
225syn match   llvmComment /;.*$/
226syn region  llvmString start=/"/ skip=/\\"/ end=/"/
227syn match   llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/
228syn match   llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/
229
230" Named metadata and specialized metadata keywords.
231syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/
232syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/
233syn match   llvmType /!\zs\a\+\ze\s*(/
234syn match   llvmConstant /\<DW_TAG_[a-z_]\+\>/
235syn match   llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/
236syn match   llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/
237syn match   llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/
238syn match   llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/
239syn match   llvmConstant /\<DIFlag[A-Za-z]\+\>/
240
241" Syntax-highlight lit test commands and bug numbers.
242syn match  llvmSpecialComment /;\s*PR\d*\s*$/
243syn match  llvmSpecialComment /;\s*REQUIRES:.*$/
244syn match  llvmSpecialComment /;\s*RUN:.*$/
245syn match  llvmSpecialComment /;\s*ALLOW_RETRIES:.*$/
246syn match  llvmSpecialComment /;\s*CHECK:.*$/
247syn match  llvmSpecialComment /;\s*CHECK-EMPTY:\s*$/
248syn match  llvmSpecialComment /\v;\s*CHECK-(NEXT|NOT|DAG|SAME|LABEL|COUNT-\d+):.*$/
249syn match  llvmSpecialComment /;\s*XFAIL:.*$/
250
251if version >= 508 || !exists("did_c_syn_inits")
252  if version < 508
253    let did_c_syn_inits = 1
254    command -nargs=+ HiLink hi link <args>
255  else
256    command -nargs=+ HiLink hi def link <args>
257  endif
258
259  HiLink llvmType Type
260  HiLink llvmStatement Statement
261  HiLink llvmNumber Number
262  HiLink llvmComment Comment
263  HiLink llvmString String
264  HiLink llvmLabel Label
265  HiLink llvmKeyword Keyword
266  HiLink llvmBoolean Boolean
267  HiLink llvmFloat Float
268  HiLink llvmNoName Identifier
269  HiLink llvmConstant Constant
270  HiLink llvmSpecialComment SpecialComment
271  HiLink llvmError Error
272  HiLink llvmIdentifier Identifier
273
274  delcommand HiLink
275endif
276
277let b:current_syntax = "llvm"
278