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 float double x86_fp80 fp128 ppc_fp128 18syn keyword llvmType label metadata x86_mmx 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 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 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 \ alwaysinline 48 \ appending 49 \ argmemonly 50 \ arm_aapcscc 51 \ arm_aapcs_vfpcc 52 \ arm_apcscc 53 \ asm 54 \ atomic 55 \ available_externally 56 \ blockaddress 57 \ byval 58 \ c 59 \ catch 60 \ caller 61 \ cc 62 \ ccc 63 \ cleanup 64 \ coldcc 65 \ comdat 66 \ common 67 \ constant 68 \ datalayout 69 \ declare 70 \ default 71 \ define 72 \ deplibs 73 \ dereferenceable 74 \ distinct 75 \ dllexport 76 \ dllimport 77 \ except 78 \ external 79 \ externally_initialized 80 \ extern_weak 81 \ fastcc 82 \ filter 83 \ from 84 \ gc 85 \ global 86 \ hhvmcc 87 \ hhvm_ccc 88 \ hidden 89 \ initialexec 90 \ inlinehint 91 \ inreg 92 \ inteldialect 93 \ intel_ocl_bicc 94 \ internal 95 \ linkonce 96 \ linkonce_odr 97 \ localdynamic 98 \ localexec 99 \ local_unnamed_addr 100 \ minsize 101 \ module 102 \ monotonic 103 \ msp430_intrcc 104 \ musttail 105 \ naked 106 \ nest 107 \ noalias 108 \ nocapture 109 \ noimplicitfloat 110 \ noinline 111 \ nonlazybind 112 \ norecurse 113 \ noredzone 114 \ noreturn 115 \ nounwind 116 \ optnone 117 \ optsize 118 \ personality 119 \ private 120 \ protected 121 \ ptx_device 122 \ ptx_kernel 123 \ readnone 124 \ readonly 125 \ release 126 \ returns_twice 127 \ sanitize_address 128 \ sanitize_memory 129 \ sanitize_thread 130 \ section 131 \ seq_cst 132 \ sideeffect 133 \ signext 134 \ singlethread 135 \ source_filename 136 \ spir_func 137 \ spir_kernel 138 \ sret 139 \ ssp 140 \ sspreq 141 \ sspstrong 142 \ swiftcc 143 \ tail 144 \ target 145 \ thread_local 146 \ to 147 \ triple 148 \ unnamed_addr 149 \ unordered 150 \ uselistorder 151 \ uselistorder_bb 152 \ uwtable 153 \ volatile 154 \ weak 155 \ weak_odr 156 \ within 157 \ writeonly 158 \ x86_64_sysvcc 159 \ x86_64_win64cc 160 \ x86_fastcallcc 161 \ x86_stdcallcc 162 \ x86_thiscallcc 163 \ zeroext 164 165" Obsolete keywords. 166syn keyword llvmError getresult begin end 167 168" Misc syntax. 169syn match llvmNoName /[%@!]\d\+\>/ 170syn match llvmNumber /-\?\<\d\+\>/ 171syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/ 172syn match llvmFloat /\<0x\x\+\>/ 173syn keyword llvmBoolean true false 174syn keyword llvmConstant zeroinitializer undef null none 175syn match llvmComment /;.*$/ 176syn region llvmString start=/"/ skip=/\\"/ end=/"/ 177syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/ 178syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/ 179 180" Named metadata and specialized metadata keywords. 181syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/ 182syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/ 183syn match llvmType /!\zs\a\+\ze\s*(/ 184syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/ 185syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/ 186syn match llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/ 187syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/ 188syn match llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/ 189syn match llvmConstant /\<DIFlag[A-Za-z]\+\>/ 190 191" Syntax-highlight lit test commands and bug numbers. 192syn match llvmSpecialComment /;\s*PR\d*\s*$/ 193syn match llvmSpecialComment /;\s*REQUIRES:.*$/ 194syn match llvmSpecialComment /;\s*RUN:.*$/ 195syn match llvmSpecialComment /;\s*XFAIL:.*$/ 196 197if version >= 508 || !exists("did_c_syn_inits") 198 if version < 508 199 let did_c_syn_inits = 1 200 command -nargs=+ HiLink hi link <args> 201 else 202 command -nargs=+ HiLink hi def link <args> 203 endif 204 205 HiLink llvmType Type 206 HiLink llvmStatement Statement 207 HiLink llvmNumber Number 208 HiLink llvmComment Comment 209 HiLink llvmString String 210 HiLink llvmLabel Label 211 HiLink llvmKeyword Keyword 212 HiLink llvmBoolean Boolean 213 HiLink llvmFloat Float 214 HiLink llvmNoName Identifier 215 HiLink llvmConstant Constant 216 HiLink llvmSpecialComment SpecialComment 217 HiLink llvmError Error 218 HiLink llvmIdentifier Identifier 219 220 delcommand HiLink 221endif 222 223let b:current_syntax = "llvm" 224