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      \ nossp
152      \ ssp
153      \ sspreq
154      \ sspstrong
155      \ strictfp
156      \ swiftcc
157      \ swiftself
158      \ tail
159      \ target
160      \ thread_local
161      \ to
162      \ triple
163      \ unnamed_addr
164      \ unordered
165      \ uselistorder
166      \ uselistorder_bb
167      \ uwtable
168      \ volatile
169      \ weak
170      \ weak_odr
171      \ within
172      \ writeonly
173      \ x86_64_sysvcc
174      \ win64cc
175      \ x86_fastcallcc
176      \ x86_stdcallcc
177      \ x86_thiscallcc
178      \ zeroext
179
180" Obsolete keywords.
181syn keyword llvmError  getresult begin end
182
183" Misc syntax.
184syn match   llvmNoName /[%@!]\d\+\>/
185syn match   llvmNumber /-\?\<\d\+\>/
186syn match   llvmFloat  /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
187syn match   llvmFloat  /\<0x\x\+\>/
188syn keyword llvmBoolean true false
189syn keyword llvmConstant zeroinitializer undef null none
190syn match   llvmComment /;.*$/
191syn region  llvmString start=/"/ skip=/\\"/ end=/"/
192syn match   llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/
193syn match   llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/
194
195" Named metadata and specialized metadata keywords.
196syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/
197syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/
198syn match   llvmType /!\zs\a\+\ze\s*(/
199syn match   llvmConstant /\<DW_TAG_[a-z_]\+\>/
200syn match   llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/
201syn match   llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/
202syn match   llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/
203syn match   llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/
204syn match   llvmConstant /\<DIFlag[A-Za-z]\+\>/
205
206" Syntax-highlight lit test commands and bug numbers.
207syn match  llvmSpecialComment /;\s*PR\d*\s*$/
208syn match  llvmSpecialComment /;\s*REQUIRES:.*$/
209syn match  llvmSpecialComment /;\s*RUN:.*$/
210syn match  llvmSpecialComment /;\s*ALLOW_RETRIES:.*$/
211syn match  llvmSpecialComment /;\s*CHECK:.*$/
212syn match  llvmSpecialComment "\v;\s*CHECK-(NEXT|NOT|DAG|SAME|LABEL):.*$"
213syn match  llvmSpecialComment /;\s*XFAIL:.*$/
214
215if version >= 508 || !exists("did_c_syn_inits")
216  if version < 508
217    let did_c_syn_inits = 1
218    command -nargs=+ HiLink hi link <args>
219  else
220    command -nargs=+ HiLink hi def link <args>
221  endif
222
223  HiLink llvmType Type
224  HiLink llvmStatement Statement
225  HiLink llvmNumber Number
226  HiLink llvmComment Comment
227  HiLink llvmString String
228  HiLink llvmLabel Label
229  HiLink llvmKeyword Keyword
230  HiLink llvmBoolean Boolean
231  HiLink llvmFloat Float
232  HiLink llvmNoName Identifier
233  HiLink llvmConstant Constant
234  HiLink llvmSpecialComment SpecialComment
235  HiLink llvmError Error
236  HiLink llvmIdentifier Identifier
237
238  delcommand HiLink
239endif
240
241let b:current_syntax = "llvm"
242