blob: 1412d6ce23716d249c5fa9da3d3713b87acc29fb [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
57 \ byval
58 \ c
59 \ catch
David Majnemer982ab5d2016-08-09 18:34:19 +000060 \ caller
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +000061 \ cc
62 \ ccc
63 \ cleanup
64 \ coldcc
65 \ common
66 \ constant
67 \ datalayout
68 \ declare
69 \ default
70 \ define
71 \ deplibs
David Majnemer982ab5d2016-08-09 18:34:19 +000072 \ dereferenceable
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +000073 \ distinct
74 \ dllexport
75 \ dllimport
76 \ except
77 \ external
78 \ externally_initialized
79 \ extern_weak
80 \ fastcc
81 \ filter
David Majnemer982ab5d2016-08-09 18:34:19 +000082 \ from
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +000083 \ gc
84 \ global
85 \ hhvmcc
86 \ hhvm_ccc
87 \ hidden
88 \ initialexec
89 \ inlinehint
90 \ inreg
91 \ inteldialect
92 \ intel_ocl_bicc
93 \ internal
94 \ linkonce
95 \ linkonce_odr
96 \ localdynamic
97 \ localexec
98 \ local_unnamed_addr
99 \ minsize
100 \ module
101 \ monotonic
102 \ msp430_intrcc
103 \ musttail
104 \ naked
105 \ nest
106 \ noalias
107 \ nocapture
108 \ noimplicitfloat
109 \ noinline
110 \ nonlazybind
111 \ noredzone
112 \ noreturn
113 \ nounwind
114 \ optnone
115 \ optsize
116 \ personality
117 \ private
118 \ protected
119 \ ptx_device
120 \ ptx_kernel
121 \ readnone
122 \ readonly
123 \ release
124 \ returns_twice
125 \ sanitize_address
126 \ sanitize_memory
127 \ sanitize_thread
128 \ section
129 \ seq_cst
130 \ sideeffect
131 \ signext
132 \ singlethread
133 \ source_filename
134 \ spir_func
135 \ spir_kernel
136 \ sret
137 \ ssp
138 \ sspreq
139 \ sspstrong
140 \ swiftcc
141 \ tail
142 \ target
143 \ thread_local
144 \ to
145 \ triple
146 \ unnamed_addr
147 \ unordered
148 \ uselistorder
149 \ uselistorder_bb
150 \ uwtable
151 \ volatile
152 \ weak
153 \ weak_odr
David Majnemer982ab5d2016-08-09 18:34:19 +0000154 \ within
David Majnemer31241812016-08-11 21:14:05 +0000155 \ writeonly
Saleem Abdulrasoolb21e7832016-07-13 03:47:58 +0000156 \ x86_64_sysvcc
157 \ x86_64_win64cc
158 \ x86_fastcallcc
159 \ x86_stdcallcc
160 \ x86_thiscallcc
161 \ zeroext
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000162
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000163" Obsolete keywords.
Dan Gohmand13b1a32010-08-28 20:14:05 +0000164syn keyword llvmError getresult begin end
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000165
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000166" Misc syntax.
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +0000167syn match llvmNoName /[%@!]\d\+\>/
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000168syn match llvmNumber /-\?\<\d\+\>/
169syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
170syn match llvmFloat /\<0x\x\+\>/
171syn keyword llvmBoolean true false
David Majnemer982ab5d2016-08-09 18:34:19 +0000172syn keyword llvmConstant zeroinitializer undef null none
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000173syn match llvmComment /;.*$/
174syn region llvmString start=/"/ skip=/\\"/ end=/"/
Dan Gohman62f05b22010-01-09 17:22:48 +0000175syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/
176syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000177
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +0000178" Named metadata and specialized metadata keywords.
179syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/
180syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/
181syn match llvmType /!\zs\a\+\ze\s*(/
Duncan P. N. Exon Smith97486072015-02-03 21:56:01 +0000182syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/
Duncan P. N. Exon Smithcd6636c2015-02-13 01:17:35 +0000183syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/
Duncan P. N. Exon Smith0c5c0122015-02-13 01:42:09 +0000184syn match llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/
Duncan P. N. Exon Smithaece2dc2015-02-13 01:21:25 +0000185syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/
Duncan P. N. Exon Smith890533e2015-02-13 01:28:16 +0000186syn match llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/
Duncan P. N. Exon Smith70ab3d22015-02-21 01:02:18 +0000187syn match llvmConstant /\<DIFlag[A-Za-z]\+\>/
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +0000188
Chandler Carruth60ec79e2015-07-15 01:48:40 +0000189" Syntax-highlight lit test commands and bug numbers.
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000190syn match llvmSpecialComment /;\s*PR\d*\s*$/
Chandler Carruth60ec79e2015-07-15 01:48:40 +0000191syn match llvmSpecialComment /;\s*REQUIRES:.*$/
192syn match llvmSpecialComment /;\s*RUN:.*$/
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000193syn match llvmSpecialComment /;\s*XFAIL:.*$/
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000194
195if version >= 508 || !exists("did_c_syn_inits")
196 if version < 508
197 let did_c_syn_inits = 1
198 command -nargs=+ HiLink hi link <args>
199 else
200 command -nargs=+ HiLink hi def link <args>
201 endif
202
203 HiLink llvmType Type
204 HiLink llvmStatement Statement
205 HiLink llvmNumber Number
206 HiLink llvmComment Comment
207 HiLink llvmString String
208 HiLink llvmLabel Label
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000209 HiLink llvmKeyword Keyword
210 HiLink llvmBoolean Boolean
211 HiLink llvmFloat Float
Owen Andersonb2c657c2010-07-29 17:57:57 +0000212 HiLink llvmNoName Identifier
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000213 HiLink llvmConstant Constant
214 HiLink llvmSpecialComment SpecialComment
215 HiLink llvmError Error
Dan Gohman62f05b22010-01-09 17:22:48 +0000216 HiLink llvmIdentifier Identifier
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000217
218 delcommand HiLink
219endif
Misha Brukmanac7b4562009-01-02 16:26:14 +0000220
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000221let b:current_syntax = "llvm"