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