1;; This test verifies that -gc-empty-basic-blocks removes regular empty blocks 2;; but does not remove empty blocks which have their address taken. 3; RUN: llc < %s -mtriple=x86_64 -O0 -gc-empty-basic-blocks | FileCheck %s 4 5;; This function has a regular empty block. 6define void @foo(i1 zeroext %0) nounwind { 7 br i1 %0, label %2, label %empty_block 8 9; CHECK: .text 10; CHECK-LABEL: foo: 11; CHECK: jne .LBB0_1 12; CHECK-NEXT: jmp .LBB0_3 13 142: ; preds = %1 15 %3 = call i32 @baz() 16 br label %4 17 18; CHECK-LABEL: .LBB0_1: 19; CHECK: jmp .LBB0_3 20 21empty_block: ; preds = %1 22 unreachable 23 24; CHECK-NOT: %empty_block 25; CHECK-NOT: .LBB0_2 26 274: ; preds = %2, %empty_block 28 ret void 29 30; CHECK-LABEL: .LBB0_3: 31; CHECK: retq 32 33} 34 35;; This function has an empty block which has its address taken. Check that it 36;; is not removed by -gc-empty-basic-blocks. 37define void @bar(i1 zeroext %0) nounwind { 38entry: 39 %1 = select i1 %0, ptr blockaddress(@bar, %empty_block), ptr blockaddress(@bar, %bb2) ; <ptr> [#uses=1] 40 indirectbr ptr %1, [label %empty_block, label %bb2] 41 42; CHECK-LABEL: bar: 43 44empty_block: ; preds = %entry 45 unreachable 46 47; CHECK-LABEL: .LBB1_1: # %empty_block 48 49bb2: ; preds = %entry 50 %2 = call i32 @baz() 51 ret void 52} 53 54declare i32 @baz() 55