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
19syn keyword llvmType type label opaque token
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 fpext
29syn keyword llvmStatement fptosi fptoui fptrunc free frem fsub fneg getelementptr
30syn keyword llvmStatement icmp inbounds indirectbr insertelement insertvalue
31syn keyword llvmStatement inttoptr invoke landingpad load lshr malloc max min
32syn keyword llvmStatement mul nand ne ninf nnan nsw nsz nuw oeq oge ogt ole
33syn keyword llvmStatement olt one or ord phi ptrtoint resume ret sdiv select
34syn keyword llvmStatement sext sge sgt shl shufflevector sitofp sle slt srem
35syn keyword llvmStatement store sub switch trunc udiv ueq uge ugt uitofp ule ult
36syn keyword llvmStatement umax umin une uno unreachable unwind urem va_arg
37syn keyword llvmStatement xchg xor zext
38
39" Keywords.
40syn keyword llvmKeyword
41      \ acq_rel
42      \ acquire
43      \ addrspace
44      \ alias
45      \ align
46      \ alignstack
47      \ alwaysinline
48      \ appending
49      \ argmemonly
50      \ arm_aapcscc
51      \ arm_aapcs_vfpcc
52      \ arm_apcscc
53      \ asm
54      \ atomic
55      \ available_externally
56      \ blockaddress
57      \ builtin
58      \ byref
59      \ byval
60      \ c
61      \ catch
62      \ caller
63      \ cc
64      \ ccc
65      \ cleanup
66      \ coldcc
67      \ comdat
68      \ common
69      \ constant
70      \ datalayout
71      \ declare
72      \ default
73      \ define
74      \ deplibs
75      \ dereferenceable
76      \ distinct
77      \ dllexport
78      \ dllimport
79      \ dso_local
80      \ dso_preemptable
81      \ except
82      \ external
83      \ externally_initialized
84      \ extern_weak
85      \ fastcc
86      \ tailcc
87      \ filter
88      \ from
89      \ gc
90      \ global
91      \ hhvmcc
92      \ hhvm_ccc
93      \ hidden
94      \ immarg
95      \ initialexec
96      \ inlinehint
97      \ inreg
98      \ inteldialect
99      \ intel_ocl_bicc
100      \ internal
101      \ linkonce
102      \ linkonce_odr
103      \ localdynamic
104      \ localexec
105      \ local_unnamed_addr
106      \ minsize
107      \ module
108      \ monotonic
109      \ msp430_intrcc
110      \ mustprogress
111      \ musttail
112      \ naked
113      \ nest
114      \ noalias
115      \ nobuiltin
116      \ nocapture
117      \ noimplicitfloat
118      \ noinline
119      \ nonlazybind
120      \ nonnull
121      \ norecurse
122      \ noredzone
123      \ noreturn
124      \ noundef
125      \ nounwind
126      \ optnone
127      \ optsize
128      \ personality
129      \ private
130      \ protected
131      \ ptx_device
132      \ ptx_kernel
133      \ readnone
134      \ readonly
135      \ release
136      \ returned
137      \ returns_twice
138      \ sanitize_address
139      \ sanitize_memory
140      \ sanitize_thread
141      \ section
142      \ seq_cst
143      \ sideeffect
144      \ signext
145      \ syncscope
146      \ source_filename
147      \ speculatable
148      \ spir_func
149      \ spir_kernel
150      \ sret
151      \ ssp
152      \ sspreq
153      \ sspstrong
154      \ strictfp
155      \ swiftcc
156      \ swiftself
157      \ tail
158      \ target
159      \ thread_local
160      \ to
161      \ triple
162      \ unnamed_addr
163      \ unordered
164      \ uselistorder
165      \ uselistorder_bb
166      \ uwtable
167      \ volatile
168      \ weak
169      \ weak_odr
170      \ within
171      \ writeonly
172      \ x86_64_sysvcc
173      \ win64cc
174      \ x86_fastcallcc
175      \ x86_stdcallcc
176      \ x86_thiscallcc
177      \ zeroext
178
179" Obsolete keywords.
180syn keyword llvmError  getresult begin end
181
182" Misc syntax.
183syn match   llvmNoName /[%@!]\d\+\>/
184syn match   llvmNumber /-\?\<\d\+\>/
185syn match   llvmFloat  /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
186syn match   llvmFloat  /\<0x\x\+\>/
187syn keyword llvmBoolean true false
188syn keyword llvmConstant zeroinitializer undef null none
189syn match   llvmComment /;.*$/
190syn region  llvmString start=/"/ skip=/\\"/ end=/"/
191syn match   llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/
192syn match   llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/
193
194" Named metadata and specialized metadata keywords.
195syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/
196syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/
197syn match   llvmType /!\zs\a\+\ze\s*(/
198syn match   llvmConstant /\<DW_TAG_[a-z_]\+\>/
199syn match   llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/
200syn match   llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/
201syn match   llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/
202syn match   llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/
203syn match   llvmConstant /\<DIFlag[A-Za-z]\+\>/
204
205" Syntax-highlight lit test commands and bug numbers.
206syn match  llvmSpecialComment /;\s*PR\d*\s*$/
207syn match  llvmSpecialComment /;\s*REQUIRES:.*$/
208syn match  llvmSpecialComment /;\s*RUN:.*$/
209syn match  llvmSpecialComment /;\s*ALLOW_RETRIES:.*$/
210syn match  llvmSpecialComment /;\s*CHECK:.*$/
211syn match  llvmSpecialComment "\v;\s*CHECK-(NEXT|NOT|DAG|SAME|LABEL):.*$"
212syn match  llvmSpecialComment /;\s*XFAIL:.*$/
213
214if version >= 508 || !exists("did_c_syn_inits")
215  if version < 508
216    let did_c_syn_inits = 1
217    command -nargs=+ HiLink hi link <args>
218  else
219    command -nargs=+ HiLink hi def link <args>
220  endif
221
222  HiLink llvmType Type
223  HiLink llvmStatement Statement
224  HiLink llvmNumber Number
225  HiLink llvmComment Comment
226  HiLink llvmString String
227  HiLink llvmLabel Label
228  HiLink llvmKeyword Keyword
229  HiLink llvmBoolean Boolean
230  HiLink llvmFloat Float
231  HiLink llvmNoName Identifier
232  HiLink llvmConstant Constant
233  HiLink llvmSpecialComment SpecialComment
234  HiLink llvmError Error
235  HiLink llvmIdentifier Identifier
236
237  delcommand HiLink
238endif
239
240let b:current_syntax = "llvm"
241