brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · 9dcd156 Raw
60 lines · plain
1; RUN: llc < %s -asm-verbose=false -verify-machineinstrs | FileCheck %s2 3; Test lowering of __builtin_debugtrap in cases where lowering it via4; the normal UNREACHABLE instruction would yield invalid5; MachineFunctions.6 7target triple = "wasm32"8 9declare void @llvm.debugtrap()10 11; CHECK-LABEL: foo:12; CHECK-NEXT: .functype       foo (i32) -> ()13; CHECK-NEXT: .LBB0_1:14; CHECK-NEXT: loop15; CHECK-NEXT: unreachable16; CHECK-NEXT: i32.const       017; CHECK-NEXT: br_if           018; CHECK-NEXT: end_loop19; CHECK-NEXT: end_function20define void @foo(i32 %g) {21entry:22  br label %for.body23 24for.body:25  call void @llvm.debugtrap()26  %exitcond = icmp eq i32 undef, %g27  br i1 %exitcond, label %for.cond.cleanup, label %for.body28 29for.cond.cleanup:30  ret void31}32 33; CHECK-LABEL: middle_of_block:34; CHECK-NEXT: .functype       middle_of_block (i32, i32) -> (i32)35; CHECK-NEXT: unreachable36; CHECK-NEXT: local.get       037; CHECK-NEXT: local.get       138; CHECK-NEXT: i32.add39; CHECK-NEXT: end_function40define i32 @middle_of_block(i32 %x, i32 %y) {41  %r = add i32 %x, %y42  call void @llvm.debugtrap()43  ret i32 %r44}45 46; CHECK-LABEL: really_middle_of_block:47; CHECK-NEXT: .functype       really_middle_of_block () -> (i32)48; CHECK-NEXT: call    bar49; CHECK-NEXT: drop50; CHECK-NEXT: unreachable51; CHECK-NEXT: call    bar52; CHECK-NEXT: end_function53declare i32 @bar()54define i32 @really_middle_of_block() {55  %x = call i32 @bar()56  call void @llvm.debugtrap()57  %r = call i32 @bar()58  ret i32 %r59}60