Preserving 'nonnull' metadata in SimplifyCFG

When we hoist two loads above an if, we can preserve the nonnull metadata.  We could also do the same for sinking them, but we appear to not handle metadata at all in that case.

Thanks to Hal for the review.

Differential Revision: http://reviews.llvm.org/D5910

llvm-svn: 220392
This commit is contained in:
Philip Reames 2014-10-22 16:37:13 +00:00
parent a92fa44740
commit d92c2a7592
1 changed files with 4 additions and 1 deletions

View File

@ -1061,7 +1061,8 @@ static bool HoistThenElseCodeToIf(BranchInst *BI, const DataLayout *DL) {
LLVMContext::MD_tbaa, LLVMContext::MD_tbaa,
LLVMContext::MD_range, LLVMContext::MD_range,
LLVMContext::MD_fpmath, LLVMContext::MD_fpmath,
LLVMContext::MD_invariant_load LLVMContext::MD_invariant_load,
LLVMContext::MD_nonnull
}; };
combineMetadata(I1, I2, KnownIDs); combineMetadata(I1, I2, KnownIDs);
I2->eraseFromParent(); I2->eraseFromParent();
@ -1311,6 +1312,8 @@ static bool SinkThenElseCodeToEnd(BranchInst *BI1) {
if (!I2->use_empty()) if (!I2->use_empty())
I2->replaceAllUsesWith(I1); I2->replaceAllUsesWith(I1);
I1->intersectOptionalDataWith(I2); I1->intersectOptionalDataWith(I2);
// TODO: Use combineMetadata here to preserve what metadata we can
// (analogous to the hoisting case above).
I2->eraseFromParent(); I2->eraseFromParent();
if (UpdateRE1) if (UpdateRE1)