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