1" Vim syntax file
2" Language:   llvm
3" Maintainer: The LLVM team, http://llvm.org/
4" Version:      $Revision$
5
6if version < 600
7  syntax clear
8elseif exists("b:current_syntax")
9  finish
10endif
11
12syn case match
13
14" Types.
15" Types also include struct, array, vector, etc. but these don't
16" benefit as much from having dedicated highlighting rules.
17syn keyword llvmType void half float double x86_fp80 fp128 ppc_fp128
18syn keyword llvmType label metadata x86_mmx
19syn keyword llvmType type label opaque
20syn match   llvmType /\<i\d\+\>/
21
22" 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.
25syn keyword llvmStatement add addrspacecast alloca and arcp ashr atomicrmw
26syn keyword llvmStatement bitcast br call cmpxchg eq exact extractelement
27syn keyword llvmStatement extractvalue fadd fast fcmp fdiv fence fmul fpext
28syn keyword llvmStatement fptosi fptoui fptrunc free frem fsub getelementptr
29syn keyword llvmStatement icmp inbounds indirectbr insertelement insertvalue
30syn keyword llvmStatement inttoptr invoke landingpad load lshr malloc max min
31syn keyword llvmStatement mul nand ne ninf nnan nsw nsz nuw oeq oge ogt ole
32syn keyword llvmStatement olt one or ord phi ptrtoint resume ret sdiv select
33syn keyword llvmStatement sext sge sgt shl shufflevector sitofp sle slt srem
34syn keyword llvmStatement store sub switch trunc udiv ueq uge ugt uitofp ule ult
35syn keyword llvmStatement umax umin une uno unreachable unwind urem va_arg
36syn keyword llvmStatement xchg xor zext
37
38" Keywords.
39syn keyword llvmKeyword acq_rel acquire sanitize_address addrspace alias align
40syn keyword llvmKeyword alignstack alwaysinline appending arm_aapcs_vfpcc
41syn keyword llvmKeyword arm_aapcscc arm_apcscc asm atomic available_externally
42syn keyword llvmKeyword blockaddress byval c catch cc ccc cleanup coldcc common
43syn keyword llvmKeyword constant datalayout declare default define deplibs
44syn keyword llvmKeyword distinct dllexport dllimport except extern_weak external
45syn keyword llvmKeyword externally_initialized fastcc filter gc global hidden
46syn keyword llvmKeyword initialexec inlinehint inreg intel_ocl_bicc inteldialect
47syn keyword llvmKeyword internal linkonce linkonce_odr localdynamic localexec
48syn keyword llvmKeyword minsize module monotonic msp430_intrcc naked nest
49syn keyword llvmKeyword noalias nocapture noimplicitfloat noinline nonlazybind
50syn keyword llvmKeyword noredzone noreturn nounwind optnone optsize personality
51syn keyword llvmKeyword private protected ptx_device ptx_kernel readnone
52syn keyword llvmKeyword readonly release returns_twice sanitize_thread
53syn keyword llvmKeyword sanitize_memory section seq_cst sideeffect signext
54syn keyword llvmKeyword singlethread spir_func spir_kernel sret ssp sspreq
55syn keyword llvmKeyword sspstrong tail target thread_local to triple
56syn keyword llvmKeyword unnamed_addr unordered uwtable volatile weak weak_odr
57syn keyword llvmKeyword x86_fastcallcc x86_stdcallcc x86_thiscallcc
58syn keyword llvmKeyword x86_64_sysvcc x86_64_win64cc zeroext uselistorder
59syn keyword llvmKeyword uselistorder_bb
60
61" Obsolete keywords.
62syn keyword llvmError  getresult begin end
63
64" Misc syntax.
65syn match   llvmNoName /[%@!]\d\+\>/
66syn match   llvmNumber /-\?\<\d\+\>/
67syn match   llvmFloat  /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/
68syn match   llvmFloat  /\<0x\x\+\>/
69syn keyword llvmBoolean true false
70syn keyword llvmConstant zeroinitializer undef null
71syn match   llvmComment /;.*$/
72syn region  llvmString start=/"/ skip=/\\"/ end=/"/
73syn match   llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/
74syn match   llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/
75
76" Named metadata and specialized metadata keywords.
77syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/
78syn match   llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/
79syn match   llvmType /!\zs\a\+\ze\s*(/
80syn match   llvmConstant /\<DW_TAG_[a-z_]\+\>/
81syn match   llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/
82syn match   llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/
83syn match   llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/
84syn match   llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/
85syn match   llvmConstant /\<DIFlag[A-Za-z]\+\>/
86
87" Syntax-highlight dejagnu test commands.
88syn match  llvmSpecialComment /;\s*RUN:.*$/
89syn match  llvmSpecialComment /;\s*PR\d*\s*$/
90syn match  llvmSpecialComment /;\s*END\.\s*$/
91syn match  llvmSpecialComment /;\s*XFAIL:.*$/
92
93if version >= 508 || !exists("did_c_syn_inits")
94  if version < 508
95    let did_c_syn_inits = 1
96    command -nargs=+ HiLink hi link <args>
97  else
98    command -nargs=+ HiLink hi def link <args>
99  endif
100
101  HiLink llvmType Type
102  HiLink llvmStatement Statement
103  HiLink llvmNumber Number
104  HiLink llvmComment Comment
105  HiLink llvmString String
106  HiLink llvmLabel Label
107  HiLink llvmKeyword Keyword
108  HiLink llvmBoolean Boolean
109  HiLink llvmFloat Float
110  HiLink llvmNoName Identifier
111  HiLink llvmConstant Constant
112  HiLink llvmSpecialComment SpecialComment
113  HiLink llvmError Error
114  HiLink llvmIdentifier Identifier
115
116  delcommand HiLink
117endif
118
119let b:current_syntax = "llvm"
120