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 bfloat float double x86_fp80 fp128 ppc_fp128 18syn keyword llvmType label metadata x86_mmx x86_amx 19syn keyword llvmType type label opaque token 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 catchpad catchswitch catchret call callbr 27syn keyword llvmStatement cleanuppad cleanupret cmpxchg eq exact extractelement 28syn keyword llvmStatement extractvalue fadd fast fcmp fdiv fence fmul fpext 29syn keyword llvmStatement fptosi fptoui fptrunc free frem fsub fneg 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 38 39" Keywords. 40syn keyword llvmKeyword 41 \ acq_rel 42 \ acquire 43 \ addrspace 44 \ alias 45 \ align 46 \ alignstack 47 \ allocsize 48 \ alwaysinline 49 \ appending 50 \ argmemonly 51 \ arm_aapcs_vfpcc 52 \ arm_aapcscc 53 \ arm_apcscc 54 \ asm 55 \ atomic 56 \ available_externally 57 \ blockaddress 58 \ builtin 59 \ byref 60 \ byval 61 \ c 62 \ caller 63 \ catch 64 \ cc 65 \ ccc 66 \ cleanup 67 \ cold 68 \ coldcc 69 \ comdat 70 \ common 71 \ constant 72 \ convergent 73 \ datalayout 74 \ declare 75 \ default 76 \ define 77 \ deplibs 78 \ dereferenceable 79 \ dereferenceable_or_null 80 \ distinct 81 \ dllexport 82 \ dllimport 83 \ dso_local 84 \ dso_preemptable 85 \ except 86 \ extern_weak 87 \ external 88 \ externally_initialized 89 \ fastcc 90 \ filter 91 \ from 92 \ gc 93 \ global 94 \ hhvm_ccc 95 \ hhvmcc 96 \ hidden 97 \ hot 98 \ immarg 99 \ inaccessiblemem_or_argmemonly 100 \ inaccessiblememonly 101 \ inalloca 102 \ initialexec 103 \ inlinehint 104 \ inreg 105 \ intel_ocl_bicc 106 \ inteldialect 107 \ internal 108 \ jumptable 109 \ linkonce 110 \ linkonce_odr 111 \ local_unnamed_addr 112 \ localdynamic 113 \ localexec 114 \ minsize 115 \ module 116 \ monotonic 117 \ msp430_intrcc 118 \ mustprogress 119 \ musttail 120 \ naked 121 \ nest 122 \ noalias 123 \ nobuiltin 124 \ nocallback 125 \ nocapture 126 \ nocf_check 127 \ noduplicate 128 \ nofree 129 \ noimplicitfloat 130 \ noinline 131 \ nomerge 132 \ nonlazybind 133 \ nonnull 134 \ noprofile 135 \ norecurse 136 \ noredzone 137 \ noreturn 138 \ nosync 139 \ noundef 140 \ nounwind 141 \ null_pointer_is_valid 142 \ optforfuzzing 143 \ optnone 144 \ optsize 145 \ personality 146 \ preallocated 147 \ private 148 \ protected 149 \ ptx_device 150 \ ptx_kernel 151 \ readnone 152 \ readonly 153 \ release 154 \ returned 155 \ returns_twice 156 \ safestack 157 \ sanitize_address 158 \ sanitize_hwaddress 159 \ sanitize_memory 160 \ sanitize_memtag 161 \ sanitize_thread 162 \ section 163 \ seq_cst 164 \ shadowcallstack 165 \ sideeffect 166 \ signext 167 \ source_filename 168 \ speculatable 169 \ speculative_load_hardening 170 \ spir_func 171 \ spir_kernel 172 \ sret 173 \ ssp 174 \ sspreq 175 \ sspstrong 176 \ strictfp 177 \ swiftcc 178 \ swifterror 179 \ swifttailcc 180 \ swiftself 181 \ syncscope 182 \ tail 183 \ tailcc 184 \ target 185 \ thread_local 186 \ to 187 \ triple 188 \ unnamed_addr 189 \ unordered 190 \ uselistorder 191 \ uselistorder_bb 192 \ uwtable 193 \ volatile 194 \ weak 195 \ weak_odr 196 \ willreturn 197 \ win64cc 198 \ within 199 \ writeonly 200 \ x86_64_sysvcc 201 \ x86_fastcallcc 202 \ x86_stdcallcc 203 \ x86_thiscallcc 204 \ zeroext 205 206" Obsolete keywords. 207syn keyword llvmError getresult begin end 208 209" Misc syntax. 210syn match llvmNoName /[%@!]\d\+\>/ 211syn match llvmNumber /-\?\<\d\+\>/ 212syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/ 213syn match llvmFloat /\<0x\x\+\>/ 214syn keyword llvmBoolean true false 215syn keyword llvmConstant zeroinitializer undef null none poison vscale 216syn match llvmComment /;.*$/ 217syn region llvmString start=/"/ skip=/\\"/ end=/"/ 218syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/ 219syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/ 220 221" Named metadata and specialized metadata keywords. 222syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/ 223syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/ 224syn match llvmType /!\zs\a\+\ze\s*(/ 225syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/ 226syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/ 227syn match llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/ 228syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/ 229syn match llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/ 230syn match llvmConstant /\<DIFlag[A-Za-z]\+\>/ 231 232" Syntax-highlight lit test commands and bug numbers. 233syn match llvmSpecialComment /;\s*PR\d*\s*$/ 234syn match llvmSpecialComment /;\s*REQUIRES:.*$/ 235syn match llvmSpecialComment /;\s*RUN:.*$/ 236syn match llvmSpecialComment /;\s*ALLOW_RETRIES:.*$/ 237syn match llvmSpecialComment /;\s*CHECK:.*$/ 238syn match llvmSpecialComment /;\s*CHECK-EMPTY:\s*$/ 239syn match llvmSpecialComment /\v;\s*CHECK-(NEXT|NOT|DAG|SAME|LABEL|COUNT-\d+):.*$/ 240syn match llvmSpecialComment /;\s*XFAIL:.*$/ 241 242if version >= 508 || !exists("did_c_syn_inits") 243 if version < 508 244 let did_c_syn_inits = 1 245 command -nargs=+ HiLink hi link <args> 246 else 247 command -nargs=+ HiLink hi def link <args> 248 endif 249 250 HiLink llvmType Type 251 HiLink llvmStatement Statement 252 HiLink llvmNumber Number 253 HiLink llvmComment Comment 254 HiLink llvmString String 255 HiLink llvmLabel Label 256 HiLink llvmKeyword Keyword 257 HiLink llvmBoolean Boolean 258 HiLink llvmFloat Float 259 HiLink llvmNoName Identifier 260 HiLink llvmConstant Constant 261 HiLink llvmSpecialComment SpecialComment 262 HiLink llvmError Error 263 HiLink llvmIdentifier Identifier 264 265 delcommand HiLink 266endif 267 268let b:current_syntax = "llvm" 269