File: psc.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 (90 lines) | stat: -rw-r--r-- 2,966 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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
;=========================== begin_copyright_notice ============================
;
; Copyright (C) 2021 Intel Corporation
;
; SPDX-License-Identifier: MIT
;
;============================ end_copyright_notice =============================

; RUN: igc_opt %s -S -o - -igc-promote-constant-structs | FileCheck %s


%struct.S = type { i64, i64, i64 }

; Function Attrs: convergent nounwind
define void @f0(i32 %src1) {
  %s1 = alloca %struct.S, align 8
  %s2 = alloca %struct.S, align 8
  %s1e0 = getelementptr inbounds %struct.S, %struct.S* %s1, i64 0, i32 0
  store i64 0, i64* %s1e0, align 8
  %s1e2 = getelementptr inbounds %struct.S, %struct.S* %s1, i64 0, i32 2
  store i64 0, i64* %s1e2, align 8
  %s1e1 = getelementptr inbounds %struct.S, %struct.S* %s1, i64 0, i32 1
  store i64 0, i64* %s1e1, align 8
  %1 = icmp eq i32 %src1, 0
  br i1 %1, label %bb1, label %bb2

bb1: ; preds = %0
  store i64 1, i64* %s1e1, align 8
  br label %bb2

bb2: ; preds = %0
  %2 = load i64, i64* %s1e2, align 8
  %3 = load i64, i64* %s1e2, align 8
  %4 = load i64, i64* %s1e1, align 8
  br label %bb3

bb3: ; preds = %bb2, %bb3
  %5 = phi i64 [ 4, %bb2 ], [ %7, %bb3 ]
  %6 = load i64, i64* %s1e2, align 8
  %7 = sub i64 %5, 1
  store i64 %7, i64* %s1e2, align 8
  %8 = load i64, i64* %s1e2, align 8
  %9 = icmp eq i64 %7, 0
  br i1 %9, label %bb3, label %bb4

bb4:
  %10 = bitcast %struct.S* %s1 to i8*
  %11 = bitcast %struct.S* %s2 to i8*
  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %10, i8* %11, i64 8, i1 false)
  %12 = load i64, i64* %s1e0, align 8
  %13 = icmp eq i64 %12, 0
  ret void
}

; Function Attrs: nounwind
declare void @llvm.memcpy.p0i8.p0i8.i64(i8 * nocapture, i8 * nocapture, i64, i1) #0

attributes #0 = { nounwind }

 ; CHECK-LABEL: define void @f0
 ; CHECK:  %s1 = alloca %struct.S, align 8
 ; CHECK:  %s2 = alloca %struct.S, align 8
 ; CHECK:  %s1e0 = getelementptr inbounds %struct.S, %struct.S* %s1, i64 0, i32 0
 ; CHECK:  store i64 0, i64* %s1e0, align 8
 ; CHECK:  %s1e2 = getelementptr inbounds %struct.S, %struct.S* %s1, i64 0, i32 2
 ; CHECK:  store i64 0, i64* %s1e2, align 8
 ; CHECK:  %s1e1 = getelementptr inbounds %struct.S, %struct.S* %s1, i64 0, i32 1
 ; CHECK:  store i64 0, i64* %s1e1, align 8
 ; CHECK:  %1 = icmp eq i32 %src1, 0
 ; CHECK:  br i1 %1, label %bb1, label %bb2

 ; CHECK:  store i64 1, i64* %s1e1, align 8
 ; CHECK:  br label %bb2

 ; CHECK:  %2 = load i64, i64* %s1e1, align 8
 ; CHECK:  br label %bb3

 ; CHECK:  %3 = phi i64 [ 4, %bb2 ], [ %4, %bb3 ]
 ; CHECK:  %4 = sub i64 %3, 1
 ; CHECK:  store i64 %4, i64* %s1e2, align 8
 ; CHECK:  %5 = load i64, i64* %s1e2, align 8
 ; CHECK:  %6 = icmp eq i64 %4, 0
 ; CHECK:  br i1 %6, label %bb3, label %bb4

 ; CHECK:  %7 = bitcast %struct.S* %s1 to i8*
 ; CHECK:  %8 = bitcast %struct.S* %s2 to i8*
 ; CHECK:  call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 8, i1 false)
 ; CHECK:  %9 = load i64, i64* %s1e0, align 8
 ; CHECK:  %10 = icmp eq i64 %9, 0
 ; CHECK:  ret void