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      \ byval
59      \ c
60      \ catch
61      \ caller
62      \ cc
63      \ ccc
64      \ cleanup
65      \ coldcc
66      \ comdat
67      \ common
68      \ constant
69      \ datalayout
70      \ declare
71      \ default
72      \ define
73      \ deplibs
74      \ dereferenceable
75      \ distinct
76      \ dllexport
77      \ dllimport
78      \ dso_local
79      \ dso_preemptable
80      \ except
81      \ external
82      \ externally_initialized
83      \ extern_weak
84      \ fastcc
85      \ tailcc
86      \ filter
87      \ from
88      \ gc
89      \ global
90      \ hhvmcc
91      \ hhvm_ccc
92      \ hidden
93      \ immarg
94      \ initialexec
95      \ inlinehint
96      \ inreg
97      \ inteldialect
98      \ intel_ocl_bicc
99      \ internal
100      \ linkonce
101      \ linkonce_odr
102      \ localdynamic
103      \ localexec
104      \ local_unnamed_addr
105      \ minsize
106      \ module
107      \ monotonic
108      \ msp430_intrcc
109      \ musttail
110      \ naked
111      \ nest
112      \ noalias
113      \ nobuiltin
114      \ nocapture
115      \ noimplicitfloat
116      \ noinline
117      \ nonlazybind
118      \ nonnull
119      \ norecurse
120      \ noredzone
121      \ noreturn
122      \ nounwind
123      \ optnone
124      \ optsize
125      \ personality
126      \ private
127      \ protected
128      \ ptx_device
129      \ ptx_kernel
130      \ readnone
131      \ readonly
132      \ release
133      \ returned
134      \ returns_twice
135      \ sanitize_address
136      \ sanitize_memory
137      \ sanitize_thread
138      \ section
139      \ seq_cst
140      \ sideeffect
141      \ signext
142      \ syncscope
143      \ source_filename
144      \ speculatable
145      \ spir_func
146      \ spir_kernel
147      \ sret
148      \ ssp
149      \ sspreq
150      \ sspstrong
151      \ strictfp
152      \ swiftcc
153      \ swiftself
154      \ tail
155      \ target
156      \ thread_local
157      \ to
158      \ triple
159      \ unnamed_addr
160      \ unordered
161      \ uselistorder
162      \ uselistorder_bb
163      \ uwtable
164      \ volatile
165      \ weak
166      \ weak_odr
167      \ within
168      \ writeonly
169      \ x86_64_sysvcc
170      \ win64cc
171      \ x86_fastcallcc
172      \ x86_stdcallcc
173      \ x86_thiscallcc
174      \ zeroext
175
176" Obsolete keywords.
177syn keyword llvmError  getresult begin end
178
179" Misc syntax.
180syn match   llvmNoName /[%@!]\d\+\>/
181syn match   llvmNumber /-\?\<\d\+\>/
182syn match   llvmFloat  /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
183syn match   llvmFloat  /\<0x\x\+\>/
184syn keyword llvmBoolean true false
185syn keyword llvmConstant zeroinitializer undef null none
186syn match   llvmComment /;.*$/
187syn region  llvmString start=/"/ skip=/\\"/ end=/"/
188syn match   llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/
189syn match   llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/
190
191" Named metadata and specialized metadata keywords.
192syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/
193syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/
194syn match   llvmType /!\zs\a\+\ze\s*(/
195syn match   llvmConstant /\<DW_TAG_[a-z_]\+\>/
196syn match   llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/
197syn match   llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/
198syn match   llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/
199syn match   llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/
200syn match   llvmConstant /\<DIFlag[A-Za-z]\+\>/
201
202" Syntax-highlight lit test commands and bug numbers.
203syn match  llvmSpecialComment /;\s*PR\d*\s*$/
204syn match  llvmSpecialComment /;\s*REQUIRES:.*$/
205syn match  llvmSpecialComment /;\s*RUN:.*$/
206syn match  llvmSpecialComment /;\s*ALLOW_RETRIES:.*$/
207syn match  llvmSpecialComment /;\s*CHECK:.*$/
208syn match  llvmSpecialComment "\v;\s*CHECK-(NEXT|NOT|DAG|SAME|LABEL):.*$"
209syn match  llvmSpecialComment /;\s*XFAIL:.*$/
210
211if version >= 508 || !exists("did_c_syn_inits")
212  if version < 508
213    let did_c_syn_inits = 1
214    command -nargs=+ HiLink hi link <args>
215  else
216    command -nargs=+ HiLink hi def link <args>
217  endif
218
219  HiLink llvmType Type
220  HiLink llvmStatement Statement
221  HiLink llvmNumber Number
222  HiLink llvmComment Comment
223  HiLink llvmString String
224  HiLink llvmLabel Label
225  HiLink llvmKeyword Keyword
226  HiLink llvmBoolean Boolean
227  HiLink llvmFloat Float
228  HiLink llvmNoName Identifier
229  HiLink llvmConstant Constant
230  HiLink llvmSpecialComment SpecialComment
231  HiLink llvmError Error
232  HiLink llvmIdentifier Identifier
233
234  delcommand HiLink
235endif
236
237let b:current_syntax = "llvm"
238