[InstCombine] Look through invariant group intrinsics when removing malloc
authorArthur Eubanks <aeubanks@google.com>
Wed, 14 Jul 2021 20:56:59 +0000 (13:56 -0700)
committerArthur Eubanks <aeubanks@google.com>
Thu, 15 Jul 2021 16:02:40 +0000 (09:02 -0700)
Fixes some regressions with -fstrict-vtable-pointers in llvm-test-suite.

Reviewed By: lebedev.ri

Differential Revision: https://reviews.llvm.org/D106017

llvm/lib/Transforms/InstCombine/InstructionCombining.cpp
llvm/test/Transforms/InstCombine/malloc-free-delete.ll

index 7bbb4d5..9646a8c 100644 (file)
@@ -2600,6 +2600,11 @@ static bool isAllocSiteRemovable(Instruction *AI,
           case Intrinsic::objectsize:
             Users.emplace_back(I);
             continue;
+          case Intrinsic::launder_invariant_group:
+          case Intrinsic::strip_invariant_group:
+            Users.emplace_back(I);
+            Worklist.push_back(I);
+            continue;
           }
         }
 
index 646b9e0..55337d4 100644 (file)
@@ -440,11 +440,6 @@ declare i8* @llvm.strip.invariant.group(i8*)
 
 define void @test17() {
 ; CHECK-LABEL: @test17(
-; CHECK-NEXT:    [[NW1:%.*]] = call dereferenceable(32) i8* @_Znwm(i64 32) #[[ATTR10]]
-; CHECK-NEXT:    [[NW2:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* nonnull [[NW1]])
-; CHECK-NEXT:    [[TMP1:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* nonnull [[NW1]])
-; CHECK-NEXT:    store i8 1, i8* [[TMP1]], align 1
-; CHECK-NEXT:    call void @_ZdlPv(i8* [[NW2]]) #[[ATTR10]]
 ; CHECK-NEXT:    ret void
 ;
   %nw1 = call i8* @_Znwm(i64 32) builtin