File: infloop.ll

package info (click to toggle)
intel-graphics-compiler 1.0.12504.6-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 83,912 kB
  • sloc: cpp: 910,147; lisp: 202,655; ansic: 15,197; python: 4,025; yacc: 2,241; lex: 1,570; pascal: 244; sh: 104; makefile: 25
file content (44 lines) | stat: -rw-r--r-- 1,284 bytes parent folder | download | duplicates (2)
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
;=========================== begin_copyright_notice ============================
;
; Copyright (C) 2022 Intel Corporation
;
; SPDX-License-Identifier: MIT
;
;============================ end_copyright_notice =============================

; RUN: igc_opt %s -S -o - -igc-remat-address-arithmetic | FileCheck %s

; This unit test only checks if pass is able to deal with infinite loops of uses in "phi" function
; Function pattern - infinite loop using %privateBase
;
; kernel void foo(int cond) {
;     int x = 0;
;         if(cond>0)
;             for(int i=0;;i++)
;                 x = i;
; }

define spir_kernel void @foo(i8* %privateBase, i32 %cond) {
; CHECK: [[BASE:%.*]] = ptrtoint i8* %privateBase to i64
  %base = ptrtoint i8* %privateBase to i64
; CHECK: [[OFFSET:%.*]] = add i64 [[BASE]], 8
  %offset = add i64 %base, 8
  %ptr1 = inttoptr i64 %offset to i32*
  store i32 1, i32* %ptr1, align 4
  %compare = icmp sgt i32 %cond, 0
  br i1 %compare, label %enter, label %exit

enter:
  br label %loop

loop:
  %indvar = phi i32 [ 0, %enter ], [ %nextindvar, %loop ]
  %nextindvar = add i32 %indvar, 1
; CHECK: [[PTR:%.*]] = inttoptr i64 [[OFFSET]] to i32
  %ptr2 = inttoptr i64 %offset to i32*
  store i32 %nextindvar, i32* %ptr2, align 4
  br label %loop

exit:
  ret void
}