diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-08-01 21:51:52 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-08-01 21:51:52 +0000 |
commit | 00f20ace9a5f60497f0fe3b8cc59a9d8ad9b4c03 (patch) | |
tree | d55d354fdc67ef5a008f738e290344775aea8f49 /llvm/lib/Bitcode/Reader/BitcodeReader.h | |
parent | d44c023b21150a688887ace87c2d10a7792448fa (diff) | |
download | bcm5719-llvm-00f20ace9a5f60497f0fe3b8cc59a9d8ad9b4c03.tar.gz bcm5719-llvm-00f20ace9a5f60497f0fe3b8cc59a9d8ad9b4c03.zip |
BitcodeReader: Change mechanics of BlockAddress forward references, NFC
Now that we can reliably handle forward references to `BlockAddress`
(r214563), change the mechanics to simplify predicting use-list order.
Previously, we created dummy `GlobalVariable`s to represent block
addresses. After every function was materialized, we'd go through any
forward references to its blocks and RAUW them with a proper
`BlockAddress` constant. This causes some (potentially a lot of)
unnecessary use-list churn, since any constant expression that it's a
part of will need to be rematerialized as well.
Instead, pre-construct a `BasicBlock` immediately -- without attaching
it to its (empty) `Function` -- and use that to construct a
`BlockAddress`. This constant will not have to be regenerated. When
the function body is parsed, hook this pre-constructed basic block up
in the right place using `BasicBlock::insertInto()`.
Both before and after this change, the IR is temporarily in an invalid
state that gets resolved when `materializeForwardReferencedFunctions()`
gets called.
This is a prep commit that's part of PR5680, but the only functionality
change is the reduction of churn in the constant pool.
llvm-svn: 214570
Diffstat (limited to 'llvm/lib/Bitcode/Reader/BitcodeReader.h')
-rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.h | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.h b/llvm/lib/Bitcode/Reader/BitcodeReader.h index 341e134302d..a25ab37a4e3 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.h +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.h @@ -179,10 +179,10 @@ class BitcodeReader : public GVMaterializer { /// stream. DenseMap<Function*, uint64_t> DeferredFunctionInfo; - /// BlockAddrFwdRefs - These are blockaddr references to basic blocks. These - /// are resolved lazily when functions are loaded. - typedef std::pair<unsigned, GlobalVariable*> BlockAddrRefTy; - DenseMap<Function*, std::vector<BlockAddrRefTy> > BlockAddrFwdRefs; + /// These are basic blocks forward-referenced by block addresses. They are + /// inserted lazily into functions when they're loaded. + typedef std::pair<unsigned, BasicBlock *> BasicBlockRefTy; + DenseMap<Function *, std::vector<BasicBlockRefTy>> BasicBlockFwdRefs; /// UseRelativeIDs - Indicates that we are using a new encoding for /// instruction operands where most operands in the current |