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