blob: 0b84116b40b126864b21b306e82a26cd8f0b7d25 [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:.*$/
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000202syn match llvmSpecialComment /;\s*XFAIL:.*$/
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000203
204if version >= 508 || !exists("did_c_syn_inits")
205 if version < 508
206 let did_c_syn_inits = 1
207 command -nargs=+ HiLink hi link <args>
208 else
209 command -nargs=+ HiLink hi def link <args>
210 endif
211
212 HiLink llvmType Type
213 HiLink llvmStatement Statement
214 HiLink llvmNumber Number
215 HiLink llvmComment Comment
216 HiLink llvmString String
217 HiLink llvmLabel Label
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000218 HiLink llvmKeyword Keyword
219 HiLink llvmBoolean Boolean
220 HiLink llvmFloat Float
Owen Andersonb2c657c2010-07-29 17:57:57 +0000221 HiLink llvmNoName Identifier
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000222 HiLink llvmConstant Constant
223 HiLink llvmSpecialComment SpecialComment
224 HiLink llvmError Error
Dan Gohman62f05b22010-01-09 17:22:48 +0000225 HiLink llvmIdentifier Identifier
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000226
227 delcommand HiLink
228endif
Misha Brukmanac7b4562009-01-02 16:26:14 +0000229
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000230let b:current_syntax = "llvm"