blob: 4d0055e75db55287977fdfefa190bb9c548dcfbd [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
Andrew Kaylor53a5fbb2017-08-14 21:15:13 +0000147 \ strictfp
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +0000148 \ 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
David Majnemer982ab5d2016-08-09 18:34:19 +0000162 \ within
David Majnemer31241812016-08-11 21:14:05 +0000163 \ writeonly
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +0000164 \ x86_64_sysvcc
Martin Storsjo2f24e932017-07-17 20:05:19 +0000165 \ win64cc
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +0000166 \ x86_fastcallcc
167 \ x86_stdcallcc
168 \ x86_thiscallcc
169 \ zeroext
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000170
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000171" Obsolete keywords.
Dan Gohmand13b1a32010-08-28 20:14:05 +0000172syn keyword llvmError getresult begin end
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000173
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000174" Misc syntax.
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +0000175syn match llvmNoName /[%@!]\d\+\>/
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000176syn match llvmNumber /-\?\<\d\+\>/
177syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
178syn match llvmFloat /\<0x\x\+\>/
179syn keyword llvmBoolean true false
David Majnemer982ab5d2016-08-09 18:34:19 +0000180syn keyword llvmConstant zeroinitializer undef null none
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000181syn match llvmComment /;.*$/
182syn region llvmString start=/"/ skip=/\\"/ end=/"/
Dan Gohman62f05b22010-01-09 17:22:48 +0000183syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/
184syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000185
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +0000186" 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*(/
Duncan P. N. Exon Smith97486072015-02-03 21:56:01 +0000190syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/
Duncan P. N. Exon Smithcd6636c2015-02-13 01:17:35 +0000191syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/
Duncan P. N. Exon Smith0c5c0122015-02-13 01:42:09 +0000192syn match llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/
Duncan P. N. Exon Smithaece2dc2015-02-13 01:21:25 +0000193syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/
Duncan P. N. Exon Smith890533e2015-02-13 01:28:16 +0000194syn match llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/
Duncan P. N. Exon Smith70ab3d22015-02-21 01:02:18 +0000195syn match llvmConstant /\<DIFlag[A-Za-z]\+\>/
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +0000196
Chandler Carruth60ec79e2015-07-15 01:48:40 +0000197" Syntax-highlight lit test commands and bug numbers.
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000198syn match llvmSpecialComment /;\s*PR\d*\s*$/
Chandler Carruth60ec79e2015-07-15 01:48:40 +0000199syn match llvmSpecialComment /;\s*REQUIRES:.*$/
200syn match llvmSpecialComment /;\s*RUN:.*$/
Saleem Abdulrasoola25f90d2016-11-03 15:56:06 +0000201syn match llvmSpecialComment /;\s*CHECK:.*$/
Mikhail Maltsev581a7f02018-02-20 17:27:44 +0000202syn match llvmSpecialComment "\v;\s*CHECK-(NEXT|NOT|DAG|SAME|LABEL):.*$"
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000203syn match llvmSpecialComment /;\s*XFAIL:.*$/
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000204
205if version >= 508 || !exists("did_c_syn_inits")
206 if version < 508
207 let did_c_syn_inits = 1
208 command -nargs=+ HiLink hi link <args>
209 else
210 command -nargs=+ HiLink hi def link <args>
211 endif
212
213 HiLink llvmType Type
214 HiLink llvmStatement Statement
215 HiLink llvmNumber Number
216 HiLink llvmComment Comment
217 HiLink llvmString String
218 HiLink llvmLabel Label
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000219 HiLink llvmKeyword Keyword
220 HiLink llvmBoolean Boolean
221 HiLink llvmFloat Float
Owen Andersonb2c657c2010-07-29 17:57:57 +0000222 HiLink llvmNoName Identifier
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000223 HiLink llvmConstant Constant
224 HiLink llvmSpecialComment SpecialComment
225 HiLink llvmError Error
Dan Gohman62f05b22010-01-09 17:22:48 +0000226 HiLink llvmIdentifier Identifier
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000227
228 delcommand HiLink
229endif
Misha Brukmanac7b4562009-01-02 16:26:14 +0000230
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000231let b:current_syntax = "llvm"