1*cee313d2SEric Christopher; RUN: opt < %s -rewrite-statepoints-for-gc -spp-print-base-pointers -S 2>&1 | FileCheck %s 2*cee313d2SEric Christopher; RUN: opt < %s -passes=rewrite-statepoints-for-gc -spp-print-base-pointers -S 2>&1 | FileCheck %s 3*cee313d2SEric Christopher 4*cee313d2SEric Christopher; CHECK: derived %merged_value base %merged_value.base 5*cee313d2SEric Christopher 6*cee313d2SEric Christopherdeclare void @site_for_call_safpeoint() 7*cee313d2SEric Christopher 8*cee313d2SEric Christopherdefine i64 addrspace(1)* @test(i64 addrspace(1)* %base_obj_x, i64 addrspace(1)* %base_obj_y, i1 %runtime_condition_x, i1 %runtime_condition_y) gc "statepoint-example" { 9*cee313d2SEric Christopherentry: 10*cee313d2SEric Christopher br i1 %runtime_condition_x, label %here, label %there 11*cee313d2SEric Christopher 12*cee313d2SEric Christopherhere: ; preds = %entry 13*cee313d2SEric Christopher br i1 %runtime_condition_y, label %bump_here_a, label %bump_here_b 14*cee313d2SEric Christopher 15*cee313d2SEric Christopherbump_here_a: ; preds = %here 16*cee313d2SEric Christopher %x_a = getelementptr i64, i64 addrspace(1)* %base_obj_x, i32 1 17*cee313d2SEric Christopher br label %merge_here 18*cee313d2SEric Christopher 19*cee313d2SEric Christopherbump_here_b: ; preds = %here 20*cee313d2SEric Christopher %x_b = getelementptr i64, i64 addrspace(1)* %base_obj_x, i32 2 21*cee313d2SEric Christopher br label %merge_here 22*cee313d2SEric Christopher 23*cee313d2SEric Christophermerge_here: ; preds = %bump_here_b, %bump_here_a 24*cee313d2SEric Christopher %x = phi i64 addrspace(1)* [ %x_a, %bump_here_a ], [ %x_b, %bump_here_b ] 25*cee313d2SEric Christopher br label %merge 26*cee313d2SEric Christopher 27*cee313d2SEric Christopherthere: ; preds = %entry 28*cee313d2SEric Christopher %y = getelementptr i64, i64 addrspace(1)* %base_obj_y, i32 1 29*cee313d2SEric Christopher br label %merge 30*cee313d2SEric Christopher 31*cee313d2SEric Christophermerge: ; preds = %there, %merge_here 32*cee313d2SEric Christopher; CHECK: merge: 33*cee313d2SEric Christopher; CHECK: %merged_value.base = phi i64 addrspace(1)* [ %base_obj_x, %merge_here ], [ %base_obj_y, %there ] 34*cee313d2SEric Christopher; CHECK-NEXT: %merged_value = phi i64 addrspace(1)* [ %x, %merge_here ], [ %y, %there ] 35*cee313d2SEric Christopher %merged_value = phi i64 addrspace(1)* [ %x, %merge_here ], [ %y, %there ] 36*cee313d2SEric Christopher call void @site_for_call_safpeoint() [ "deopt"(i32 0, i32 -1, i32 0, i32 0, i32 0) ] 37*cee313d2SEric Christopher ret i64 addrspace(1)* %merged_value 38*cee313d2SEric Christopher} 39