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