1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -S -rewrite-statepoints-for-gc < %s | FileCheck %s 3; RUN: opt -S -passes=rewrite-statepoints-for-gc < %s | FileCheck %s 4 5declare void @f() 6declare i32 @personality_function() 7 8define void @test_id() gc "statepoint-example" personality i32 ()* @personality_function { 9; CHECK-LABEL: @test_id( 10; CHECK-NEXT: entry: 11; CHECK-NEXT: [[STATEPOINT_TOKEN:%.*]] = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 100, i32 0, void ()* elementtype(void ()) @f, i32 0, i32 0, i32 0, i32 0) 12; CHECK-NEXT: to label [[NORMAL_RETURN:%.*]] unwind label [[EXCEPTIONAL_RETURN:%.*]] 13; CHECK: normal_return: 14; CHECK-NEXT: ret void 15; CHECK: exceptional_return: 16; CHECK-NEXT: [[LANDING_PAD4:%.*]] = landingpad { i8*, i32 } 17; CHECK-NEXT: cleanup 18; CHECK-NEXT: ret void 19; 20entry: 21 invoke void @f() "statepoint-id"="100" to label %normal_return unwind label %exceptional_return 22 23normal_return: 24 ret void 25 26exceptional_return: 27 %landing_pad4 = landingpad {i8*, i32} cleanup 28 ret void 29} 30 31define void @test_num_patch_bytes() gc "statepoint-example" personality i32 ()* @personality_function { 32; CHECK-LABEL: @test_num_patch_bytes( 33; CHECK-NEXT: entry: 34; CHECK-NEXT: [[STATEPOINT_TOKEN:%.*]] = invoke token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 2882400000, i32 99, void ()* elementtype(void ()) @f, i32 0, i32 0, i32 0, i32 0) 35; CHECK-NEXT: to label [[NORMAL_RETURN:%.*]] unwind label [[EXCEPTIONAL_RETURN:%.*]] 36; CHECK: normal_return: 37; CHECK-NEXT: ret void 38; CHECK: exceptional_return: 39; CHECK-NEXT: [[LANDING_PAD4:%.*]] = landingpad { i8*, i32 } 40; CHECK-NEXT: cleanup 41; CHECK-NEXT: ret void 42; 43entry: 44 invoke void @f() "statepoint-num-patch-bytes"="99" to label %normal_return unwind label %exceptional_return 45 46normal_return: 47 ret void 48 49exceptional_return: 50 %landing_pad4 = landingpad {i8*, i32} cleanup 51 ret void 52} 53 54declare void @do_safepoint() 55define void @gc.safepoint_poll() { 56; CHECK-LABEL: @gc.safepoint_poll( 57; CHECK-NEXT: entry: 58; CHECK-NEXT: call void @do_safepoint() 59; CHECK-NEXT: ret void 60; 61entry: 62 call void @do_safepoint() 63 ret void 64} 65 66; CHECK-NOT: statepoint-id 67; CHECK-NOT: statepoint-num-patch_bytes 68