diff options
Diffstat (limited to 'syntax/llvm.vim')
-rw-r--r-- | syntax/llvm.vim | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/syntax/llvm.vim b/syntax/llvm.vim new file mode 100644 index 00000000..87202ede --- /dev/null +++ b/syntax/llvm.vim @@ -0,0 +1,237 @@ +if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'llvm') != -1 + finish +endif + +" Vim syntax file +" Language: llvm +" Maintainer: The LLVM team, http://llvm.org/ +" Version: $Revision$ + +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +syn case match + +" Types. +" Types also include struct, array, vector, etc. but these don't +" benefit as much from having dedicated highlighting rules. +syn keyword llvmType void half float double x86_fp80 fp128 ppc_fp128 +syn keyword llvmType label metadata x86_mmx +syn keyword llvmType type label opaque token +syn match llvmType /\<i\d\+\>/ + +" Instructions. +" The true and false tokens can be used for comparison opcodes, but it's +" much more common for these tokens to be used for boolean constants. +syn keyword llvmStatement add addrspacecast alloca and arcp ashr atomicrmw +syn keyword llvmStatement bitcast br catchpad catchswitch catchret call +syn keyword llvmStatement cleanuppad cleanupret cmpxchg eq exact extractelement +syn keyword llvmStatement extractvalue fadd fast fcmp fdiv fence fmul fpext +syn keyword llvmStatement fptosi fptoui fptrunc free frem fsub getelementptr +syn keyword llvmStatement icmp inbounds indirectbr insertelement insertvalue +syn keyword llvmStatement inttoptr invoke landingpad load lshr malloc max min +syn keyword llvmStatement mul nand ne ninf nnan nsw nsz nuw oeq oge ogt ole +syn keyword llvmStatement olt one or ord phi ptrtoint resume ret sdiv select +syn keyword llvmStatement sext sge sgt shl shufflevector sitofp sle slt srem +syn keyword llvmStatement store sub switch trunc udiv ueq uge ugt uitofp ule ult +syn keyword llvmStatement umax umin une uno unreachable unwind urem va_arg +syn keyword llvmStatement xchg xor zext + +" Keywords. +syn keyword llvmKeyword + \ acq_rel + \ acquire + \ addrspace + \ alias + \ align + \ alignstack + \ alwaysinline + \ appending + \ argmemonly + \ arm_aapcscc + \ arm_aapcs_vfpcc + \ arm_apcscc + \ asm + \ atomic + \ available_externally + \ blockaddress + \ builtin + \ byval + \ c + \ catch + \ caller + \ cc + \ ccc + \ cleanup + \ coldcc + \ comdat + \ common + \ constant + \ datalayout + \ declare + \ default + \ define + \ deplibs + \ dereferenceable + \ distinct + \ dllexport + \ dllimport + \ dso_local + \ dso_preemptable + \ except + \ external + \ externally_initialized + \ extern_weak + \ fastcc + \ filter + \ from + \ gc + \ global + \ hhvmcc + \ hhvm_ccc + \ hidden + \ initialexec + \ inlinehint + \ inreg + \ inteldialect + \ intel_ocl_bicc + \ internal + \ linkonce + \ linkonce_odr + \ localdynamic + \ localexec + \ local_unnamed_addr + \ minsize + \ module + \ monotonic + \ msp430_intrcc + \ musttail + \ naked + \ nest + \ noalias + \ nobuiltin + \ nocapture + \ noimplicitfloat + \ noinline + \ nonlazybind + \ nonnull + \ norecurse + \ noredzone + \ noreturn + \ nounwind + \ optnone + \ optsize + \ personality + \ private + \ protected + \ ptx_device + \ ptx_kernel + \ readnone + \ readonly + \ release + \ returned + \ returns_twice + \ sanitize_address + \ sanitize_memory + \ sanitize_thread + \ section + \ seq_cst + \ sideeffect + \ signext + \ syncscope + \ source_filename + \ speculatable + \ spir_func + \ spir_kernel + \ sret + \ ssp + \ sspreq + \ sspstrong + \ strictfp + \ swiftcc + \ tail + \ target + \ thread_local + \ to + \ triple + \ unnamed_addr + \ unordered + \ uselistorder + \ uselistorder_bb + \ uwtable + \ volatile + \ weak + \ weak_odr + \ within + \ writeonly + \ x86_64_sysvcc + \ win64cc + \ x86_fastcallcc + \ x86_stdcallcc + \ x86_thiscallcc + \ zeroext + +" Obsolete keywords. +syn keyword llvmError getresult begin end + +" Misc syntax. +syn match llvmNoName /[%@!]\d\+\>/ +syn match llvmNumber /-\?\<\d\+\>/ +syn match llvmFloat /-\?\<\d\+\.\d*\(e[+-]\d\+\)\?\>/ +syn match llvmFloat /\<0x\x\+\>/ +syn keyword llvmBoolean true false +syn keyword llvmConstant zeroinitializer undef null none +syn match llvmComment /;.*$/ +syn region llvmString start=/"/ skip=/\\"/ end=/"/ +syn match llvmLabel /[-a-zA-Z$._][-a-zA-Z$._0-9]*:/ +syn match llvmIdentifier /[%@][-a-zA-Z$._][-a-zA-Z$._0-9]*/ + +" Named metadata and specialized metadata keywords. +syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*$/ +syn match llvmIdentifier /![-a-zA-Z$._][-a-zA-Z$._0-9]*\ze\s*[=!]/ +syn match llvmType /!\zs\a\+\ze\s*(/ +syn match llvmConstant /\<DW_TAG_[a-z_]\+\>/ +syn match llvmConstant /\<DW_ATE_[a-zA-Z_]\+\>/ +syn match llvmConstant /\<DW_OP_[a-zA-Z0-9_]\+\>/ +syn match llvmConstant /\<DW_LANG_[a-zA-Z0-9_]\+\>/ +syn match llvmConstant /\<DW_VIRTUALITY_[a-z_]\+\>/ +syn match llvmConstant /\<DIFlag[A-Za-z]\+\>/ + +" Syntax-highlight lit test commands and bug numbers. +syn match llvmSpecialComment /;\s*PR\d*\s*$/ +syn match llvmSpecialComment /;\s*REQUIRES:.*$/ +syn match llvmSpecialComment /;\s*RUN:.*$/ +syn match llvmSpecialComment /;\s*CHECK:.*$/ +syn match llvmSpecialComment "\v;\s*CHECK-(NEXT|NOT|DAG|SAME|LABEL):.*$" +syn match llvmSpecialComment /;\s*XFAIL:.*$/ + +if version >= 508 || !exists("did_c_syn_inits") + if version < 508 + let did_c_syn_inits = 1 + command -nargs=+ HiLink hi link <args> + else + command -nargs=+ HiLink hi def link <args> + endif + + HiLink llvmType Type + HiLink llvmStatement Statement + HiLink llvmNumber Number + HiLink llvmComment Comment + HiLink llvmString String + HiLink llvmLabel Label + HiLink llvmKeyword Keyword + HiLink llvmBoolean Boolean + HiLink llvmFloat Float + HiLink llvmNoName Identifier + HiLink llvmConstant Constant + HiLink llvmSpecialComment SpecialComment + HiLink llvmError Error + HiLink llvmIdentifier Identifier + + delcommand HiLink +endif + +let b:current_syntax = "llvm" |