Fix DSE to not eliminate volatile loads with no uses.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50370 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2008-04-28 19:51:27 +00:00
parent beb5be0332
commit 00acf97feb
2 changed files with 11 additions and 3 deletions

View File

@ -326,9 +326,9 @@ bool DSE::handleEndBlock(BasicBlock& BB,
// If we encounter a use of the pointer, it is no longer considered dead
if (LoadInst* L = dyn_cast<LoadInst>(BBI)) {
// However, if this load is unused, we can go ahead and remove it, and
// not have to worry about it making our pointer undead!
if (L->use_empty()) {
// However, if this load is unused and not volatile, we can go ahead and remove it,
// and not have to worry about it making our pointer undead!
if (L->use_empty() && !L->isVolatile()) {
MD.removeInstruction(L);
// DCE instructions only used to calculate that load

View File

@ -0,0 +1,8 @@
; RUN: llvm-as < %s | opt -dse | llvm-dis | grep {volatile load}
@g_1 = global i32 0
define void @foo() nounwind {
%t = volatile load i32* @g_1
ret void
}