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" 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 \ no_cfi 128 \ noduplicate 129 \ nofree 130 \ noimplicitfloat 131 \ noinline 132 \ nomerge 133 \ nonlazybind 134 \ nonnull 135 \ noprofile 136 \ norecurse 137 \ noredzone 138 \ noreturn 139 \ nosync 140 \ noundef 141 \ nounwind 142 \ nosanitize_coverage 143 \ null_pointer_is_valid 144 \ optforfuzzing 145 \ optnone 146 \ optsize 147 \ personality 148 \ preallocated 149 \ private 150 \ protected 151 \ ptx_device 152 \ ptx_kernel 153 \ readnone 154 \ readonly 155 \ release 156 \ returned 157 \ returns_twice 158 \ safestack 159 \ sanitize_address 160 \ sanitize_hwaddress 161 \ sanitize_memory 162 \ sanitize_memtag 163 \ sanitize_thread 164 \ section 165 \ seq_cst 166 \ shadowcallstack 167 \ sideeffect 168 \ signext 169 \ source_filename 170 \ speculatable 171 \ speculative_load_hardening 172 \ spir_func 173 \ spir_kernel 174 \ sret 175 \ ssp 176 \ sspreq 177 \ sspstrong 178 \ strictfp 179 \ swiftcc 180 \ swifterror 181 \ swifttailcc 182 \ swiftself 183 \ syncscope 184 \ tail 185 \ tailcc 186 \ target 187 \ thread_local 188 \ to 189 \ triple 190 \ unnamed_addr 191 \ unordered 192 \ uselistorder 193 \ uselistorder_bb 194 \ uwtable 195 \ volatile 196 \ weak 197 \ weak_odr 198 \ willreturn 199 \ win64cc 200 \ within 201 \ writeonly 202 \ x86_64_sysvcc 203 \ x86_fastcallcc 204 \ x86_stdcallcc 205 \ x86_thiscallcc 206 \ zeroext 207 208" Obsolete keywords. 209syn keyword llvmError getresult begin end 210 211" Misc syntax. 212syn match llvmNoName /[%@!]\d\+\>/ 213syn match llvmNumber /-\?\<\d\+\>/ 214syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/ 215syn match llvmFloat /\<0x\x\+\>/ 216syn keyword llvmBoolean true false 217syn keyword llvmConstant zeroinitializer undef null none poison vscale 218syn match llvmComment /;.*$/ 219syn region llvmString start=/"/ skip=/\\"/ end=/"/ 220syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/ 221syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/ 222 223" Named metadata and specialized metadata keywords. 224syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/ 225syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/ 226syn match llvmType /!\zs\a\+\ze\s*(/ 227syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/ 228syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/ 229syn match llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/ 230syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/ 231syn match llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/ 232syn match llvmConstant /\<DIFlag[A-Za-z]\+\>/ 233 234" Syntax-highlight lit test commands and bug numbers. 235syn match llvmSpecialComment /;\s*PR\d*\s*$/ 236syn match llvmSpecialComment /;\s*REQUIRES:.*$/ 237syn match llvmSpecialComment /;\s*RUN:.*$/ 238syn match llvmSpecialComment /;\s*ALLOW_RETRIES:.*$/ 239syn match llvmSpecialComment /;\s*CHECK:.*$/ 240syn match llvmSpecialComment /;\s*CHECK-EMPTY:\s*$/ 241syn match llvmSpecialComment /\v;\s*CHECK-(NEXT|NOT|DAG|SAME|LABEL|COUNT-\d+):.*$/ 242syn match llvmSpecialComment /;\s*XFAIL:.*$/ 243 244if version >= 508 || !exists("did_c_syn_inits") 245 if version < 508 246 let did_c_syn_inits = 1 247 command -nargs=+ HiLink hi link <args> 248 else 249 command -nargs=+ HiLink hi def link <args> 250 endif 251 252 HiLink llvmType Type 253 HiLink llvmStatement Statement 254 HiLink llvmNumber Number 255 HiLink llvmComment Comment 256 HiLink llvmString String 257 HiLink llvmLabel Label 258 HiLink llvmKeyword Keyword 259 HiLink llvmBoolean Boolean 260 HiLink llvmFloat Float 261 HiLink llvmNoName Identifier 262 HiLink llvmConstant Constant 263 HiLink llvmSpecialComment SpecialComment 264 HiLink llvmError Error 265 HiLink llvmIdentifier Identifier 266 267 delcommand HiLink 268endif 269 270let b:current_syntax = "llvm" 271