1; RUN: opt -S -passes=place-safepoints < %s | FileCheck -check-prefixes=CHECK,WITHLDEXPF %s 2; RUN: opt -S -passes=place-safepoints -disable-builtin=ldexp < %s | FileCheck %s 3 4 5; Libcalls will not contain a safepoint poll, so check that we insert 6; a safepoint in a loop containing a libcall. 7declare double @ldexp(double %x, i32 %n) nounwind readnone 8define double @test_libcall(double %x) gc "statepoint-example" { 9; CHECK-LABEL: test_libcall 10 11entry: 12; CHECK: entry 13; CHECK-NEXT: call void @do_safepoint 14; CHECK-NEXT: br label %loop 15 br label %loop 16 17loop: 18; CHECK: loop 19; 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.5 22; WITHLDEXPF-NEXT: call void @do_safepoint 23; CHECK-NEXT: br 24 %x_loop = phi double [ %x, %entry ], [ %x_exp, %loop ] 25 %x_exp = call double @ldexp(double %x_loop, i32 5) nounwind readnone 26 %done = fcmp ogt double %x_exp, 1.5 27 br i1 %done, label %end, label %loop 28end: 29 %x_end = phi double [%x_exp, %loop] 30 ret double %x_end 31} 32 33; This function is inlined when inserting a poll. 34declare void @do_safepoint() 35define void @gc.safepoint_poll() { 36; CHECK-LABEL: gc.safepoint_poll 37entry: 38 call void @do_safepoint() 39 ret void 40} 41