Skip to content
  • Daniel Sanders's avatar
    [globalisel][tablegen] Generate rule coverage and use it to identify untested rules · f76f3154
    Daniel Sanders authored
    Summary:
    This patch adds a LLVM_ENABLE_GISEL_COV which, like LLVM_ENABLE_DAGISEL_COV,
    causes TableGen to instrument the generated table to collect rule coverage
    information. However, LLVM_ENABLE_GISEL_COV goes a bit further than
    LLVM_ENABLE_DAGISEL_COV. The information is written to files
    (${CMAKE_BINARY_DIR}/gisel-coverage-* by default). These files can then be
    concatenated into ${LLVM_GISEL_COV_PREFIX}-all after which TableGen will
    read this information and use it to emit warnings about untested rules.
    
    This technique could also be used by SelectionDAG and can be further
    extended to detect hot rules and give them priority over colder rules.
    
    Usage:
    * Enable LLVM_ENABLE_GISEL_COV in CMake
    * Build the compiler and run some tests
    * cat gisel-coverage-[0-9]* > gisel-coverage-all
    * Delete lib/Target/*/*GenGlobalISel.inc*
    * Build the compiler
    
    Known issues:
    * ${LLVM_GISEL_COV_PREFIX}-all must be generated as a manual
      step due to a lack of a portable 'cat' command. It should be the
      concatenation of all ${LLVM_GISEL_COV_PREFIX}-[0-9]* files.
    * There's no mechanism to discard coverage information when the ruleset
      changes
    
    Depends on D39742
    
    Reviewers: ab, qcolombet, t.p.northover, aditya_nandakumar, rovka
    
    Reviewed By: rovka
    
    Subscribers: vsk, arsenm, nhaehnle, mgorny, kristof.beyls, javed.absar, igorb, llvm-commits
    
    Differential Revision: https://reviews.llvm.org/D39747
    
    llvm-svn: 318356
    f76f3154
Loading