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