brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 4c7f9d6 Raw
62 lines · plain
1; RUN: opt -passes=rewrite-statepoints-for-gc -S < %s | FileCheck %s2 3; Test to make sure we destroy LCSSA's single entry phi nodes before4; running liveness5 6declare void @consume(...) "gc-leaf-function"7 8define void @test6(ptr addrspace(1) %obj) gc "statepoint-example" {9; CHECK-LABEL: @test610entry:11  br label %next12 13next:                                             ; preds = %entry14; CHECK-LABEL: next:15; CHECK-NEXT: gc.statepoint16; CHECK-NEXT: gc.relocate17; CHECK-NEXT: @consume(ptr addrspace(1) %obj.relocated)18; CHECK-NEXT: @consume(ptr addrspace(1) %obj.relocated)19; Need to delete unreachable gc.statepoint call20  %obj2 = phi ptr addrspace(1) [ %obj, %entry ]21  call void @foo() [ "deopt"() ]22  call void (...) @consume(ptr addrspace(1) %obj2)23  call void (...) @consume(ptr addrspace(1) %obj)24  ret void25}26 27define void @test7() gc "statepoint-example" {28; CHECK-LABEL: test729; CHECK-NOT: gc.statepoint30; Need to delete unreachable gc.statepoint invoke - tested separately given31; a correct implementation could only remove the instructions, not the block32  ret void33 34unreached:                                        ; preds = %unreached35  %obj = phi ptr addrspace(1) [ null, %unreached ]36  call void @foo() [ "deopt"() ]37  call void (...) @consume(ptr addrspace(1) %obj)38  br label %unreached39}40 41define void @test8() gc "statepoint-example" personality ptr undef {42; CHECK-LABEL: test843; CHECK-NOT: gc.statepoint44; Bound the last check-not45  ret void46 47unreached:                                        ; No predecessors!48  invoke void @foo() [ "deopt"() ]49; CHECK-LABEL: @foo50          to label %normal_return unwind label %exceptional_return51 52normal_return:                                    ; preds = %unreached53  ret void54 55exceptional_return:                               ; preds = %unreached56  %landing_pad4 = landingpad { ptr, i32 }57          cleanup58  ret void59}60 61declare void @foo()62