; RUN: llc < %s -mcpu=atom -mtriple=i686-linux | FileCheck %s
; CHECK:BB#5
; CHECK-NEXT:leal
; CHECK-NEXT:leal
; CHECK-NEXT:leal
; CHECK-NEXT:movl


; Test for fixup lea pre-emit pass. LEA instructions should be substituted for
; ADD instructions which compute the address and index of the load because they
; precede the load within 5 instructions. An LEA should also be substituted for
; an ADD which computes part of the index because it precedes the index LEA
; within 5 instructions, this substitution is referred to as backwards chaining.

; Original C Code
;struct node_t
;{
;  int k, m, n, p;
;  int * array;
;};

;extern struct node_t getnode();

;int test()
;{
;  int sum = 0;
;  struct node_t n = getnode();
;  if(n.array != 0 && n.p > 0 && n.k > 0 && n.n > 0 && n.m > 0) {
;    sum = ((int*)((int)n.array + n.p) )[ n.k + n.m + n.n ];
;  }
;  return sum;
;}

%struct.node_t = type { i32, i32, i32, i32, i32* }

define i32 @test() {
entry:
  %n = alloca %struct.node_t, align 4
  call void bitcast (void (%struct.node_t*, ...)* @getnode to void (%struct.node_t*)*)(%struct.node_t* sret %n)
  %array = getelementptr inbounds %struct.node_t, %struct.node_t* %n, i32 0, i32 4
  %0 = load i32*, i32** %array, align 4
  %cmp = icmp eq i32* %0, null
  br i1 %cmp, label %if.end, label %land.lhs.true

land.lhs.true:
  %p = getelementptr inbounds %struct.node_t, %struct.node_t* %n, i32 0, i32 3
  %1 = load i32, i32* %p, align 4
  %cmp1 = icmp sgt i32 %1, 0
  br i1 %cmp1, label %land.lhs.true2, label %if.end

land.lhs.true2:
  %k = getelementptr inbounds %struct.node_t, %struct.node_t* %n, i32 0, i32 0
  %2 = load i32, i32* %k, align 4
  %cmp3 = icmp sgt i32 %2, 0
  br i1 %cmp3, label %land.lhs.true4, label %if.end

land.lhs.true4:
  %n5 = getelementptr inbounds %struct.node_t, %struct.node_t* %n, i32 0, i32 2
  %3 = load i32, i32* %n5, align 4
  %cmp6 = icmp sgt i32 %3, 0
  br i1 %cmp6, label %land.lhs.true7, label %if.end

land.lhs.true7:
  %m = getelementptr inbounds %struct.node_t, %struct.node_t* %n, i32 0, i32 1
  %4 = load i32, i32* %m, align 4
  %cmp8 = icmp sgt i32 %4, 0
  br i1 %cmp8, label %if.then, label %if.end

if.then:
  %add = add i32 %3, %2
  %add12 = add i32 %add, %4
  %5 = ptrtoint i32* %0 to i32
  %add15 = add nsw i32 %1, %5
  %6 = inttoptr i32 %add15 to i32*
  %arrayidx = getelementptr inbounds i32, i32* %6, i32 %add12
  %7 = load i32, i32* %arrayidx, align 4
  br label %if.end

if.end:
  %sum.0 = phi i32 [ %7, %if.then ], [ 0, %land.lhs.true7 ], [ 0, %land.lhs.true4 ], [ 0, %land.lhs.true2 ], [ 0, %land.lhs.true ], [ 0, %entry ]
  ret i32 %sum.0
}

declare void @getnode(%struct.node_t* sret, ...)
