From 1b8af6a8f0aee8772df8a8e1551c0097d2558fc7 Mon Sep 17 00:00:00 2001 From: Philip Reames Date: Wed, 22 Oct 2014 16:37:13 +0000 Subject: [PATCH] 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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220392 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Utils/SimplifyCFG.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/Transforms/Utils/SimplifyCFG.cpp b/lib/Transforms/Utils/SimplifyCFG.cpp index d79f4ce013f..0e4d779c52e 100644 --- a/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/lib/Transforms/Utils/SimplifyCFG.cpp @@ -1061,7 +1061,8 @@ static bool HoistThenElseCodeToIf(BranchInst *BI, const DataLayout *DL) { LLVMContext::MD_tbaa, LLVMContext::MD_range, LLVMContext::MD_fpmath, - LLVMContext::MD_invariant_load + LLVMContext::MD_invariant_load, + LLVMContext::MD_nonnull }; combineMetadata(I1, I2, KnownIDs); I2->eraseFromParent(); @@ -1311,6 +1312,8 @@ static bool SinkThenElseCodeToEnd(BranchInst *BI1) { if (!I2->use_empty()) I2->replaceAllUsesWith(I1); I1->intersectOptionalDataWith(I2); + // TODO: Use combineMetadata here to preserve what metadata we can + // (analogous to the hoisting case above). I2->eraseFromParent(); if (UpdateRE1) -- 2.34.1