File: psc.ll

package info (click to toggle)
intel-graphics-compiler2 2.28.4-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 792,744 kB
  • sloc: cpp: 5,761,745; ansic: 466,928; lisp: 312,143; python: 114,790; asm: 44,736; pascal: 10,930; sh: 8,033; perl: 7,914; ml: 3,625; awk: 3,523; yacc: 2,747; javascript: 2,667; lex: 1,898; f90: 1,028; cs: 573; xml: 474; makefile: 344; objc: 162
file content (90 lines) | stat: -rw-r--r-- 2,983 bytes parent folder | download
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 --typed-pointers %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