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