Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / Transforms / GVNHoist / pr36787.ll
blob9bda6ff29e18625ca5c102cc3b1e25889aa81c1e
1 ; RUN: opt < %s -passes=gvn-hoist -S | FileCheck %s
3 @g = external constant ptr
5 declare i32 @gxx_personality(...)
6 declare void @f0()
7 declare void @f1()
8 declare void @f2()
10 ; Make sure opt won't crash and that the load
11 ; is not hoisted from label6 to label4
13 ;CHECK-LABEL: @func
15 define void @func() personality ptr @gxx_personality {
16   invoke void @f0()
17           to label %3 unwind label %1
20   %2 = landingpad { ptr, i32 }
21           catch ptr @g
22           catch ptr null
23   br label %16
26   br i1 undef, label %4, label %10
28 ;CHECK:       4:
29 ;CHECK-NEXT:    %5 = load ptr, ptr undef, align 8
30 ;CHECK-NEXT:    invoke void @f1()
33   %5 = load ptr, ptr undef, align 8
34   invoke void @f1()
35           to label %6 unwind label %1
37 ;CHECK:       6:
38 ;CHECK-NEXT:    %7 = load ptr, ptr undef, align 8
39 ;CHECK-NEXT:    %8 = load ptr, ptr undef, align 8
42   %7 = load ptr, ptr undef, align 8
43   %8 = load ptr, ptr undef, align 8
44   br i1 true, label %9, label %17
47   invoke void @f0()
48           to label %10 unwind label %1
50 10:
51   invoke void @f2()
52           to label %11 unwind label %1
54 11:
55   %12 = invoke signext i32 undef(ptr null, i32 signext undef, i1 zeroext undef)
56           to label %13 unwind label %14
58 13:
59   unreachable
61 14:
62   %15 = landingpad { ptr, i32 }
63           catch ptr @g
64           catch ptr null
65   br label %16
67 16:
68   unreachable
70 17:
71   ret void
73 ; uselistorder directives
74   uselistorder ptr @f0, { 1, 0 }
75   uselistorder label %1, { 0, 3, 1, 2 }