blob: c611ad8dd07572ee1e8e54203ec242476a8cafe0 [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.
Benjamin Kramer65e7c662012-12-02 16:40:38 +000025syn keyword llvmStatement add alloca and arcp ashr atomicrmw bitcast br call
26syn keyword llvmStatement cmpxchg eq exact extractelement extractvalue fadd fast
27syn keyword llvmStatement fcmp fdiv fence fmul fpext fptosi fptoui fptrunc free
28syn keyword llvmStatement frem fsub getelementptr icmp inbounds indirectbr
29syn keyword llvmStatement insertelement insertvalue inttoptr invoke landingpad
30syn keyword llvmStatement load lshr malloc max min mul nand ne ninf nnan nsw nsz
31syn keyword llvmStatement nuw oeq oge ogt ole olt one or ord phi ptrtoint resume
32syn keyword llvmStatement ret sdiv select sext sge sgt shl shufflevector sitofp
33syn keyword llvmStatement sle slt srem store sub switch trunc udiv ueq uge ugt
34syn keyword llvmStatement uitofp ule ult umax umin une uno unreachable unwind
35syn keyword llvmStatement urem va_arg xchg xor zext
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000036
Dan Gohman29ad9bf2009-01-04 23:09:38 +000037" Keywords.
Kostya Serebryanycf880b92013-02-26 06:58:09 +000038syn keyword llvmKeyword acq_rel acquire sanitize_address addrspace alias align
Benjamin Kramer65e7c662012-12-02 16:40:38 +000039syn keyword llvmKeyword alignstack alwaysinline appending arm_aapcs_vfpcc
40syn keyword llvmKeyword arm_aapcscc arm_apcscc asm atomic available_externally
41syn keyword llvmKeyword blockaddress byval c catch cc ccc cleanup coldcc common
42syn keyword llvmKeyword constant datalayout declare default define deplibs
43syn keyword llvmKeyword dllexport dllimport except extern_weak external fastcc
44syn keyword llvmKeyword filter gc global hidden initialexec inlinehint inreg
45syn keyword llvmKeyword intel_ocl_bicc inteldialect internal linker_private
Rafael Espindola716e7402013-11-01 17:09:14 +000046syn keyword llvmKeyword linker_private_weak
47syn keyword llvmKeyword linkonce linkonce_odr
Benjamin Kramer65e7c662012-12-02 16:40:38 +000048syn keyword llvmKeyword localdynamic localexec minsize module monotonic
49syn keyword llvmKeyword msp430_intrcc naked nest noalias nocapture
50syn keyword llvmKeyword noimplicitfloat noinline nonlazybind noredzone noreturn
Andrea Di Biagio377496b2013-08-23 11:53:55 +000051syn keyword llvmKeyword nounwind optnone optsize personality private protected
Benjamin Kramer65e7c662012-12-02 16:40:38 +000052syn keyword llvmKeyword ptx_device ptx_kernel readnone readonly release
Charles Davise8f297c2013-07-12 06:02:35 +000053syn keyword llvmKeyword returns_twice sanitize_thread sanitize_memory
54syn keyword llvmKeyword section seq_cst sideeffect signext singlethread
55syn keyword llvmKeyword spir_func spir_kernel sret ssp sspreq sspstrong
56syn keyword llvmKeyword tail target thread_local to triple unnamed_addr
57syn keyword llvmKeyword unordered uwtable volatile weak weak_odr
58syn keyword llvmKeyword x86_fastcallcc x86_stdcallcc x86_thiscallcc x86_64_sysvcc
59syn keyword llvmKeyword x86_64_win64cc zeroext
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.
Owen Andersonb2c657c2010-07-29 17:57:57 +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
76" Syntax-highlight dejagnu test commands.
77syn match llvmSpecialComment /;\s*RUN:.*$/
78syn match llvmSpecialComment /;\s*PR\d*\s*$/
79syn match llvmSpecialComment /;\s*END\.\s*$/
80syn match llvmSpecialComment /;\s*XFAIL:.*$/
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +000081
82if version >= 508 || !exists("did_c_syn_inits")
83 if version < 508
84 let did_c_syn_inits = 1
85 command -nargs=+ HiLink hi link <args>
86 else
87 command -nargs=+ HiLink hi def link <args>
88 endif
89
90 HiLink llvmType Type
91 HiLink llvmStatement Statement
92 HiLink llvmNumber Number
93 HiLink llvmComment Comment
94 HiLink llvmString String
95 HiLink llvmLabel Label
Dan Gohman29ad9bf2009-01-04 23:09:38 +000096 HiLink llvmKeyword Keyword
97 HiLink llvmBoolean Boolean
98 HiLink llvmFloat Float
Owen Andersonb2c657c2010-07-29 17:57:57 +000099 HiLink llvmNoName Identifier
Dan Gohman29ad9bf2009-01-04 23:09:38 +0000100 HiLink llvmConstant Constant
101 HiLink llvmSpecialComment SpecialComment
102 HiLink llvmError Error
Dan Gohman62f05b22010-01-09 17:22:48 +0000103 HiLink llvmIdentifier Identifier
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000104
105 delcommand HiLink
106endif
Misha Brukmanac7b4562009-01-02 16:26:14 +0000107
Nick Hildenbrandt37e690a2002-10-07 22:54:48 +0000108let b:current_syntax = "llvm"