Home | History | Annotate | Download | only in GVNHoist
      1 ; RUN: opt < %s -gvn-hoist -S | FileCheck %s
      2 
      3 @g = external constant i8*
      4 
      5 declare i32 @gxx_personality(...)
      6 declare void @f0()
      7 declare void @f1()
      8 declare void @f2()
      9 
     10 ; Make sure opt won't crash and that the load
     11 ; is not hoisted from label6 to label4
     12 
     13 ;CHECK-LABEL: @func
     14 
     15 define void @func() personality i8* bitcast (i32 (...)* @gxx_personality to i8*) {
     16   invoke void @f0()
     17           to label %3 unwind label %1
     18 
     19 ; <label>:1:
     20   %2 = landingpad { i8*, i32 }
     21           catch i8* bitcast (i8** @g to i8*)
     22           catch i8* null
     23   br label %16
     24 
     25 ; <label>:3:
     26   br i1 undef, label %4, label %10
     27 
     28 ;CHECK:       <label>:4
     29 ;CHECK-NEXT:    %5 = load i32*, i32** undef, align 8
     30 ;CHECK-NEXT:    invoke void @f1()
     31 
     32 ; <label>:4:
     33   %5 = load i32*, i32** undef, align 8
     34   invoke void @f1()
     35           to label %6 unwind label %1
     36 
     37 ;CHECK:       <label>:6
     38 ;CHECK-NEXT:    %7 = load i32*, i32** undef, align 8
     39 ;CHECK-NEXT:    %8 = load i32*, i32** undef, align 8
     40 
     41 ; <label>:6:
     42   %7 = load i32*, i32** undef, align 8
     43   %8 = load i32*, i32** undef, align 8
     44   br i1 true, label %9, label %17
     45 
     46 ; <label>:9:
     47   invoke void @f0()
     48           to label %10 unwind label %1
     49 
     50 ; <label>:10:
     51   invoke void @f2()
     52           to label %11 unwind label %1
     53 
     54 ; <label>:11:
     55   %12 = invoke signext i32 undef(i32* null, i32 signext undef, i1 zeroext undef)
     56           to label %13 unwind label %14
     57 
     58 ; <label>:13:
     59   unreachable
     60 
     61 ; <label>:14:
     62   %15 = landingpad { i8*, i32 }
     63           catch i8* bitcast (i8** @g to i8*)
     64           catch i8* null
     65   br label %16
     66 
     67 ; <label>:16:
     68   unreachable
     69 
     70 ; <label>:17:
     71   ret void
     72 
     73 ; uselistorder directives
     74   uselistorder void ()* @f0, { 1, 0 }
     75   uselistorder label %1, { 0, 3, 1, 2 }
     76 }
     77