Summary: When building with libFuzzer, converting control flow to selects or obscuring the original operands of CMPs reduces the effectiveness of libFuzzer's heuristics. This patch provides an attribute to disable or modify certain optimizations for optimal fuzzing signal. Provides a less aggressive alternative to https://reviews.llvm.org/D44057. Reviewers: vitalybuka, davide, arsenm, hfinkel Reviewed By: vitalybuka Subscribers: junbuml, mehdi_amini, wdng, javed.absar, hiraditya, llvm-commits, kcc Differential Revision: https://reviews.llvm.org/D44232 llvm-svn: 328214
382 lines
6.0 KiB
C++
382 lines
6.0 KiB
C++
//===- LLToken.h - Token Codes for LLVM Assembly Files ----------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file defines the enums for the .ll lexer.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_ASMPARSER_LLTOKEN_H
|
|
#define LLVM_LIB_ASMPARSER_LLTOKEN_H
|
|
|
|
namespace llvm {
|
|
namespace lltok {
|
|
enum Kind {
|
|
// Markers
|
|
Eof,
|
|
Error,
|
|
|
|
// Tokens with no info.
|
|
dotdotdot, // ...
|
|
equal,
|
|
comma, // = ,
|
|
star, // *
|
|
lsquare,
|
|
rsquare, // [ ]
|
|
lbrace,
|
|
rbrace, // { }
|
|
less,
|
|
greater, // < >
|
|
lparen,
|
|
rparen, // ( )
|
|
exclaim, // !
|
|
bar, // |
|
|
|
|
kw_x,
|
|
kw_true,
|
|
kw_false,
|
|
kw_declare,
|
|
kw_define,
|
|
kw_global,
|
|
kw_constant,
|
|
|
|
kw_dso_local,
|
|
kw_dso_preemptable,
|
|
|
|
kw_private,
|
|
kw_internal,
|
|
kw_linkonce,
|
|
kw_linkonce_odr,
|
|
kw_weak, // Used as a linkage, and a modifier for "cmpxchg".
|
|
kw_weak_odr,
|
|
kw_appending,
|
|
kw_dllimport,
|
|
kw_dllexport,
|
|
kw_common,
|
|
kw_available_externally,
|
|
kw_default,
|
|
kw_hidden,
|
|
kw_protected,
|
|
kw_unnamed_addr,
|
|
kw_local_unnamed_addr,
|
|
kw_externally_initialized,
|
|
kw_extern_weak,
|
|
kw_external,
|
|
kw_thread_local,
|
|
kw_localdynamic,
|
|
kw_initialexec,
|
|
kw_localexec,
|
|
kw_zeroinitializer,
|
|
kw_undef,
|
|
kw_null,
|
|
kw_none,
|
|
kw_to,
|
|
kw_caller,
|
|
kw_within,
|
|
kw_from,
|
|
kw_tail,
|
|
kw_musttail,
|
|
kw_notail,
|
|
kw_target,
|
|
kw_triple,
|
|
kw_source_filename,
|
|
kw_unwind,
|
|
kw_deplibs, // FIXME: Remove in 4.0
|
|
kw_datalayout,
|
|
kw_volatile,
|
|
kw_atomic,
|
|
kw_unordered,
|
|
kw_monotonic,
|
|
kw_acquire,
|
|
kw_release,
|
|
kw_acq_rel,
|
|
kw_seq_cst,
|
|
kw_syncscope,
|
|
kw_nnan,
|
|
kw_ninf,
|
|
kw_nsz,
|
|
kw_arcp,
|
|
kw_contract,
|
|
kw_reassoc,
|
|
kw_afn,
|
|
kw_fast,
|
|
kw_nuw,
|
|
kw_nsw,
|
|
kw_exact,
|
|
kw_inbounds,
|
|
kw_inrange,
|
|
kw_align,
|
|
kw_addrspace,
|
|
kw_section,
|
|
kw_alias,
|
|
kw_ifunc,
|
|
kw_module,
|
|
kw_asm,
|
|
kw_sideeffect,
|
|
kw_alignstack,
|
|
kw_inteldialect,
|
|
kw_gc,
|
|
kw_prefix,
|
|
kw_prologue,
|
|
kw_c,
|
|
|
|
kw_cc,
|
|
kw_ccc,
|
|
kw_fastcc,
|
|
kw_coldcc,
|
|
kw_intel_ocl_bicc,
|
|
kw_x86_stdcallcc,
|
|
kw_x86_fastcallcc,
|
|
kw_x86_thiscallcc,
|
|
kw_x86_vectorcallcc,
|
|
kw_x86_regcallcc,
|
|
kw_arm_apcscc,
|
|
kw_arm_aapcscc,
|
|
kw_arm_aapcs_vfpcc,
|
|
kw_msp430_intrcc,
|
|
kw_avr_intrcc,
|
|
kw_avr_signalcc,
|
|
kw_ptx_kernel,
|
|
kw_ptx_device,
|
|
kw_spir_kernel,
|
|
kw_spir_func,
|
|
kw_x86_64_sysvcc,
|
|
kw_win64cc,
|
|
kw_webkit_jscc,
|
|
kw_anyregcc,
|
|
kw_swiftcc,
|
|
kw_preserve_mostcc,
|
|
kw_preserve_allcc,
|
|
kw_ghccc,
|
|
kw_x86_intrcc,
|
|
kw_hhvmcc,
|
|
kw_hhvm_ccc,
|
|
kw_cxx_fast_tlscc,
|
|
kw_amdgpu_vs,
|
|
kw_amdgpu_ls,
|
|
kw_amdgpu_hs,
|
|
kw_amdgpu_es,
|
|
kw_amdgpu_gs,
|
|
kw_amdgpu_ps,
|
|
kw_amdgpu_cs,
|
|
kw_amdgpu_kernel,
|
|
|
|
// Attributes:
|
|
kw_attributes,
|
|
kw_allocsize,
|
|
kw_alwaysinline,
|
|
kw_argmemonly,
|
|
kw_sanitize_address,
|
|
kw_sanitize_hwaddress,
|
|
kw_builtin,
|
|
kw_byval,
|
|
kw_inalloca,
|
|
kw_cold,
|
|
kw_convergent,
|
|
kw_dereferenceable,
|
|
kw_dereferenceable_or_null,
|
|
kw_inaccessiblememonly,
|
|
kw_inaccessiblemem_or_argmemonly,
|
|
kw_inlinehint,
|
|
kw_inreg,
|
|
kw_jumptable,
|
|
kw_minsize,
|
|
kw_naked,
|
|
kw_nest,
|
|
kw_noalias,
|
|
kw_nobuiltin,
|
|
kw_nocapture,
|
|
kw_noduplicate,
|
|
kw_noimplicitfloat,
|
|
kw_noinline,
|
|
kw_norecurse,
|
|
kw_nonlazybind,
|
|
kw_nonnull,
|
|
kw_noredzone,
|
|
kw_noreturn,
|
|
kw_nocf_check,
|
|
kw_nounwind,
|
|
kw_optforfuzzing,
|
|
kw_optnone,
|
|
kw_optsize,
|
|
kw_readnone,
|
|
kw_readonly,
|
|
kw_returned,
|
|
kw_returns_twice,
|
|
kw_signext,
|
|
kw_speculatable,
|
|
kw_ssp,
|
|
kw_sspreq,
|
|
kw_sspstrong,
|
|
kw_safestack,
|
|
kw_sret,
|
|
kw_sanitize_thread,
|
|
kw_sanitize_memory,
|
|
kw_strictfp,
|
|
kw_swifterror,
|
|
kw_swiftself,
|
|
kw_uwtable,
|
|
kw_writeonly,
|
|
kw_zeroext,
|
|
|
|
kw_type,
|
|
kw_opaque,
|
|
|
|
kw_comdat,
|
|
|
|
// Comdat types
|
|
kw_any,
|
|
kw_exactmatch,
|
|
kw_largest,
|
|
kw_noduplicates,
|
|
kw_samesize,
|
|
|
|
kw_eq,
|
|
kw_ne,
|
|
kw_slt,
|
|
kw_sgt,
|
|
kw_sle,
|
|
kw_sge,
|
|
kw_ult,
|
|
kw_ugt,
|
|
kw_ule,
|
|
kw_uge,
|
|
kw_oeq,
|
|
kw_one,
|
|
kw_olt,
|
|
kw_ogt,
|
|
kw_ole,
|
|
kw_oge,
|
|
kw_ord,
|
|
kw_uno,
|
|
kw_ueq,
|
|
kw_une,
|
|
|
|
// atomicrmw operations that aren't also instruction keywords.
|
|
kw_xchg,
|
|
kw_nand,
|
|
kw_max,
|
|
kw_min,
|
|
kw_umax,
|
|
kw_umin,
|
|
|
|
// Instruction Opcodes (Opcode in UIntVal).
|
|
kw_add,
|
|
kw_fadd,
|
|
kw_sub,
|
|
kw_fsub,
|
|
kw_mul,
|
|
kw_fmul,
|
|
kw_udiv,
|
|
kw_sdiv,
|
|
kw_fdiv,
|
|
kw_urem,
|
|
kw_srem,
|
|
kw_frem,
|
|
kw_shl,
|
|
kw_lshr,
|
|
kw_ashr,
|
|
kw_and,
|
|
kw_or,
|
|
kw_xor,
|
|
kw_icmp,
|
|
kw_fcmp,
|
|
|
|
kw_phi,
|
|
kw_call,
|
|
kw_trunc,
|
|
kw_zext,
|
|
kw_sext,
|
|
kw_fptrunc,
|
|
kw_fpext,
|
|
kw_uitofp,
|
|
kw_sitofp,
|
|
kw_fptoui,
|
|
kw_fptosi,
|
|
kw_inttoptr,
|
|
kw_ptrtoint,
|
|
kw_bitcast,
|
|
kw_addrspacecast,
|
|
kw_select,
|
|
kw_va_arg,
|
|
|
|
kw_landingpad,
|
|
kw_personality,
|
|
kw_cleanup,
|
|
kw_catch,
|
|
kw_filter,
|
|
|
|
kw_ret,
|
|
kw_br,
|
|
kw_switch,
|
|
kw_indirectbr,
|
|
kw_invoke,
|
|
kw_resume,
|
|
kw_unreachable,
|
|
kw_cleanupret,
|
|
kw_catchswitch,
|
|
kw_catchret,
|
|
kw_catchpad,
|
|
kw_cleanuppad,
|
|
|
|
kw_alloca,
|
|
kw_load,
|
|
kw_store,
|
|
kw_fence,
|
|
kw_cmpxchg,
|
|
kw_atomicrmw,
|
|
kw_getelementptr,
|
|
|
|
kw_extractelement,
|
|
kw_insertelement,
|
|
kw_shufflevector,
|
|
kw_extractvalue,
|
|
kw_insertvalue,
|
|
kw_blockaddress,
|
|
|
|
// Metadata types.
|
|
kw_distinct,
|
|
|
|
// Use-list order directives.
|
|
kw_uselistorder,
|
|
kw_uselistorder_bb,
|
|
|
|
// Unsigned Valued tokens (UIntVal).
|
|
GlobalID, // @42
|
|
LocalVarID, // %42
|
|
AttrGrpID, // #42
|
|
|
|
// String valued tokens (StrVal).
|
|
LabelStr, // foo:
|
|
GlobalVar, // @foo @"foo"
|
|
ComdatVar, // $foo
|
|
LocalVar, // %foo %"foo"
|
|
MetadataVar, // !foo
|
|
StringConstant, // "foo"
|
|
DwarfTag, // DW_TAG_foo
|
|
DwarfAttEncoding, // DW_ATE_foo
|
|
DwarfVirtuality, // DW_VIRTUALITY_foo
|
|
DwarfLang, // DW_LANG_foo
|
|
DwarfCC, // DW_CC_foo
|
|
EmissionKind, // lineTablesOnly
|
|
DwarfOp, // DW_OP_foo
|
|
DIFlag, // DIFlagFoo
|
|
DwarfMacinfo, // DW_MACINFO_foo
|
|
ChecksumKind, // CSK_foo
|
|
|
|
// Type valued tokens (TyVal).
|
|
Type,
|
|
|
|
APFloat, // APFloatVal
|
|
APSInt // APSInt
|
|
};
|
|
} // end namespace lltok
|
|
} // end namespace llvm
|
|
|
|
#endif
|