brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 6e26f92 Raw
41 lines · plain
1; RUN: opt -S -passes=place-safepoints < %s | FileCheck -check-prefixes=CHECK,WITHLDEXPF %s2; RUN: opt -S -passes=place-safepoints -disable-builtin=ldexp < %s | FileCheck %s3 4 5; Libcalls will not contain a safepoint poll, so check that we insert6; a safepoint in a loop containing a libcall.7declare double @ldexp(double %x, i32 %n) nounwind readnone8define double @test_libcall(double %x) gc "statepoint-example" {9; CHECK-LABEL: test_libcall10 11entry:12; CHECK: entry13; CHECK-NEXT: call void @do_safepoint14; CHECK-NEXT: br label %loop15  br label %loop16 17loop:18; CHECK: loop19; CHECK-NEXT: %x_loop = phi double [ %x, %entry ], [ %x_exp, %loop ]20; CHECK-NEXT: %x_exp = call double @ldexp(double %x_loop, i32 5)21; CHECK-NEXT: %done = fcmp ogt double %x_exp, 1.522; WITHLDEXPF-NEXT: call void @do_safepoint23; CHECK-NEXT: br24  %x_loop = phi double [ %x, %entry ], [ %x_exp, %loop ]25  %x_exp = call double @ldexp(double %x_loop, i32 5) nounwind readnone26  %done = fcmp ogt double %x_exp, 1.527  br i1 %done, label %end, label %loop28end:29  %x_end = phi double [%x_exp, %loop]30  ret double %x_end31}32 33; This function is inlined when inserting a poll.34declare void @do_safepoint()35define void @gc.safepoint_poll() {36; CHECK-LABEL: gc.safepoint_poll37entry:38  call void @do_safepoint()39  ret void40}41