File: basic.ll

package info (click to toggle)
intel-graphics-compiler2 2.16.0-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 106,644 kB
  • sloc: cpp: 805,640; lisp: 287,672; ansic: 16,414; python: 3,952; yacc: 2,588; lex: 1,666; pascal: 313; sh: 186; makefile: 35
file content (84 lines) | stat: -rw-r--r-- 2,850 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
;=========================== begin_copyright_notice ============================
;
; Copyright (C) 2021-2024 Intel Corporation
;
; SPDX-License-Identifier: MIT
;
;============================ end_copyright_notice =============================
;
; REQUIRES: llvm-14-plus
; RUN: igc_opt --opaque-pointers -igc-hoist-fmul-in-loop-pass -S < %s | FileCheck %s
; ------------------------------------------------
; HoistFMulInLoopPass
; ------------------------------------------------

; Test checks that multiply for this pattern is hoisted:
;
;  From:
;    sum = 0;
;    loop {
;      sum += x * ... * y * loopinvirant;
;    }
;
;  To:
;    sum = 0;
;    loop {
;      sum += x * ... * y;
;    }
;    sum = sum * loopinvirant

define void @test_loop(ptr %a, ptr %b, float %c) {
; CHECK-LABEL: @test_loop(
; CHECK:  entry:
; CHECK:    [[TMP0:%[A-z0-9]*]] = load float, ptr [[A:%[A-z0-9]*]], align 4
; CHECK:    [[TMP1:%[A-z0-9]*]] = load float, ptr [[B:%[A-z0-9]*]], align 4
; CHECK:    [[TMP2:%[A-z0-9]*]] = fcmp olt float [[TMP0]], [[TMP1]]
; CHECK:    br i1 [[TMP2]], label %[[END:[A-z0-9.]*]], label %[[FOR_BODY:[A-z0-9.]*]]
; CHECK:  [[FOR_BODY]]:
; CHECK:    [[TMP3:%[A-z0-9]*]] = phi float [ [[TMP7:%[A-z0-9]*]], %[[FOR_BODY]] ], [ 0.000000e+00, [[ENTRY:%[A-z0-9]*]] ]
; CHECK:    [[TMP4:%[A-z0-9]*]] = phi float [ [[TMP5:%[A-z0-9]*]], %[[FOR_BODY]] ], [ [[TMP1]], [[ENTRY]] ]
; CHECK:    [[TMP5]] = fmul float [[TMP4]], [[TMP4]]
; CHECK:    [[TMP6:%[A-z0-9]*]] = fmul float [[TMP5]], [[TMP0]]
; CHECK:    [[TMP7]] = fadd float [[TMP5]], [[TMP3]]
; CHECK:    [[TMP8:%[A-z0-9]*]] = fcmp oeq float [[TMP5]], 1.000000e+00
; CHECK:    br i1 [[TMP8]], label %[[FOR_BODY]], label %[[FOR_END:[A-z0-9.]*]]
; CHECK:  [[FOR_END]]:
; CHECK:    [[HOIST:%[A-z0-9]*]] = fmul float [[TMP7]], [[TMP0]]
; CHECK:    [[HOIST1:%[A-z0-9]*]] = fadd float [[HOIST]], [[TMP0]]
; CHECK:    [[TMP9:%[A-z0-9]*]] = fadd float [[HOIST1]], 1.300000e+01
; CHECK:    br label %[[END]]
; CHECK:  [[END]]:
; CHECK:    [[TMP10:%[A-z0-9]*]] = phi float [ [[TMP0]], [[ENTRY]] ], [ [[TMP9]], %[[FOR_END]] ]
; CHECK:    store float [[TMP10]], ptr [[A]], align 4
; CHECK:    ret void
;
entry:
  %0 = load float, ptr %a, align 4
  %1 = load float, ptr %b, align 4
  %2 = fcmp olt float %0, %1
  br i1 %2, label %end, label %for.body

for.body:
  %3 = phi float [ %7, %for.body ], [ %0, %entry ]
  %4 = phi float [ %5, %for.body ], [ %1, %entry ]
  %5 = fmul float %4, %4
  %6 = fmul float %5, %0
  %7 = fadd float %6, %3
  %8 = fcmp oeq float %5, 1.000000e+00
  br i1 %8, label %for.body, label %for.end

for.end:
  %9 = fadd  float %7, 13.0
  br label %end
end:
  %10 = phi float [ %0, %entry ], [ %9, %for.end ]
  store float %10, ptr %a, align 4
  ret void
}

!IGCMetadata = !{!0}
!igc.functions = !{}

!0 = !{!"ModuleMD", !1}
!1 = !{!"compOpt", !2}
!2 = !{!"FastRelaxedMath", i1 true}