[ThinLTO] Add code comment. NFC
[llvm-complete.git] / test / Transforms / GVNHoist / pr36787.ll
blob387b3e74cf0aea79cdf610d6d69a31a88a4a74a2
1 ; RUN: opt < %s -gvn-hoist -S | FileCheck %s
3 @g = external constant i8*
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 i8* bitcast (i32 (...)* @gxx_personality to i8*) {
16   invoke void @f0()
17           to label %3 unwind label %1
20   %2 = landingpad { i8*, i32 }
21           catch i8* bitcast (i8** @g to i8*)
22           catch i8* null
23   br label %16
26   br i1 undef, label %4, label %10
28 ;CHECK:       4:
29 ;CHECK-NEXT:    %5 = load i32*, i32** undef, align 8
30 ;CHECK-NEXT:    invoke void @f1()
33   %5 = load i32*, i32** undef, align 8
34   invoke void @f1()
35           to label %6 unwind label %1
37 ;CHECK:       6:
38 ;CHECK-NEXT:    %7 = load i32*, i32** undef, align 8
39 ;CHECK-NEXT:    %8 = load i32*, i32** undef, align 8
42   %7 = load i32*, i32** undef, align 8
43   %8 = load i32*, i32** 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(i32* null, i32 signext undef, i1 zeroext undef)
56           to label %13 unwind label %14
58 13:
59   unreachable
61 14:
62   %15 = landingpad { i8*, i32 }
63           catch i8* bitcast (i8** @g to i8*)
64           catch i8* null
65   br label %16
67 16:
68   unreachable
70 17:
71   ret void
73 ; uselistorder directives
74   uselistorder void ()* @f0, { 1, 0 }
75   uselistorder label %1, { 0, 3, 1, 2 }