1 ; This test makes sure that gep(gep ...) merge doesn't come into effect.
2 ; RUN: opt < %s -instcombine -S | FileCheck %s
4 ; Make sure there are no geps being merged.
10 @_ZN2cv1aE = global i8* zeroinitializer, align 8
14 ; Function Attrs: uwtable
15 define linkonce_odr i32 @fn3() {
17 %call = call i32 @fn1()
18 %call1 = call i32 @fn2()
19 %0 = load i8*, i8** @_ZN2cv1aE, align 8
20 %idx.ext2 = sext i32 %call1 to i64
21 %add.ptr3 = getelementptr inbounds i8, i8* %0, i64 %idx.ext2
25 %total1 = phi i32 [ 0, %entry ], [ %total2, %for.body7 ]
26 %x.1 = phi i32 [ 0, %entry ], [ %inc, %for.body7 ]
27 %cmp6 = icmp slt i32 %x.1, %call
28 br i1 %cmp6, label %for.body7, label %for.cond34
30 for.body7: ; preds = %for.cond5
31 %mul = mul nsw i32 %x.1, 2
32 %idxprom = sext i32 %mul to i64
33 %arrayidx = getelementptr inbounds i8, i8* %add.ptr3, i64 %idxprom
34 %1 = load i8, i8* %arrayidx, align 1
35 %conv = zext i8 %1 to i32
36 %sub = sub nsw i32 %mul, 1
37 %idxprom10 = sext i32 %sub to i64
38 %arrayidx11 = getelementptr inbounds i8, i8* %add.ptr3, i64 %idxprom10
39 %2 = load i8, i8* %arrayidx11, align 1
40 %conv2 = zext i8 %2 to i32
41 %add1 = add nsw i32 %conv, %conv2
42 %total2 = add nsw i32 %total1, %add1
43 %inc = add nsw i32 %x.1, 1