Home | History | Annotate | Download | only in NewGVN
      1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
      2 ; RUN: opt -newgvn -S %s | FileCheck %s
      3 
      4 @f = external local_unnamed_addr global i64
      5 @b = external local_unnamed_addr global i64
      6 @e = external local_unnamed_addr global i64
      7 
      8 define void @patatino() {
      9 ; CHECK-LABEL: @patatino(
     10 ; CHECK-NEXT:  entry:
     11 ; CHECK-NEXT:    br i1 undef, label [[IF_END24:%.*]], label [[FOR_COND16:%.*]]
     12 ; CHECK:       for.cond2thread-pre-split:
     13 ; CHECK-NEXT:    br i1 false, label [[FOR_BODY:%.*]], label [[FOR_COND8_PREHEADER:%.*]]
     14 ; CHECK:       for.cond8.preheader:
     15 ; CHECK-NEXT:    br i1 undef, label [[L1:%.*]], label %for.cond11thread-pre-split.lr.ph
     16 ; CHECK:       for.cond11thread-pre-split.lr.ph:
     17 ; CHECK-NEXT:    br label [[L1]]
     18 ; CHECK:       for.body:
     19 ; CHECK-NEXT:    [[CMP3:%.*]] = icmp ne i64 [[K_2:%.*]], 3
     20 ; CHECK-NEXT:    [[CONV4:%.*]] = zext i1 [[CMP3]] to i64
     21 ; CHECK-NEXT:    [[TMP0:%.*]] = load i64, i64* @f
     22 ; CHECK-NEXT:    [[OR:%.*]] = or i64 [[TMP0]], [[CONV4]]
     23 ; CHECK-NEXT:    store i64 [[OR]], i64* @f
     24 ; CHECK-NEXT:    [[TOBOOL7:%.*]] = icmp ne i64 [[K_2]], 0
     25 ; CHECK-NEXT:    br i1 [[TOBOOL7]], label %for.cond2thread-pre-split, label [[LOR_RHS:%.*]]
     26 ; CHECK:       lor.rhs:
     27 ; CHECK-NEXT:    store i64 1, i64* @b, align 8
     28 ; CHECK-NEXT:    br label %for.cond2thread-pre-split
     29 ; CHECK:       l1:
     30 ; CHECK-NEXT:    [[K_2]] = phi i64 [ undef, [[L1_PREHEADER:%.*]] ], [ 15, [[FOR_COND8_PREHEADER]] ], [ 5, %for.cond11thread-pre-split.lr.ph ]
     31 ; CHECK-NEXT:    store i64 7, i64* [[J_3:%.*]]
     32 ; CHECK-NEXT:    br label [[FOR_BODY]]
     33 ; CHECK:       for.cond16:
     34 ; CHECK-NEXT:    [[J_0:%.*]] = phi i64* [ @f, [[ENTRY:%.*]] ], [ undef, [[FOR_COND20:%.*]] ], [ @e, [[FOR_COND16]] ]
     35 ; CHECK-NEXT:    br i1 undef, label [[FOR_COND20]], label [[FOR_COND16]]
     36 ; CHECK:       for.cond20:
     37 ; CHECK-NEXT:    [[J_2:%.*]] = phi i64* [ [[J_0]], [[FOR_COND16]] ], [ undef, [[IF_END24]] ]
     38 ; CHECK-NEXT:    br i1 true, label [[IF_END24]], label [[FOR_COND16]]
     39 ; CHECK:       if.end24:
     40 ; CHECK-NEXT:    [[J_3]] = phi i64* [ [[J_2]], [[FOR_COND20]] ], [ undef, [[ENTRY]] ]
     41 ; CHECK-NEXT:    br i1 false, label [[FOR_COND20]], label [[L1_PREHEADER]]
     42 ; CHECK:       l1.preheader:
     43 ; CHECK-NEXT:    br label [[L1]]
     44 ;
     45 entry:
     46   br i1 undef, label %if.end24, label %for.cond16
     47 
     48 for.cond2thread-pre-split:
     49   br i1 false, label %for.body, label %for.cond8.preheader
     50 
     51 for.cond8.preheader:
     52   br i1 undef, label %l1, label %for.cond11thread-pre-split.lr.ph
     53 
     54 for.cond11thread-pre-split.lr.ph:
     55   br label %l1
     56 
     57 for.body:
     58   %k.031 = phi i64 [ %k.2, %l1 ], [ 15, %for.cond2thread-pre-split ]
     59   %cmp3 = icmp ne i64 %k.031, 3
     60   %conv4 = zext i1 %cmp3 to i64
     61   %0 = load i64, i64* @f
     62   %or = or i64 %0, %conv4
     63   store i64 %or, i64* @f
     64   %tobool7 = icmp ne i64 %k.031, 0
     65   %or.cond = or i1 %tobool7, false
     66   br i1 %or.cond, label %for.cond2thread-pre-split, label %lor.rhs
     67 
     68 lor.rhs:
     69   store i64 1, i64* @b, align 8
     70   br label %for.cond2thread-pre-split
     71 
     72 l1:
     73   %k.2 = phi i64 [ undef, %l1.preheader ], [ 15, %for.cond8.preheader ], [ 5, %for.cond11thread-pre-split.lr.ph ]
     74   store i64 7, i64* %j.3
     75   br label %for.body
     76 
     77 for.cond16:
     78   %j.0 = phi i64* [ @f, %entry ], [ %j.2, %for.cond20 ], [ @e, %for.cond16 ]
     79   br i1 undef, label %for.cond20, label %for.cond16
     80 
     81 for.cond20:
     82   %j.2 = phi i64* [ %j.0, %for.cond16 ], [ %j.3, %if.end24 ]
     83   br i1 true, label %if.end24, label %for.cond16
     84 
     85 if.end24:
     86   %j.3 = phi i64* [ %j.2, %for.cond20 ], [ undef, %entry ]
     87   br i1 false, label %for.cond20, label %l1.preheader
     88 
     89 l1.preheader:
     90   br label %l1
     91 }
     92