; RUN: opt < %s -passes='early-cse,gvn-hoist' -earlycse-debug-hash -S | FileCheck %s ; Make sure opt doesn't crash. On top of that, the instructions ; of the side blocks should be hoisted to the entry block. %s = type { i32, i64 } %S = type { %s, i32 } ;CHECK-LABEL: @foo define void @foo(ptr %arg) { bb0: %call.idx.val.i = load i32, ptr %arg br label %bb1 ;CHECK: bb1: ;CHECK: %call264 = call zeroext i1 @bar ;CHECK: store i32 %call.idx.val.i, ptr %arg ;CHECK: %0 = getelementptr inbounds %S, ptr %arg, i64 0, i32 0, i32 1 ;CHECK: store i64 undef, ptr %0 ;CHECK: br i1 %call264, label %bb2, label %bb3 bb1: %call264 = call zeroext i1 @bar() br i1 %call264, label %bb2, label %bb3 ;CHECK: bb2: ;CHECK-NOT: store i32 %call.idx.val.i, ptr %arg ;CHECK-NOT: store i64 undef, ptr %{.*} bb2: store i32 %call.idx.val.i, ptr %arg %0 = getelementptr inbounds %S, ptr %arg, i64 0, i32 0, i32 1 store i64 undef, ptr %0 ret void ;CHECK: bb3: ;CHECK-NOT: store i32 %call.idx.val.i, ptr %arg ;CHECK-NOT: store i64 undef, ptr %{.*} bb3: store i32 %call.idx.val.i, ptr %arg %1 = getelementptr inbounds %S, ptr %arg, i64 0, i32 0, i32 1 store i64 undef, ptr %1 ret void } declare zeroext i1 @bar()