xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/preincprep-nontrans-crash.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
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