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