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