File: invalid_add_rec_after_invariant_load_remapping.ll

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (55 lines) | stat: -rw-r--r-- 2,700 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
; RUN: opt %loadPolly -polly-print-scops -disable-output < %s
;
; This crashed at some point as we place %1 and %4 in the same equivalence class
; for invariant loads and when we remap SCEVs to use %4 instead of %1 AddRec SCEVs
; for the for.body.10 loop caused a crash as their operands were not invariant
; in the loop. While we know they are, ScalarEvolution does not. However, we can simply
; rewrite the AddRecs to hoist everything from the "start" out of the AddRec.
;
; Check we do not crash.
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"

%struct.codebook.48.118.748.1882.2972 = type { i64, i64, i64, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32 }
%struct.static_codebook.19.89.719.1853.2971 = type { i64, i64, ptr, i32, i64, i64, i32, i32, ptr, ptr, ptr, ptr, i32 }
%struct.encode_aux_nearestmatch.16.86.716.1850.2968 = type { ptr, ptr, ptr, ptr, i64, i64 }
%struct.encode_aux_threshmatch.17.87.717.1851.2969 = type { ptr, ptr, i32, i32 }
%struct.encode_aux_pigeonhole.18.88.718.1852.2970 = type { float, float, i32, i32, ptr, i64, ptr, ptr, ptr }

; Function Attrs: inlinehint nounwind uwtable
declare i64 @decode_packed_entry_number() #0

; Function Attrs: nounwind uwtable
define void @vorbis_book_decodev_set(ptr %book) #1 {
entry:
  br i1 undef, label %for.body, label %return

for.cond.loopexit:                                ; preds = %for.body.10, %if.end
  br i1 undef, label %for.body, label %return

for.body:                                         ; preds = %for.cond.loopexit, %entry
  %call = tail call i64 @decode_packed_entry_number()
  br i1 undef, label %return, label %if.end

if.end:                                           ; preds = %for.body
  %valuelist = getelementptr inbounds %struct.codebook.48.118.748.1882.2972, ptr %book, i64 0, i32 4
  %0 = load ptr, ptr %valuelist, align 8
  %sext = shl i64 %call, 32
  %conv4 = ashr exact i64 %sext, 32
  %1 = load i64, ptr %book, align 8
  %mul = mul nsw i64 %1, %conv4
  %add.ptr = getelementptr inbounds float, ptr %0, i64 %mul
  %cmp8.7 = icmp sgt i64 %1, 0
  br i1 %cmp8.7, label %for.body.10, label %for.cond.loopexit

for.body.10:                                      ; preds = %for.body.10, %if.end
  %indvars.iv15 = phi i64 [ %indvars.iv.next16, %for.body.10 ], [ 0, %if.end ]
  %indvars.iv.next16 = add nuw nsw i64 %indvars.iv15, 1
  %arrayidx = getelementptr inbounds float, ptr %add.ptr, i64 %indvars.iv15
  %2 = load i32, ptr %arrayidx, align 4
  %3 = load i64, ptr %book, align 8
  %cmp8 = icmp slt i64 %indvars.iv.next16, %3
  br i1 %cmp8, label %for.body.10, label %for.cond.loopexit

return:                                           ; preds = %for.body, %for.cond.loopexit, %entry
  ret void
}