Home | History | Annotate | Download | only in GVNHoist
      1 ; RUN: opt < %s -early-cse-memssa -gvn-hoist -S | FileCheck %s
      2 
      3 ; Make sure opt won't crash and that this pair of
      4 ; instructions (load, icmp) is hoisted successfully
      5 ; from bb45 and bb58 to bb41.
      6 
      7 @g_10 = external global i32, align 4
      8 @g_536 = external global i8*, align 8
      9 @g_1629 = external global i32**, align 8
     10 @g_963 = external global i32**, align 8
     11 @g_1276 = external global i32**, align 8
     12 
     13 ;CHECK-LABEL: @func_22
     14 
     15 define void @func_22(i32* %arg, i32* %arg1) {
     16 bb:
     17   br label %bb12
     18 
     19 bb12:
     20   %tmp3.0 = phi i32 [ undef, %bb ], [ %tmp40, %bb36 ]
     21   %tmp7.0 = phi i32 [ undef, %bb ], [ %spec.select, %bb36 ]
     22   %tmp14 = icmp eq i32 %tmp3.0, 6
     23   br i1 %tmp14, label %bb41, label %bb15
     24 
     25 bb15:
     26   %tmp183 = trunc i16 0 to i8
     27   %tmp20 = load i8*, i8** @g_536, align 8
     28   %tmp21 = load i8, i8* %tmp20, align 1
     29   %tmp23 = or i8 %tmp21, %tmp183
     30   store i8 %tmp23, i8* %tmp20, align 1
     31   %tmp5.i = icmp eq i8 %tmp23, 0
     32   br i1 %tmp5.i, label %safe_div_func_uint8_t_u_u.exit, label %bb8.i
     33 
     34 bb8.i:
     35   %0 = udiv i8 1, %tmp23
     36   br label %safe_div_func_uint8_t_u_u.exit
     37 
     38 safe_div_func_uint8_t_u_u.exit:
     39   %tmp13.in.i = phi i8 [ %0, %bb8.i ], [ 1, %bb15 ]
     40   %tmp31 = icmp eq i8 %tmp13.in.i, 0
     41   %spec.select = select i1 %tmp31, i32 %tmp7.0, i32 53
     42   %tmp35 = icmp eq i32 %spec.select, 0
     43   br i1 %tmp35, label %bb36, label %bb41
     44 
     45 bb36:
     46   %tmp38 = sext i32 %tmp3.0 to i64
     47   %tmp40 = trunc i64 %tmp38 to i32
     48   br label %bb12
     49 
     50 ;CHECK: bb41:
     51 ;CHECK:   %tmp47 = load i32, i32* %arg1, align 4
     52 ;CHECK:   %tmp48 = icmp eq i32 %tmp47, 0
     53 
     54 bb41:
     55   %tmp43 = load i32, i32* %arg, align 4
     56   %tmp44 = icmp eq i32 %tmp43, 0
     57   br i1 %tmp44, label %bb52, label %bb45
     58 
     59 ;CHECK:     bb45:
     60 ;CHECK-NOT:   %tmp47 = load i32, i32* %arg1, align 4
     61 ;CHECK-NOT:   %tmp48 = icmp eq i32 %tmp47, 0
     62 
     63 bb45:
     64   %tmp47 = load i32, i32* %arg1, align 4
     65   %tmp48 = icmp eq i32 %tmp47, 0
     66   br i1 %tmp48, label %bb50, label %bb64
     67 
     68 bb50:
     69   %tmp51 = load volatile i32**, i32*** @g_963, align 8
     70   unreachable
     71 
     72 bb52:
     73   %tmp8.0 = phi i32 [ undef, %bb41 ], [ %tmp57, %bb55 ]
     74   %tmp54 = icmp slt i32 %tmp8.0, 3
     75   br i1 %tmp54, label %bb55, label %bb58
     76 
     77 bb55:
     78   %tmp57 = add nsw i32 %tmp8.0, 1
     79   br label %bb52
     80 
     81 ;CHECK:     bb58:
     82 ;CHECK-NOT:   %tmp60 = load i32, i32* %arg1, align 4
     83 ;CHECK-NOT:   %tmp61 = icmp eq i32 %tmp60, 0
     84 
     85 bb58:
     86   %tmp60 = load i32, i32* %arg1, align 4
     87   %tmp61 = icmp eq i32 %tmp60, 0
     88   br i1 %tmp61, label %bb62, label %bb64
     89 
     90 bb62:
     91   %tmp63 = load volatile i32**, i32*** @g_1276, align 8
     92   unreachable
     93 
     94 bb64:
     95   %tmp65 = load volatile i32**, i32*** @g_1629, align 8
     96   unreachable
     97 
     98 ; uselistorder directives
     99   uselistorder i32 %spec.select, { 1, 0 }
    100   uselistorder i32* %arg1, { 1, 0 }
    101   uselistorder label %bb64, { 1, 0 }
    102   uselistorder label %bb52, { 1, 0 }
    103   uselistorder label %bb41, { 1, 0 }
    104   uselistorder label %safe_div_func_uint8_t_u_u.exit, { 1, 0 }
    105 }
    106 
    107 define zeroext i8 @safe_div_func_uint8_t_u_u(i8 zeroext %arg, i8 zeroext %arg1) {
    108 bb:
    109   %tmp5 = icmp eq i8 %arg1, 0
    110   br i1 %tmp5, label %bb12, label %bb8
    111 
    112 bb8:
    113   %0 = udiv i8 %arg, %arg1
    114   br label %bb12
    115 
    116 bb12:
    117   %tmp13.in = phi i8 [ %0, %bb8 ], [ %arg, %bb ]
    118   ret i8 %tmp13.in
    119 }
    120