-*- mode: Text -*-

--------------------------------------------------------------------

C-Vise pre-release list:

- make sure copyright years are up to date
- test on Windows, Linux, OS X

--------------------------------------------------------------------

C-Vise TODO list:

turn
  if (foo) goto bar; baz; bar:
into
  if (!foo) baz

it would be nice to have a way to glue multiple C/C++ files into a
single compilation unit, as an alternative to multi-file reduction
- CIL can do this but it's pretty invasive

make llvm-svn-compatible build against a specific LLVM version
  the CI is the problem here
  could solve it like we do in Souper with a pre-built LLVM tarball

add modes for Rust and Javascript

add optional pass timeout?

more shortcut keys?

constant folding

partial #define processing

remove zero-length files at the end of reduction?

in localize_headers, correctly deal with the case where the
  original C/C++ file is in the current dir

maybe implement passes to:
  ensure that identifiers first appear in sorted order
  identifiers are dense
  reduce the non-header-file part first, and use PCHs
  merge adjacent strings

maybe add a format string reduction pass that eliminates a format
  specifier and also the corresponding argument

write some documentation about creating a c-vise pass: side effects,
directory restrictions, etc.

Konstantin suggestion:
  deal with un-preprocessed code in a smart way, for example by
  incrementally preprocessing files from inside c-vise

implement suggestion from Joerg Sonnenberger:
  do transformations in chunks, like the line-reducer pass already does
  requires a good model of when this will be profitable

--------------------------------------------------------------------

clang_delta TODO list:

keep working to eliminate template stuff

replace for-loops with expressions guessed from initializers
  guess that it executes 0 and 1 times

change operators to other operators, e.g., replace / with +

- From Konstantin Tokarev

As you may know, there is a clang-based tool "Include What You Use"
[1]. I think similar approach could be useful in C-Vise to remove
whole header files instead of separate lines. Though I'm not sure it's
feasible without non-preprocessed source file and compilation command
line available.

I can imagine the next algorithm of reduction:

1. Reduce only the last section of translation unit corresponding to
original source file without #includes using all available passes.
2. Try to remove sections corresponding to "unused" headers
3. Move to section N-1 and proceed.

Assuming that "interesting" fragment of code is located in sections
with big numbers (source file and local headers) while first sections
contain library headers, this approach might be more efficient than
traditional line-based reduction.

[1] http://code.google.com/p/include-what-you-use

- (low priority) format string reductions:

 * remove anything that's not a %d or whatever from the format string

 * remove a %d directive and also the corresponding argument from a printf

- (low priority) constant-propagation

- (low priority) replace peephole passes in c_vise

--------------------------------------------------------------------
