; RUN: opt < %s -basic-aa -licm -S | FileCheck %s ; Test moved from sinking.ll, as it tests sinking of a store who alone touches ; a memory location in a loop. ; Store can be sunk out of exit block containing indirectbr instructions after ; D50925. Updated to use an argument instead of undef, due to PR38989. define void @test12(i32* %ptr) { ; CHECK-LABEL: @test12 ; CHECK: store ; CHECK-NEXT: br label %lab4 br label %lab4 lab4: br label %lab20 lab5: br label %lab20 lab6: br label %lab4 lab7: br i1 undef, label %lab8, label %lab13 lab8: br i1 undef, label %lab13, label %lab10 lab10: br label %lab7 lab13: ret void lab20: br label %lab21 lab21: ; CHECK: lab21: ; CHECK-NOT: store ; CHECK: br i1 false, label %lab21, label %lab22 store i32 36127957, i32* %ptr, align 4 br i1 undef, label %lab21, label %lab22 lab22: ; CHECK: lab22: ; CHECK-NOT: store ; CHECK-NEXT: indirectbr i8* undef indirectbr i8* undef, [label %lab5, label %lab6, label %lab7] }