aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CodeGenModule.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-08-01 21:51:52 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-08-01 21:51:52 +0000
commit00f20ace9a5f60497f0fe3b8cc59a9d8ad9b4c03 (patch)
treed55d354fdc67ef5a008f738e290344775aea8f49 /clang/lib/CodeGen/CodeGenModule.cpp
parentd44c023b21150a688887ace87c2d10a7792448fa (diff)
downloadllvm-00f20ace9a5f60497f0fe3b8cc59a9d8ad9b4c03.zip
llvm-00f20ace9a5f60497f0fe3b8cc59a9d8ad9b4c03.tar.gz
llvm-00f20ace9a5f60497f0fe3b8cc59a9d8ad9b4c03.tar.bz2
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 'clang/lib/CodeGen/CodeGenModule.cpp')
0 files changed, 0 insertions, 0 deletions