UseListOrder: Visit global values
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Wed, 30 Jul 2014 17:51:09 +0000 (17:51 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Wed, 30 Jul 2014 17:51:09 +0000 (17:51 +0000)
commitc69b5160567234ccc0d286f37059d52c63343c11
treee2fe757ee8528cfaf95009c361f2c93695cab4cc
parent9c29666edc14e2dc340eb5013c5ad05a86681bb6
UseListOrder: Visit global values

When predicting use-list order, we visit functions in reverse order
followed by `GlobalValue`s and write out use-lists at the first
opportunity.  In the reader, this will translate to *after* the last use
has been added.

For this to work, we actually need to descend into `GlobalValue`s.
Added a targeted test in `use-list-order.ll` and `RUN` lines to the
newly passing tests in `test/Bitcode`.

There are two remaining failures in `test/Bitcode`:

  - blockaddress.ll: I haven't thought through how to model the way
    block addresses change the order of use-lists (or how to work around
    it).

  - metadata-2.ll: There's an old-style `@llvm.used` global array here
    that I suspect the .ll parser isn't upgrading properly.  When it
    round-trips through bitcode, the .bc reader *does* upgrade it, so
    the extra variable (`i8* null`) has an extra use, and the shuffle
    vector doesn't match.

    I think the fix is to upgrade old-style global arrays (or reject
    them?) in the .ll parser.

This is part of PR5680.

llvm-svn: 214321
llvm/lib/Bitcode/Writer/ValueEnumerator.cpp
llvm/test/Bitcode/miscInstructions.3.2.ll
llvm/test/Bitcode/ssse3_palignr.ll
llvm/test/Bitcode/use-list-order.ll
llvm/test/Bitcode/variableArgumentIntrinsic.3.2.ll