106 lines · plain
1; RUN: llc < %s -asm-verbose=false -verify-machineinstrs -disable-block-placement -wasm-disable-explicit-locals -wasm-keep-registers -enable-emscripten-cxx-exceptions | FileCheck %s2 3target triple = "wasm32-unknown-unknown"4 5declare i32 @__gxx_personality_v0(...)6 7; Check an interesting case of complex control flow due to exceptions CFG rewriting.8; There should *not* be any irreducible control flow here.9 10; CHECK-LABEL: crashy:11; CHECK-NOT: br_table12 13define void @crashy() personality ptr @__gxx_personality_v0 {14entry:15 invoke void undef()16 to label %invoke.cont unwind label %lpad17 18invoke.cont: ; preds = %entry19 invoke void undef()20 to label %invoke.cont4 unwind label %lpad321 22invoke.cont4: ; preds = %invoke.cont23 %call.i82 = invoke ptr undef()24 to label %invoke.cont6 unwind label %lpad325 26invoke.cont6: ; preds = %invoke.cont427 invoke void undef()28 to label %invoke.cont13 unwind label %lpad1229 30invoke.cont13: ; preds = %invoke.cont631 br label %for.cond32 33for.cond: ; preds = %for.cond.backedge, %invoke.cont1334 br i1 undef, label %exit2, label %land.lhs35 36land.lhs: ; preds = %for.cond37 %call.i.i.i.i92 = invoke i32 undef()38 to label %exit1 unwind label %lpad16.loopexit39 40exit1: ; preds = %land.lhs41 br label %exit242 43exit2: ; preds = %exit1, %for.cond44 %call.i.i12.i.i93 = invoke i32 undef()45 to label %exit3 unwind label %lpad16.loopexit46 47exit3: ; preds = %exit248 invoke void undef()49 to label %invoke.cont23 unwind label %lpad2250 51invoke.cont23: ; preds = %exit352 invoke void undef()53 to label %invoke.cont25 unwind label %lpad2254 55invoke.cont25: ; preds = %invoke.cont2356 %call.i.i137 = invoke i32 undef()57 to label %invoke.cont29 unwind label %lpad16.loopexit58 59lpad: ; preds = %entry60 %0 = landingpad { ptr, i32 }61 cleanup62 unreachable63 64lpad3: ; preds = %invoke.cont4, %invoke.cont65 %1 = landingpad { ptr, i32 }66 cleanup67 unreachable68 69lpad12: ; preds = %invoke.cont670 %2 = landingpad { ptr, i32 }71 cleanup72 resume { ptr, i32 } undef73 74lpad16.loopexit: ; preds = %if.then, %invoke.cont29, %invoke.cont25, %exit2, %land.lhs75 %lpad.loopexit = landingpad { ptr, i32 }76 cleanup77 unreachable78 79lpad22: ; preds = %invoke.cont23, %exit380 %3 = landingpad { ptr, i32 }81 cleanup82 unreachable83 84invoke.cont29: ; preds = %invoke.cont2585 invoke void undef()86 to label %invoke.cont33 unwind label %lpad16.loopexit87 88invoke.cont33: ; preds = %invoke.cont2989 br label %for.inc90 91for.inc: ; preds = %invoke.cont3392 %cmp.i.i141 = icmp eq ptr undef, undef93 br i1 %cmp.i.i141, label %if.then, label %if.end.i.i14694 95if.then: ; preds = %for.inc96 %call.i.i148 = invoke i32 undef()97 to label %for.cond.backedge unwind label %lpad16.loopexit98 99for.cond.backedge: ; preds = %if.end.i.i146, %if.then100 br label %for.cond101 102if.end.i.i146: ; preds = %for.inc103 call void undef()104 br label %for.cond.backedge105}106