1 ; RUN: opt %loadNPMPolly '-passes=print<polly-function-scops>' -disable-output < %s
3 ; This crashed at some point as we place %1 and %4 in the same equivalence class
4 ; for invariant loads and when we remap SCEVs to use %4 instead of %1 AddRec SCEVs
5 ; for the for.body.10 loop caused a crash as their operands were not invariant
6 ; in the loop. While we know they are, ScalarEvolution does not. However, we can simply
7 ; rewrite the AddRecs to hoist everything from the "start" out of the AddRec.
9 ; Check we do not crash.
10 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
12 %struct.codebook.48.118.748.1882.2972 = type { i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32 }
13 %struct.static_codebook.19.89.719.1853.2971 = type { i64, i64, ptr, i32, i64, i64, i32, i32, ptr, ptr, ptr, ptr, i32 }
14 %struct.encode_aux_nearestmatch.16.86.716.1850.2968 = type { ptr, ptr, ptr, ptr, i64, i64 }
15 %struct.encode_aux_threshmatch.17.87.717.1851.2969 = type { ptr, ptr, i32, i32 }
16 %struct.encode_aux_pigeonhole.18.88.718.1852.2970 = type { float, float, i32, i32, ptr, i64, ptr, ptr, ptr }
18 ; Function Attrs: inlinehint nounwind uwtable
19 declare i64 @decode_packed_entry_number() #0
21 ; Function Attrs: nounwind uwtable
22 define void @vorbis_book_decodev_set(ptr %book) #1 {
24 br i1 undef, label %for.body, label %return
26 for.cond.loopexit: ; preds = %for.body.10, %if.end
27 br i1 undef, label %for.body, label %return
29 for.body: ; preds = %for.cond.loopexit, %entry
30 %call = tail call i64 @decode_packed_entry_number()
31 br i1 undef, label %return, label %if.end
33 if.end: ; preds = %for.body
34 %valuelist = getelementptr inbounds %struct.codebook.48.118.748.1882.2972, ptr %book, i64 0, i32 4
35 %0 = load ptr, ptr %valuelist, align 8
36 %sext = shl i64 %call, 32
37 %conv4 = ashr exact i64 %sext, 32
38 %1 = load i64, ptr %book, align 8
39 %mul = mul nsw i64 %1, %conv4
40 %add.ptr = getelementptr inbounds float, ptr %0, i64 %mul
41 %cmp8.7 = icmp sgt i64 %1, 0
42 br i1 %cmp8.7, label %for.body.10, label %for.cond.loopexit
44 for.body.10: ; preds = %for.body.10, %if.end
45 %indvars.iv15 = phi i64 [ %indvars.iv.next16, %for.body.10 ], [ 0, %if.end ]
46 %indvars.iv.next16 = add nuw nsw i64 %indvars.iv15, 1
47 %arrayidx = getelementptr inbounds float, ptr %add.ptr, i64 %indvars.iv15
48 %2 = load i32, ptr %arrayidx, align 4
49 %3 = load i64, ptr %book, align 8
50 %cmp8 = icmp slt i64 %indvars.iv.next16, %3
51 br i1 %cmp8, label %for.body.10, label %for.cond.loopexit
53 return: ; preds = %for.body, %for.cond.loopexit, %entry