Skip to content

Commit

Permalink
[InstCombine] Fix debug variance issue in tryToMoveFreeBeforeNullTest
Browse files Browse the repository at this point in the history
Fix an issue where the presence of debug info could disable an
optimization in tryToMoveFreeBeforeNullTest.
  • Loading branch information
vedantk committed Apr 13, 2020
1 parent 122a6bf commit 4831f4b
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
2 changes: 1 addition & 1 deletion llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
Expand Up @@ -2709,7 +2709,7 @@ static Instruction *tryToMoveFreeBeforeNullTest(CallInst &FI,
// If there are more than 2 instructions, check that they are noops
// i.e., they won't hurt the performance of the generated code.
if (FreeInstrBB->size() != 2) {
for (const Instruction &Inst : *FreeInstrBB) {
for (const Instruction &Inst : FreeInstrBB->instructionsWithoutDebug()) {
if (&Inst == &FI || &Inst == FreeInstrBBTerminator)
continue;
auto *Cast = dyn_cast<CastInst>(&Inst);
Expand Down
22 changes: 22 additions & 0 deletions llvm/test/Transforms/InstCombine/malloc-free-delete-dbginvar.ll
@@ -0,0 +1,22 @@
; Check that the instcombine result is the same with/without debug info.
; This is a regression test for a function taken from malloc-free-delete.ll.

; RUN: opt < %s -instcombine -S > %t.no_dbg.ll
; RUN: opt < %s -debugify-each -instcombine -S > %t.ll
; RUN: diff %t.no_dbg.ll %t.ll

declare void @free(i8*)

define void @test12(i32* %foo) minsize {
entry:
%tobool = icmp eq i32* %foo, null
br i1 %tobool, label %if.end, label %if.then

if.then: ; preds = %entry
%bitcast = bitcast i32* %foo to i8*
tail call void @free(i8* %bitcast)
br label %if.end

if.end: ; preds = %entry, %if.then
ret void
}

0 comments on commit 4831f4b

Please sign in to comment.