1 2 ;; RUN: opt -rewrite-statepoints-for-gc -verify -S < %s | FileCheck %s 3 ;; This test is to verify that RewriteStatepointsForGC correctly relocates values 4 ;; defined by invoke instruction results. 5 6 declare i64* addrspace(1)* @non_gc_call() "gc-leaf-function" 7 8 declare void @gc_call() 9 10 declare i32* @fake_personality_function() 11 12 define i64* addrspace(1)* @test() gc "statepoint-example" personality i32* ()* @fake_personality_function { 13 ; CHECK-LABEL: @test( 14 15 entry: 16 %obj = invoke i64* addrspace(1)* @non_gc_call() 17 to label %normal_dest unwind label %unwind_dest 18 19 unwind_dest: ; preds = %entry 20 %lpad = landingpad { i8*, i32 } 21 cleanup 22 resume { i8*, i32 } undef 23 24 normal_dest: ; preds = %entry 25 ; CHECK: normal_dest: 26 ; CHECK-NEXT: gc.statepoint 27 ; CHECK-NEXT: %obj.relocated = call coldcc i8 addrspace(1)* 28 ; CHECK-NEXT: bitcast 29 30 call void @gc_call() [ "deopt"(i32 0, i32 -1, i32 0, i32 0, i32 0) ] 31 ret i64* addrspace(1)* %obj 32 } 33