Home | History | Annotate | Download | only in LoopStrengthReduce
      1 ; RUN: opt < %s -loop-reduce -S | FileCheck %s
      2 target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
      3 target triple = "x86_64-pc-windows-msvc"
      4 
      5 define void @f() personality i32 (...)* @__CxxFrameHandler3 {
      6 entry:
      7   br label %for.cond.i
      8 
      9 for.cond.i:                                       ; preds = %for.inc.i, %entry
     10   %_First.addr.0.i = phi i32* [ null, %entry ], [ %incdec.ptr.i, %for.inc.i ]
     11   invoke void @g()
     12           to label %for.inc.i unwind label %catch.dispatch.i
     13 
     14 catch.dispatch.i:                                 ; preds = %for.cond.i
     15   %cs = catchswitch within none [label %for.cond.1.preheader.i] unwind to caller
     16 
     17 for.cond.1.preheader.i:                           ; preds = %catch.dispatch.i
     18   %0 = catchpad within %cs [i8* null, i32 64, i8* null]
     19   %cmp.i = icmp eq i32* %_First.addr.0.i, null
     20   br label %for.cond.1.i
     21 
     22 for.cond.1.i:                                     ; preds = %for.body.i, %for.cond.1.preheader.i
     23   br i1 %cmp.i, label %for.end.i, label %for.body.i
     24 
     25 for.body.i:                                       ; preds = %for.cond.1.i
     26   call void @g()
     27   br label %for.cond.1.i
     28 
     29 for.inc.i:                                        ; preds = %for.cond.i
     30   %incdec.ptr.i = getelementptr inbounds i32, i32* %_First.addr.0.i, i64 1
     31   br label %for.cond.i
     32 
     33 for.end.i:                                        ; preds = %for.cond.1.i
     34   catchret from %0 to label %leave
     35 
     36 leave:                                            ; preds = %for.end.i
     37   ret void
     38 }
     39 
     40 ; CHECK-LABEL: define void @f(
     41 ; CHECK: %[[PHI:.*]]  = phi i64 [ %[[IV_NEXT:.*]], {{.*}} ], [ 0, {{.*}} ]
     42 ; CHECK: %[[ITOP:.*]] = inttoptr i64 %[[PHI]] to i32*
     43 ; CHECK: %[[CMP:.*]]  = icmp eq i32* %[[ITOP]], null
     44 ; CHECK: %[[IV_NEXT]] = add i64 %[[PHI]], -4
     45 
     46 declare void @g()
     47 
     48 declare i32 @__CxxFrameHandler3(...)
     49