; This testcase is distilled from the GNU rx package.  The loop should be 
; removed but causes a problem when ADCE does.  The source function is:
; int rx_bitset_empty (int size, rx_Bitset set) {
;  int x;
;  RX_subset s;
;  s = set[0];
;  set[0] = 1;
;  for (x = rx_bitset_numb_subsets(size) - 1; !set[x]; --x)
;    ;
;  set[0] = s;
;  return !s;
;}
;
; RUN: opt < %s -adce

define i32 @rx_bitset_empty(i32 %size, i32* %set) {
bb1:
        %reg110 = load i32* %set                ; <i32> [#uses=2]
        store i32 1, i32* %set
        %cast112 = sext i32 %size to i64                ; <i64> [#uses=1]
        %reg113 = add i64 %cast112, 31          ; <i64> [#uses=1]
        %reg114 = lshr i64 %reg113, 5           ; <i64> [#uses=2]
        %cast109 = trunc i64 %reg114 to i32             ; <i32> [#uses=1]
        %reg129 = add i32 %cast109, -1          ; <i32> [#uses=1]
        %reg114-idxcast = trunc i64 %reg114 to i32              ; <i32> [#uses=1]
        %reg114-idxcast-offset = add i32 %reg114-idxcast, 1073741823            ; <i32> [#uses=1]
        %reg114-idxcast-offset.upgrd.1 = zext i32 %reg114-idxcast-offset to i64         ; <i64> [#uses=1]
        %reg124 = getelementptr i32* %set, i64 %reg114-idxcast-offset.upgrd.1           ; <i32*> [#uses=1]
        %reg125 = load i32* %reg124             ; <i32> [#uses=1]
        %cond232 = icmp ne i32 %reg125, 0               ; <i1> [#uses=1]
        br i1 %cond232, label %bb3, label %bb2

bb2:            ; preds = %bb2, %bb1
        %cann-indvar = phi i32 [ 0, %bb1 ], [ %add1-indvar, %bb2 ]              ; <i32> [#uses=2]
        %reg130-scale = mul i32 %cann-indvar, -1                ; <i32> [#uses=1]
        %reg130 = add i32 %reg130-scale, %reg129                ; <i32> [#uses=1]
        %add1-indvar = add i32 %cann-indvar, 1          ; <i32> [#uses=1]
        %reg130-idxcast = bitcast i32 %reg130 to i32            ; <i32> [#uses=1]
        %reg130-idxcast-offset = add i32 %reg130-idxcast, 1073741823            ; <i32> [#uses=1]
        %reg130-idxcast-offset.upgrd.2 = zext i32 %reg130-idxcast-offset to i64         ; <i64> [#uses=1]
        %reg118 = getelementptr i32* %set, i64 %reg130-idxcast-offset.upgrd.2           ; <i32*> [#uses=1]
        %reg119 = load i32* %reg118             ; <i32> [#uses=1]
        %cond233 = icmp eq i32 %reg119, 0               ; <i1> [#uses=1]
        br i1 %cond233, label %bb2, label %bb3

bb3:            ; preds = %bb2, %bb1
        store i32 %reg110, i32* %set
        %cast126 = zext i32 %reg110 to i64              ; <i64> [#uses=1]
        %reg127 = add i64 %cast126, -1          ; <i64> [#uses=1]
        %reg128 = lshr i64 %reg127, 63          ; <i64> [#uses=1]
        %cast120 = trunc i64 %reg128 to i32             ; <i32> [#uses=1]
        ret i32 %cast120
}

