xref: /llvm-project/llvm/test/Transforms/RewriteStatepointsForGC/check_traversal_order.ll (revision f01a3a893c147c1594b9a3fbd817456b209dabbf)
1; RUN: opt -S -passes=rewrite-statepoints-for-gc < %s | FileCheck %s
2
3target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1"
4target triple = "x86_64-unknown-linux-gnu"
5
6declare void @f()
7declare void @g(ptr addrspace(1), ptr addrspace(1))
8declare i32 @personality_function()
9
10; Make sure that we do not fail assertion because we process call of @g before
11; we process the call of @f.
12
13define void @test_01(ptr addrspace(1) %p, i1 %cond) gc "statepoint-example" personality ptr @personality_function {
14
15; CHECK-LABEL: @test_01(
16
17entry:
18  %tmp0 = insertelement <2 x ptr addrspace(1)> undef, ptr addrspace(1) %p, i32 0
19  %tmp1 = insertelement <2 x ptr addrspace(1)> %tmp0, ptr addrspace(1) %p, i32 1
20  %tmp2 = extractelement <2 x ptr addrspace(1)> %tmp1, i32 1
21  %tmp3 = extractelement <2 x ptr addrspace(1)> %tmp1, i32 0
22  br label %loop
23
24loop:
25  br i1 %cond, label %cond_block, label %exit
26
27cond_block:
28  br i1 %cond, label %backedge, label %exit
29
30exit:
31  %tmp4 = phi ptr addrspace(1) [ %tmp2, %loop ], [ %tmp2, %cond_block ]
32  call void @g(ptr addrspace(1) %tmp3, ptr addrspace(1) %tmp4)
33  ret void
34
35backedge:
36  call void @f()
37  br label %loop
38}
39