Home | History | Annotate | Download | only in LoopStrengthReduce
      1 ; RUN: opt -loop-reduce -S < %s | FileCheck %s
      2 ;
      3 ; <rdar://10701050> "Cannot split an edge from an IndirectBrInst" assert.
      4 
      5 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
      6 target triple = "x86_64-apple-darwin10.0.0"
      7 
      8 ; while.cond197 is a dominates the simplified loop while.cond238 but
      9 ; has no with no preheader.
     10 ;
     11 ; CHECK: @nopreheader
     12 ; CHECK: %while.cond238
     13 ; CHECK: phi i64
     14 ; CHECK-NOT: phi
     15 ; CHECK: indirectbr
     16 define void @nopreheader(i8* %end) nounwind {
     17 entry:
     18   br label %while.cond179
     19 
     20 while.cond179:                                    ; preds = %if.end434, %if.end369, %if.end277, %if.end165
     21   %s.1 = phi i8* [ undef, %if.end434 ], [ %incdec.ptr356, %if.end348 ], [ undef, %entry ]
     22   indirectbr i8* undef, [label %land.rhs184, label %while.end453]
     23 
     24 land.rhs184:                                      ; preds = %while.cond179
     25   indirectbr i8* undef, [label %while.end453, label %while.cond197]
     26 
     27 while.cond197:                                    ; preds = %land.rhs202, %land.rhs184
     28   %0 = phi i64 [ %indvar.next11, %land.rhs202 ], [ 0, %land.rhs184 ]
     29   indirectbr i8* undef, [label %land.rhs202, label %while.end215]
     30 
     31 land.rhs202:                                      ; preds = %while.cond197
     32   %indvar.next11 = add i64 %0, 1
     33   indirectbr i8* undef, [label %while.end215, label %while.cond197]
     34 
     35 while.end215:                                     ; preds = %land.rhs202, %while.cond197
     36   indirectbr i8* undef, [label %PREMATURE, label %if.end221]
     37 
     38 if.end221:                                        ; preds = %while.end215
     39   indirectbr i8* undef, [label %while.cond238.preheader, label %lor.lhs.false227]
     40 
     41 lor.lhs.false227:                                 ; preds = %if.end221
     42   indirectbr i8* undef, [label %while.cond238.preheader, label %if.else]
     43 
     44 while.cond238.preheader:                          ; preds = %lor.lhs.false227, %if.end221
     45   %tmp16 = add i64 %0, 2
     46   indirectbr i8* undef, [label %while.cond238]
     47 
     48 while.cond238:                                    ; preds = %land.rhs243, %while.cond238.preheader
     49   %1 = phi i64 [ %indvar.next15, %land.rhs243 ], [ 0, %while.cond238.preheader ]
     50   %tmp36 = add i64 %tmp16, %1
     51   %s.3 = getelementptr i8* %s.1, i64 %tmp36
     52   %cmp241 = icmp ult i8* %s.3, %end
     53   indirectbr i8* undef, [label %land.rhs243, label %while.end256]
     54 
     55 land.rhs243:                                      ; preds = %while.cond238
     56   %indvar.next15 = add i64 %1, 1
     57   indirectbr i8* undef, [label %while.end256, label %while.cond238]
     58 
     59 while.end256:                                     ; preds = %land.rhs243, %while.cond238
     60   indirectbr i8* undef, [label %PREMATURE]
     61 
     62 if.else:                                          ; preds = %lor.lhs.false227
     63   indirectbr i8* undef, [label %if.then297, label %if.else386]
     64 
     65 if.then297:                                       ; preds = %if.else
     66   indirectbr i8* undef, [label %PREMATURE, label %if.end307]
     67 
     68 if.end307:                                        ; preds = %if.then297
     69   indirectbr i8* undef, [label %if.end314, label %FAIL]
     70 
     71 if.end314:                                        ; preds = %if.end307
     72   indirectbr i8* undef, [label %if.end340]
     73 
     74 if.end340:                                        ; preds = %while.end334
     75   indirectbr i8* undef, [label %PREMATURE, label %if.end348]
     76 
     77 if.end348:                                        ; preds = %if.end340
     78   %incdec.ptr356 = getelementptr inbounds i8* undef, i64 2
     79   indirectbr i8* undef, [label %while.cond179]
     80 
     81 if.else386:                                       ; preds = %if.else
     82   indirectbr i8* undef, [label %while.end453, label %if.end434]
     83 
     84 if.end434:                                        ; preds = %if.then428, %if.end421
     85   indirectbr i8* undef, [label %while.cond179]
     86 
     87 while.end453:                                     ; preds = %if.else386, %land.rhs184, %while.cond179
     88   indirectbr i8* undef, [label %PREMATURE, label %if.end459]
     89 
     90 if.end459:                                        ; preds = %while.end453
     91   indirectbr i8* undef, [label %if.then465, label %FAIL]
     92 
     93 if.then465:                                       ; preds = %if.end459
     94   indirectbr i8* undef, [label %return, label %if.then479]
     95 
     96 if.then479:                                       ; preds = %if.then465
     97   indirectbr i8* undef, [label %return]
     98 
     99 FAIL:                                             ; preds = %if.end459, %if.end307, %land.lhs.true142, %land.lhs.true131, %while.end
    100   indirectbr i8* undef, [label %DECL_FAIL]
    101 
    102 PREMATURE:                                        ; preds = %while.end453, %while.end415, %if.end340, %while.end334, %if.then297, %while.end256, %while.end215
    103   indirectbr i8* undef, [label %return, label %if.then495]
    104 
    105 if.then495:                                       ; preds = %PREMATURE
    106   indirectbr i8* undef, [label %return]
    107 
    108 DECL_FAIL:                                        ; preds = %if.then488, %FAIL, %land.lhs.true99, %lor.lhs.false, %if.end83, %if.then39, %if.end
    109   indirectbr i8* undef, [label %return]
    110 
    111 return:                                           ; preds = %if.then512, %if.end504, %DECL_FAIL, %if.then495, %PREMATURE, %if.then479, %if.then465, %if.then69, %if.end52, %if.end19, %if.then
    112   ret void
    113 }
    114