blob: df564113185e318c38f1a3d0516e2b0bbdb88062 [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
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000019syn keyword llvmType type label opaque
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
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
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000037
Dan Gohman29ad9bf2009-01-04 23:09:38 +000038" Keywords.
Kostya Serebryanycf880b92013-02-26 06:58:09 +000039syn keyword llvmKeyword acq_rel acquire sanitize_address addrspace alias align
Benjamin Kramer65e7c662012-12-02 16:40:38 +000040syn 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
Duncan P. N. Exon Smith090a19b2015-01-08 22:38:29 +000044syn keyword llvmKeyword distinct dllexport dllimport except extern_weak external
Saleem Abdulrasool9fa3dd42014-12-12 21:52:44 +000045syn 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
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000060
Dan Gohman29ad9bf2009-01-04 23:09:38 +000061" Obsolete keywords.
Dan Gohmand13b1a32010-08-28 20:14:05 +000062syn keyword llvmError getresult begin end
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000063
Dan Gohman29ad9bf2009-01-04 23:09:38 +000064" Misc syntax.
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +000065syn match llvmNoName /[%@!]\d\+\>/
Dan Gohman29ad9bf2009-01-04 23:09:38 +000066syn 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=/"/
Dan Gohman62f05b22010-01-09 17:22:48 +000073syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/
74syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/
Dan Gohman29ad9bf2009-01-04 23:09:38 +000075
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +000076" 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*(/
Duncan P. N. Exon Smith97486072015-02-03 21:56:01 +000080syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/
Duncan P. N. Exon Smithcd6636c2015-02-13 01:17:35 +000081syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/
Duncan P. N. Exon Smithaece2dc2015-02-13 01:21:25 +000082syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/
Duncan P. N. Exon Smith6a484832015-01-13 21:10:44 +000083
Dan Gohman29ad9bf2009-01-04 23:09:38 +000084" Syntax-highlight dejagnu test commands.
85syn match llvmSpecialComment /;\s*RUN:.*$/
86syn match llvmSpecialComment /;\s*PR\d*\s*$/
87syn match llvmSpecialComment /;\s*END\.\s*$/
88syn match llvmSpecialComment /;\s*XFAIL:.*$/
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000089
90if version >= 508 || !exists("did_c_syn_inits")
91 if version < 508
92 let did_c_syn_inits = 1
93 command -nargs=+ HiLink hi link <args>
94 else
95 command -nargs=+ HiLink hi def link <args>
96 endif
97
98 HiLink llvmType Type
99 HiLink llvmStatement Statement
100 HiLink llvmNumber Number
101 HiLink llvmComment Comment
102 HiLink llvmString String
103 HiLink llvmLabel Label
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000104 HiLink llvmKeyword Keyword
105 HiLink llvmBoolean Boolean
106 HiLink llvmFloat Float
Owen Andersonb2c657c2010-07-29 17:57:57 +0000107 HiLink llvmNoName Identifier
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000108 HiLink llvmConstant Constant
109 HiLink llvmSpecialComment SpecialComment
110 HiLink llvmError Error
Dan Gohman62f05b22010-01-09 17:22:48 +0000111 HiLink llvmIdentifier Identifier
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000112
113 delcommand HiLink
114endif
Misha Brukmanac7b4562009-01-02 16:26:14 +0000115
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000116let b:current_syntax = "llvm"