1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=x86-64 < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; rdar://9081094 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; LSR shouldn't create lots of redundant address computations. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker%0 = type { i32, [3 x i32] } 7*9880d681SAndroid Build Coastguard Worker%1 = type { i32 (i32, i32, i32)*, i32, i32, [3 x i32], i8*, i8*, i8* } 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker@pgm = external hidden unnamed_addr global [5 x %0], align 32 10*9880d681SAndroid Build Coastguard Worker@isa = external hidden unnamed_addr constant [13 x %1], align 32 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerdefine void @main_bb.i() nounwind { 13*9880d681SAndroid Build Coastguard Worker; CHECK: main_bb.i: 14*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ret 15*9880d681SAndroid Build Coastguard Worker; CHECK: addq $-16, 16*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: ret 17*9880d681SAndroid Build Coastguard Worker; CHECK: ret 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerbb: 20*9880d681SAndroid Build Coastguard Worker br label %bb38 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerbb38: ; preds = %bb200, %bb 23*9880d681SAndroid Build Coastguard Worker %tmp39 = phi i64 [ %tmp201, %bb200 ], [ 0, %bb ] 24*9880d681SAndroid Build Coastguard Worker %tmp40 = sub i64 0, %tmp39 25*9880d681SAndroid Build Coastguard Worker %tmp47 = getelementptr [5 x %0], [5 x %0]* @pgm, i64 0, i64 %tmp40, i32 0 26*9880d681SAndroid Build Coastguard Worker %tmp34 = load i32, i32* %tmp47, align 16 27*9880d681SAndroid Build Coastguard Worker %tmp203 = icmp slt i32 %tmp34, 12 28*9880d681SAndroid Build Coastguard Worker br i1 %tmp203, label %bb215, label %bb200 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerbb200: ; preds = %bb38 31*9880d681SAndroid Build Coastguard Worker %tmp201 = add i64 %tmp39, 1 32*9880d681SAndroid Build Coastguard Worker br label %bb38 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerbb215: ; preds = %bb38 35*9880d681SAndroid Build Coastguard Worker %tmp50 = getelementptr [5 x %0], [5 x %0]* @pgm, i64 0, i64 %tmp40, i32 1, i64 2 36*9880d681SAndroid Build Coastguard Worker %tmp49 = getelementptr [5 x %0], [5 x %0]* @pgm, i64 0, i64 %tmp40, i32 1, i64 1 37*9880d681SAndroid Build Coastguard Worker %tmp48 = getelementptr [5 x %0], [5 x %0]* @pgm, i64 0, i64 %tmp40, i32 1, i64 0 38*9880d681SAndroid Build Coastguard Worker %tmp216 = add nsw i32 %tmp34, 1 39*9880d681SAndroid Build Coastguard Worker store i32 %tmp216, i32* %tmp47, align 16 40*9880d681SAndroid Build Coastguard Worker %tmp217 = sext i32 %tmp216 to i64 41*9880d681SAndroid Build Coastguard Worker %tmp218 = getelementptr inbounds [13 x %1], [13 x %1]* @isa, i64 0, i64 %tmp217, i32 3, i64 0 42*9880d681SAndroid Build Coastguard Worker %tmp219 = load i32, i32* %tmp218, align 8 43*9880d681SAndroid Build Coastguard Worker store i32 %tmp219, i32* %tmp48, align 4 44*9880d681SAndroid Build Coastguard Worker %tmp220 = getelementptr inbounds [13 x %1], [13 x %1]* @isa, i64 0, i64 %tmp217, i32 3, i64 1 45*9880d681SAndroid Build Coastguard Worker %tmp221 = load i32, i32* %tmp220, align 4 46*9880d681SAndroid Build Coastguard Worker store i32 %tmp221, i32* %tmp49, align 4 47*9880d681SAndroid Build Coastguard Worker %tmp222 = getelementptr inbounds [13 x %1], [13 x %1]* @isa, i64 0, i64 %tmp217, i32 3, i64 2 48*9880d681SAndroid Build Coastguard Worker %tmp223 = load i32, i32* %tmp222, align 8 49*9880d681SAndroid Build Coastguard Worker store i32 %tmp223, i32* %tmp50, align 4 50*9880d681SAndroid Build Coastguard Worker ret void 51*9880d681SAndroid Build Coastguard Worker} 52