blob: a073d6237633b6bd44c9958d26a3267985a68b42 [file] [log] [blame]
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +00001" Vim syntax file
Misha Brukmand8acf7c2003-06-03 00:56:09 +00002" Language: llvm
Reid Spencerc67a0602006-03-14 05:54:52 +00003" Maintainer: The LLVM team, http://llvm.org/
Dan Gohman1b9dd242010-02-26 21:38:04 +00004" Version: $Revision$
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +00005
6if version < 600
7 syntax clear
8elseif exists("b:current_syntax")
9 finish
10endif
11
12syn case match
13
Dan Gohman29ad9bf2009-01-04 23:09:38 +000014" Types.
15" Types also include struct, array, vector, etc. but these don't
16" benefit as much from having dedicated highlighting rules.
Benjamin Kramer65e7c662012-12-02 16:40:38 +000017syn keyword llvmType void half float double x86_fp80 fp128 ppc_fp128
18syn keyword llvmType label metadata x86_mmx
Manuel Jacob5ced9092015-12-28 19:51:04 +000019syn keyword llvmType type label opaque token
Dan Gohmand63d9fe2008-01-29 12:35:50 +000020syn match llvmType /\<i\d\+\>/
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000021
Dan Gohman29ad9bf2009-01-04 23:09:38 +000022" 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.
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +000025syn keyword llvmStatement add addrspacecast alloca and arcp ashr atomicrmw
David Majnemer982ab5d2016-08-09 18:34:19 +000026syn keyword llvmStatement bitcast br catchpad catchswitch catchret call
27syn keyword llvmStatement cleanuppad cleanupret cmpxchg eq exact extractelement
Matt Arsenaultb03bd4d2013-11-15 01:34:59 +000028syn 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
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000038
Dan Gohman29ad9bf2009-01-04 23:09:38 +000039" Keywords.
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +000040syn keyword llvmKeyword
41 \ acq_rel
42 \ acquire
43 \ addrspace
44 \ alias
45 \ align
46 \ alignstack
47 \ alwaysinline
48 \ appending
David Majnemer31241812016-08-11 21:14:05 +000049 \ argmemonly
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +000050 \ arm_aapcscc
51 \ arm_aapcs_vfpcc
52 \ arm_apcscc
53 \ asm
54 \ atomic
55 \ available_externally
56 \ blockaddress
Craig Topper1491bdf2017-07-07 18:28:45 +000057 \ builtin
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +000058 \ byval
59 \ c
60 \ catch
David Majnemer982ab5d2016-08-09 18:34:19 +000061 \ caller
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +000062 \ cc
63 \ ccc
64 \ cleanup
65 \ coldcc
Saleem Abdulrasool8ef21702016-10-14 19:48:31 +000066 \ comdat
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +000067 \ common
68 \ constant
69 \ datalayout
70 \ declare
71 \ default
72 \ define
73 \ deplibs
David Majnemer982ab5d2016-08-09 18:34:19 +000074 \ dereferenceable
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +000075 \ distinct
76 \ dllexport
77 \ dllimport
78 \ except
79 \ external
80 \ externally_initialized
81 \ extern_weak
82 \ fastcc
83 \ filter
David Majnemer982ab5d2016-08-09 18:34:19 +000084 \ from
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +000085 \ 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
Craig Topper1491bdf2017-07-07 18:28:45 +0000109 \ nobuiltin
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +0000110 \ nocapture
111 \ noimplicitfloat
112 \ noinline
113 \ nonlazybind
Craig Topper1491bdf2017-07-07 18:28:45 +0000114 \ nonnull
Saleem Abdulrasoolf1b1bfa2016-10-14 19:48:34 +0000115 \ norecurse
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +0000116 \ 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
Saleem Abdulrasool769b98d2017-02-10 23:57:11 +0000129 \ returned
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +0000130 \ 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
Craig Topper1491bdf2017-07-07 18:28:45 +0000140 \ speculatable
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +0000141 \ spir_func
142 \ spir_kernel
143 \ sret
144 \ ssp
145 \ sspreq
146 \ sspstrong
147 \ swiftcc
148 \ tail
149 \ target
150 \ thread_local
151 \ to
152 \ triple
153 \ unnamed_addr
154 \ unordered
155 \ uselistorder
156 \ uselistorder_bb
157 \ uwtable
158 \ volatile
159 \ weak
160 \ weak_odr
David Majnemer982ab5d2016-08-09 18:34:19 +0000161 \ within
David Majnemer31241812016-08-11 21:14:05 +0000162 \ writeonly
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +0000163 \ x86_64_sysvcc
164 \ x86_64_win64cc
165 \ x86_fastcallcc
166 \ x86_stdcallcc
167 \ x86_thiscallcc
168 \ zeroext
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000169
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000170" Obsolete keywords.
Dan Gohmand13b1a32010-08-28 20:14:05 +0000171syn keyword llvmError getresult begin end
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000172
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000173" Misc syntax.
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +0000174syn match llvmNoName /[%@!]\d\+\>/
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000175syn match llvmNumber /-\?\<\d\+\>/
176syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
177syn match llvmFloat /\<0x\x\+\>/
178syn keyword llvmBoolean true false
David Majnemer982ab5d2016-08-09 18:34:19 +0000179syn keyword llvmConstant zeroinitializer undef null none
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000180syn match llvmComment /;.*$/
181syn region llvmString start=/"/ skip=/\\"/ end=/"/
Dan Gohman62f05b22010-01-09 17:22:48 +0000182syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/
183syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000184
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +0000185" Named metadata and specialized metadata keywords.
186syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/
187syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/
188syn match llvmType /!\zs\a\+\ze\s*(/
Duncan P. N. Exon Smith97486072015-02-03 21:56:01 +0000189syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/
Duncan P. N. Exon Smithcd6636c2015-02-13 01:17:35 +0000190syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/
Duncan P. N. Exon Smith0c5c0122015-02-13 01:42:09 +0000191syn match llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/
Duncan P. N. Exon Smithaece2dc2015-02-13 01:21:25 +0000192syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/
Duncan P. N. Exon Smith890533e2015-02-13 01:28:16 +0000193syn match llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/
Duncan P. N. Exon Smith70ab3d22015-02-21 01:02:18 +0000194syn match llvmConstant /\<DIFlag[A-Za-z]\+\>/
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +0000195
Chandler Carruth60ec79e2015-07-15 01:48:40 +0000196" Syntax-highlight lit test commands and bug numbers.
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000197syn match llvmSpecialComment /;\s*PR\d*\s*$/
Chandler Carruth60ec79e2015-07-15 01:48:40 +0000198syn match llvmSpecialComment /;\s*REQUIRES:.*$/
199syn match llvmSpecialComment /;\s*RUN:.*$/
Saleem Abdulrasoola25f90d2016-11-03 15:56:06 +0000200syn match llvmSpecialComment /;\s*CHECK:.*$/
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000201syn match llvmSpecialComment /;\s*XFAIL:.*$/
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000202
203if version >= 508 || !exists("did_c_syn_inits")
204 if version < 508
205 let did_c_syn_inits = 1
206 command -nargs=+ HiLink hi link <args>
207 else
208 command -nargs=+ HiLink hi def link <args>
209 endif
210
211 HiLink llvmType Type
212 HiLink llvmStatement Statement
213 HiLink llvmNumber Number
214 HiLink llvmComment Comment
215 HiLink llvmString String
216 HiLink llvmLabel Label
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000217 HiLink llvmKeyword Keyword
218 HiLink llvmBoolean Boolean
219 HiLink llvmFloat Float
Owen Andersonb2c657c2010-07-29 17:57:57 +0000220 HiLink llvmNoName Identifier
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000221 HiLink llvmConstant Constant
222 HiLink llvmSpecialComment SpecialComment
223 HiLink llvmError Error
Dan Gohman62f05b22010-01-09 17:22:48 +0000224 HiLink llvmIdentifier Identifier
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000225
226 delcommand HiLink
227endif
Misha Brukmanac7b4562009-01-02 16:26:14 +0000228
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000229let b:current_syntax = "llvm"