Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / RewriteStatepointsForGC / preprocess.ll
blob4c7f9d66d92f6acfbbbbd603ecb24091c4073870
1 ; RUN: opt -passes=rewrite-statepoints-for-gc -S < %s | FileCheck %s
3 ; Test to make sure we destroy LCSSA's single entry phi nodes before
4 ; running liveness
6 declare void @consume(...) "gc-leaf-function"
8 define void @test6(ptr addrspace(1) %obj) gc "statepoint-example" {
9 ; CHECK-LABEL: @test6
10 entry:
11   br label %next
13 next:                                             ; preds = %entry
14 ; CHECK-LABEL: next:
15 ; CHECK-NEXT: gc.statepoint
16 ; CHECK-NEXT: gc.relocate
17 ; CHECK-NEXT: @consume(ptr addrspace(1) %obj.relocated)
18 ; CHECK-NEXT: @consume(ptr addrspace(1) %obj.relocated)
19 ; Need to delete unreachable gc.statepoint call
20   %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 void
27 define void @test7() gc "statepoint-example" {
28 ; CHECK-LABEL: test7
29 ; CHECK-NOT: gc.statepoint
30 ; Need to delete unreachable gc.statepoint invoke - tested separately given
31 ; a correct implementation could only remove the instructions, not the block
32   ret void
34 unreached:                                        ; preds = %unreached
35   %obj = phi ptr addrspace(1) [ null, %unreached ]
36   call void @foo() [ "deopt"() ]
37   call void (...) @consume(ptr addrspace(1) %obj)
38   br label %unreached
41 define void @test8() gc "statepoint-example" personality ptr undef {
42 ; CHECK-LABEL: test8
43 ; CHECK-NOT: gc.statepoint
44 ; Bound the last check-not
45   ret void
47 unreached:                                        ; No predecessors!
48   invoke void @foo() [ "deopt"() ]
49 ; CHECK-LABEL: @foo
50           to label %normal_return unwind label %exceptional_return
52 normal_return:                                    ; preds = %unreached
53   ret void
55 exceptional_return:                               ; preds = %unreached
56   %landing_pad4 = landingpad { ptr, i32 }
57           cleanup
58   ret void
61 declare void @foo()