1*9880d681SAndroid Build Coastguard Worker; RUN: llc %s -o - -verify-machineinstrs | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" 4*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-unknown" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; The machine level BranchFolding pass will try to remove the 'unreachable' block 7*9880d681SAndroid Build Coastguard Worker; and rewrite 'entry' to jump to the block 'unreachable' falls through to. 8*9880d681SAndroid Build Coastguard Worker; That will be a landing pad and result in 'entry' jumping to 2 landing pads. 9*9880d681SAndroid Build Coastguard Worker; This tests that we don't do this change when the fallthrough is itself a landing 10*9880d681SAndroid Build Coastguard Worker; pad. 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdeclare i32 @__gxx_personality_v0(...) 13*9880d681SAndroid Build Coastguard Workerdeclare void @foo() 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; Function Attrs: noreturn 16*9880d681SAndroid Build Coastguard Workerdeclare void @_throw() 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @main 19*9880d681SAndroid Build Coastguard Worker; CHECK: %unreachable 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerdefine i32 @main(i8* %cleanup) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 22*9880d681SAndroid Build Coastguard Workerentry: 23*9880d681SAndroid Build Coastguard Worker invoke void @_throw() #0 24*9880d681SAndroid Build Coastguard Worker to label %unreachable unwind label %catch.dispatch9 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workercatch.dispatch9: ; preds = %entry 27*9880d681SAndroid Build Coastguard Worker %tmp13 = landingpad { i8*, i32 } 28*9880d681SAndroid Build Coastguard Worker cleanup 29*9880d681SAndroid Build Coastguard Worker catch i8* null 30*9880d681SAndroid Build Coastguard Worker invoke void @_throw() #0 31*9880d681SAndroid Build Coastguard Worker to label %unreachable unwind label %lpad31 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerlpad31: ; preds = %catch.dispatch9 34*9880d681SAndroid Build Coastguard Worker %tmp20 = landingpad { i8*, i32 } 35*9880d681SAndroid Build Coastguard Worker cleanup 36*9880d681SAndroid Build Coastguard Worker catch i8* null 37*9880d681SAndroid Build Coastguard Worker call void @foo() 38*9880d681SAndroid Build Coastguard Worker unreachable 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Workerunreachable: ; preds = %catch.dispatch9, %entry 41*9880d681SAndroid Build Coastguard Worker unreachable 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerattributes #0 = { noreturn } 45*9880d681SAndroid Build Coastguard Worker 46