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