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