1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:64:64-i64:64-n32:64" 3*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc64le-linux" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker%struct.BSS1.0.9.28.39.43.46.47.54.56.57.64.65.69.71.144 = type <{ [220 x i8] }> 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker@.BSS1 = external unnamed_addr global %struct.BSS1.0.9.28.39.43.46.47.54.56.57.64.65.69.71.144, align 32 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker; Function Attrs: noinline nounwind 10*9880d681SAndroid Build Coastguard Workerdefine void @ety2_() #0 { 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker; This test case used to crash because the preinc prep pass would assume that 13*9880d681SAndroid Build Coastguard Worker; if X-Y could be simplified to a constant, than so could Y-X. While not 14*9880d681SAndroid Build Coastguard Worker; desirable, we cannot actually make this guarantee. 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ety2_ 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard WorkerL.entry: 18*9880d681SAndroid Build Coastguard Worker %0 = load i32, i32* undef, align 4 19*9880d681SAndroid Build Coastguard Worker %1 = sext i32 %0 to i64 20*9880d681SAndroid Build Coastguard Worker %2 = shl nsw i64 %1, 3 21*9880d681SAndroid Build Coastguard Worker %3 = add nsw i64 %2, 8 22*9880d681SAndroid Build Coastguard Worker br label %L.LB1_425 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard WorkerL.LB1_425: ; preds = %L.LB1_427, %L.entry 25*9880d681SAndroid Build Coastguard Worker %4 = phi i64 [ %21, %L.LB1_427 ], [ undef, %L.entry ] 26*9880d681SAndroid Build Coastguard Worker br i1 undef, label %L.LB1_427, label %L.LB1_816 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard WorkerL.LB1_816: ; preds = %L.LB1_425 29*9880d681SAndroid Build Coastguard Worker switch i32 undef, label %L.LB1_432 [ 30*9880d681SAndroid Build Coastguard Worker i32 30, label %L.LB1_805 31*9880d681SAndroid Build Coastguard Worker i32 10, label %L.LB1_451 32*9880d681SAndroid Build Coastguard Worker i32 20, label %L.LB1_451 33*9880d681SAndroid Build Coastguard Worker ] 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard WorkerL.LB1_451: ; preds = %L.LB1_816, %L.LB1_816 36*9880d681SAndroid Build Coastguard Worker unreachable 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard WorkerL.LB1_432: ; preds = %L.LB1_816 39*9880d681SAndroid Build Coastguard Worker %.in.31 = lshr i64 %4, 32 40*9880d681SAndroid Build Coastguard Worker %5 = trunc i64 %.in.31 to i32 41*9880d681SAndroid Build Coastguard Worker br i1 undef, label %L.LB1_769, label %L.LB1_455 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard WorkerL.LB1_455: ; preds = %L.LB1_432 44*9880d681SAndroid Build Coastguard Worker unreachable 45*9880d681SAndroid Build Coastguard Worker 46*9880d681SAndroid Build Coastguard WorkerL.LB1_769: ; preds = %L.LB1_432 47*9880d681SAndroid Build Coastguard Worker %6 = sext i32 %5 to i64 48*9880d681SAndroid Build Coastguard Worker %7 = add nsw i64 %6, 2 49*9880d681SAndroid Build Coastguard Worker %8 = add nsw i64 %6, -1 50*9880d681SAndroid Build Coastguard Worker %9 = mul i64 %8, %1 51*9880d681SAndroid Build Coastguard Worker %10 = add i64 %9, %7 52*9880d681SAndroid Build Coastguard Worker %11 = shl i64 %10, 3 53*9880d681SAndroid Build Coastguard Worker %12 = getelementptr i8, i8* undef, i64 %11 54*9880d681SAndroid Build Coastguard Worker %13 = mul nsw i64 %6, %1 55*9880d681SAndroid Build Coastguard Worker %14 = add i64 %7, %13 56*9880d681SAndroid Build Coastguard Worker %15 = shl i64 %14, 3 57*9880d681SAndroid Build Coastguard Worker %16 = getelementptr i8, i8* undef, i64 %15 58*9880d681SAndroid Build Coastguard Worker br i1 undef, label %L.LB1_662, label %L.LB1_662.prol 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard WorkerL.LB1_662.prol: ; preds = %L.LB1_662.prol, %L.LB1_769 61*9880d681SAndroid Build Coastguard Worker %indvars.iv.next20.prol = add nuw nsw i64 undef, 1 62*9880d681SAndroid Build Coastguard Worker br i1 undef, label %L.LB1_662, label %L.LB1_662.prol 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard WorkerL.LB1_662: ; preds = %L.LB1_437.2, %L.LB1_662.prol, %L.LB1_769 65*9880d681SAndroid Build Coastguard Worker %indvars.iv19 = phi i64 [ %indvars.iv.next20.3, %L.LB1_437.2 ], [ 0, %L.LB1_769 ], [ %indvars.iv.next20.prol, %L.LB1_662.prol ] 66*9880d681SAndroid Build Coastguard Worker %indvars.iv.next20 = add nuw nsw i64 %indvars.iv19, 1 67*9880d681SAndroid Build Coastguard Worker %17 = mul i64 %indvars.iv.next20, %3 68*9880d681SAndroid Build Coastguard Worker %18 = getelementptr i8, i8* %16, i64 %17 69*9880d681SAndroid Build Coastguard Worker %19 = bitcast i8* %18 to double* 70*9880d681SAndroid Build Coastguard Worker store double 0.000000e+00, double* %19, align 8 71*9880d681SAndroid Build Coastguard Worker %indvars.iv.next20.1 = add nsw i64 %indvars.iv19, 2 72*9880d681SAndroid Build Coastguard Worker %20 = mul i64 %indvars.iv.next20.1, %3 73*9880d681SAndroid Build Coastguard Worker br i1 undef, label %L.LB1_437.2, label %L.LB1_824.2 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard WorkerL.LB1_427: ; preds = %L.LB1_425 76*9880d681SAndroid Build Coastguard Worker %21 = load i64, i64* bitcast (i8* getelementptr inbounds (%struct.BSS1.0.9.28.39.43.46.47.54.56.57.64.65.69.71.144, %struct.BSS1.0.9.28.39.43.46.47.54.56.57.64.65.69.71.144* @.BSS1, i64 0, i32 0, i64 8) to i64*), align 8 77*9880d681SAndroid Build Coastguard Worker br label %L.LB1_425 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard WorkerL.LB1_805: ; preds = %L.LB1_816 80*9880d681SAndroid Build Coastguard Worker ret void 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard WorkerL.LB1_824.2: ; preds = %L.LB1_662 83*9880d681SAndroid Build Coastguard Worker %22 = getelementptr i8, i8* %12, i64 %20 84*9880d681SAndroid Build Coastguard Worker %23 = bitcast i8* %22 to double* 85*9880d681SAndroid Build Coastguard Worker store double 0.000000e+00, double* %23, align 8 86*9880d681SAndroid Build Coastguard Worker br label %L.LB1_437.2 87*9880d681SAndroid Build Coastguard Worker 88*9880d681SAndroid Build Coastguard WorkerL.LB1_437.2: ; preds = %L.LB1_824.2, %L.LB1_662 89*9880d681SAndroid Build Coastguard Worker %indvars.iv.next20.3 = add nsw i64 %indvars.iv19, 4 90*9880d681SAndroid Build Coastguard Worker br label %L.LB1_662 91*9880d681SAndroid Build Coastguard Worker} 92*9880d681SAndroid Build Coastguard Worker 93*9880d681SAndroid Build Coastguard Workerattributes #0 = { noinline nounwind } 94*9880d681SAndroid Build Coastguard Worker 95