removal of an empty loop optimization?

I just starting generating loops in my language and I noticed that I
would have empty loops left in the final optimized result. I'm assuming
I'm just missing an optimizer pass, can somebody tell me which one that is?

The code is below. Note that I won't ultimately be generating such a
loop, it's just a stepping stone in my code.

define void @_copy_func_array_1(i8**, i8*) {
entry:
  %2 = bitcast i8* %1 to i64*
  %3 = load i64* %2, align 8
  %4 = trunc i64 %3 to i32
  br label %loop_cond_1

loop_cond_1: ; preds =
%loop_cond_1, %entry
  %ndx.0 = phi i32 [ 0, %entry ], [ %6, %loop_cond_1 ]
  %5 = icmp slt i32 %ndx.0, %4
  %6 = add i32 1, %ndx.0
  br i1 %5, label %loop_cond_1, label %loop_end_4

loop_end_4: ; preds = %loop_cond_1
  ret void
}