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      \ returns_twice
127      \ sanitize_address
128      \ sanitize_memory
129      \ sanitize_thread
130      \ section
131      \ seq_cst
132      \ sideeffect
133      \ signext
134      \ singlethread
135      \ source_filename
136      \ spir_func
137      \ spir_kernel
138      \ sret
139      \ ssp
140      \ sspreq
141      \ sspstrong
142      \ swiftcc
143      \ tail
144      \ target
145      \ thread_local
146      \ to
147      \ triple
148      \ unnamed_addr
149      \ unordered
150      \ uselistorder
151      \ uselistorder_bb
152      \ uwtable
153      \ volatile
154      \ weak
155      \ weak_odr
156      \ within
157      \ writeonly
158      \ x86_64_sysvcc
159      \ x86_64_win64cc
160      \ x86_fastcallcc
161      \ x86_stdcallcc
162      \ x86_thiscallcc
163      \ zeroext
164
165" Obsolete keywords.
166syn keyword llvmError  getresult begin end
167
168" Misc syntax.
169syn match   llvmNoName /[%@!]\d\+\>/
170syn match   llvmNumber /-\?\<\d\+\>/
171syn match   llvmFloat  /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
172syn match   llvmFloat  /\<0x\x\+\>/
173syn keyword llvmBoolean true false
174syn keyword llvmConstant zeroinitializer undef null none
175syn match   llvmComment /;.*$/
176syn region  llvmString start=/"/ skip=/\\"/ end=/"/
177syn match   llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/
178syn match   llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/
179
180" Named metadata and specialized metadata keywords.
181syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/
182syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/
183syn match   llvmType /!\zs\a\+\ze\s*(/
184syn match   llvmConstant /\<DW_TAG_[a-z_]\+\>/
185syn match   llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/
186syn match   llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/
187syn match   llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/
188syn match   llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/
189syn match   llvmConstant /\<DIFlag[A-Za-z]\+\>/
190
191" Syntax-highlight lit test commands and bug numbers.
192syn match  llvmSpecialComment /;\s*PR\d*\s*$/
193syn match  llvmSpecialComment /;\s*REQUIRES:.*$/
194syn match  llvmSpecialComment /;\s*RUN:.*$/
195syn match  llvmSpecialComment /;\s*XFAIL:.*$/
196
197if version >= 508 || !exists("did_c_syn_inits")
198  if version < 508
199    let did_c_syn_inits = 1
200    command -nargs=+ HiLink hi link <args>
201  else
202    command -nargs=+ HiLink hi def link <args>
203  endif
204
205  HiLink llvmType Type
206  HiLink llvmStatement Statement
207  HiLink llvmNumber Number
208  HiLink llvmComment Comment
209  HiLink llvmString String
210  HiLink llvmLabel Label
211  HiLink llvmKeyword Keyword
212  HiLink llvmBoolean Boolean
213  HiLink llvmFloat Float
214  HiLink llvmNoName Identifier
215  HiLink llvmConstant Constant
216  HiLink llvmSpecialComment SpecialComment
217  HiLink llvmError Error
218  HiLink llvmIdentifier Identifier
219
220  delcommand HiLink
221endif
222
223let b:current_syntax = "llvm"
224