File: register-pressure-reduction.ll

package info (click to toggle)
llvm-toolchain-15 1%3A15.0.6-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,554,644 kB
  • sloc: cpp: 5,922,452; ansic: 1,012,136; asm: 674,362; python: 191,568; objc: 73,855; f90: 42,327; lisp: 31,913; pascal: 11,973; javascript: 10,144; sh: 9,421; perl: 7,447; ml: 5,527; awk: 3,523; makefile: 2,520; xml: 885; cs: 573; fortran: 567
file content (135 lines) | stat: -rw-r--r-- 5,241 bytes parent folder | download | duplicates (6)
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -O3 < %s \
; RUN:   -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr9 | FileCheck %s
; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -O3 < %s \
; RUN:   -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 | FileCheck %s --check-prefix=CHECK-P8
; RUN: llc -verify-machineinstrs -ppc-asm-full-reg-names -ppc-fma-rp-factor=0.0 -O3 < %s \
; RUN:   -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr9 | FileCheck %s --check-prefix=CHECK-FMA

@global_val = external global float, align 4

define float @foo_float(float %0, float %1, float %2, float %3) {
; CHECK-LABEL: foo_float:
; CHECK:       # %bb.0:
; CHECK-NEXT:    addis r3, r2, .LCPI0_0@toc@ha
; CHECK-NEXT:    xsmulsp f1, f2, f1
; CHECK-NEXT:    xssubsp f0, f3, f4
; CHECK-NEXT:    lfs f2, .LCPI0_0@toc@l(r3)
; CHECK-NEXT:    xsmaddasp f1, f0, f2
; CHECK-NEXT:    blr
;
; CHECK-P8-LABEL: foo_float:
; CHECK-P8:       # %bb.0:
; CHECK-P8-NEXT:    xsmulsp f1, f2, f1
; CHECK-P8-NEXT:    addis r3, r2, .LCPI0_0@toc@ha
; CHECK-P8-NEXT:    xssubsp f0, f3, f4
; CHECK-P8-NEXT:    lfs f2, .LCPI0_0@toc@l(r3)
; CHECK-P8-NEXT:    xsmaddasp f1, f0, f2
; CHECK-P8-NEXT:    blr
;
; CHECK-FMA-LABEL: foo_float:
; CHECK-FMA:       # %bb.0:
; CHECK-FMA-NEXT:    addis r3, r2, .LCPI0_0@toc@ha
; CHECK-FMA-NEXT:    xsmulsp f1, f2, f1
; CHECK-FMA-NEXT:    lfs f0, .LCPI0_0@toc@l(r3)
; CHECK-FMA-NEXT:    addis r3, r2, .LCPI0_1@toc@ha
; CHECK-FMA-NEXT:    lfs f2, .LCPI0_1@toc@l(r3)
; CHECK-FMA-NEXT:    xsmaddasp f1, f4, f2
; CHECK-FMA-NEXT:    xsmaddasp f1, f3, f0
; CHECK-FMA-NEXT:    blr
  %5 = fmul contract reassoc nsz float %1, %0
  %6 = fsub contract reassoc nsz float %2, %3
  %7 = fmul contract reassoc nsz float %6, 0x3DB2533FE0000000
  %8 = fadd contract reassoc nsz float %7, %5
  ret float %8
}

define double @foo_double(double %0, double %1, double %2, double %3) {
; CHECK-LABEL: foo_double:
; CHECK:       # %bb.0:
; CHECK-NEXT:    xsmuldp f1, f2, f1
; CHECK-NEXT:    xssubdp f0, f3, f4
; CHECK-NEXT:    addis r3, r2, .LCPI1_0@toc@ha
; CHECK-NEXT:    lfd f2, .LCPI1_0@toc@l(r3)
; CHECK-NEXT:    xsmaddadp f1, f0, f2
; CHECK-NEXT:    blr
;
; CHECK-P8-LABEL: foo_double:
; CHECK-P8:       # %bb.0:
; CHECK-P8-NEXT:    xsmuldp f1, f2, f1
; CHECK-P8-NEXT:    addis r3, r2, .LCPI1_0@toc@ha
; CHECK-P8-NEXT:    xssubdp f0, f3, f4
; CHECK-P8-NEXT:    lfd f2, .LCPI1_0@toc@l(r3)
; CHECK-P8-NEXT:    xsmaddadp f1, f0, f2
; CHECK-P8-NEXT:    blr
;
; CHECK-FMA-LABEL: foo_double:
; CHECK-FMA:       # %bb.0:
; CHECK-FMA-NEXT:    addis r3, r2, .LCPI1_0@toc@ha
; CHECK-FMA-NEXT:    xsmuldp f1, f2, f1
; CHECK-FMA-NEXT:    lfd f0, .LCPI1_0@toc@l(r3)
; CHECK-FMA-NEXT:    addis r3, r2, .LCPI1_1@toc@ha
; CHECK-FMA-NEXT:    lfd f2, .LCPI1_1@toc@l(r3)
; CHECK-FMA-NEXT:    xsmaddadp f1, f4, f2
; CHECK-FMA-NEXT:    xsmaddadp f1, f3, f0
; CHECK-FMA-NEXT:    blr
  %5 = fmul contract reassoc nsz double %1, %0
  %6 = fsub contract reassoc nsz double %2, %3
  %7 = fmul contract reassoc nsz double %6, 0x3DB2533FE68CADDE
  %8 = fadd contract reassoc nsz double %7, %5
  ret double %8
}

define float @foo_float_reuse_const(float %0, float %1, float %2, float %3) {
; CHECK-LABEL: foo_float_reuse_const:
; CHECK:       # %bb.0:
; CHECK-NEXT:    addis r3, r2, .LCPI2_0@toc@ha
; CHECK-NEXT:    xsmulsp f1, f2, f1
; CHECK-NEXT:    xssubsp f0, f3, f4
; CHECK-NEXT:    lfs f3, .LCPI2_0@toc@l(r3)
; CHECK-NEXT:    addis r3, r2, .LCPI2_1@toc@ha
; CHECK-NEXT:    xsmaddasp f1, f0, f3
; CHECK-NEXT:    lfs f0, .LCPI2_1@toc@l(r3)
; CHECK-NEXT:    addis r3, r2, .LC0@toc@ha
; CHECK-NEXT:    ld r3, .LC0@toc@l(r3)
; CHECK-NEXT:    xsmulsp f0, f2, f0
; CHECK-NEXT:    stfs f0, 0(r3)
; CHECK-NEXT:    blr
;
; CHECK-P8-LABEL: foo_float_reuse_const:
; CHECK-P8:       # %bb.0:
; CHECK-P8-NEXT:    xsmulsp f1, f2, f1
; CHECK-P8-NEXT:    addis r3, r2, .LCPI2_0@toc@ha
; CHECK-P8-NEXT:    xssubsp f0, f3, f4
; CHECK-P8-NEXT:    lfs f3, .LCPI2_0@toc@l(r3)
; CHECK-P8-NEXT:    addis r3, r2, .LCPI2_1@toc@ha
; CHECK-P8-NEXT:    lfs f4, .LCPI2_1@toc@l(r3)
; CHECK-P8-NEXT:    addis r3, r2, .LC0@toc@ha
; CHECK-P8-NEXT:    ld r3, .LC0@toc@l(r3)
; CHECK-P8-NEXT:    xsmaddasp f1, f0, f3
; CHECK-P8-NEXT:    xsmulsp f0, f2, f4
; CHECK-P8-NEXT:    stfs f0, 0(r3)
; CHECK-P8-NEXT:    blr
;
; CHECK-FMA-LABEL: foo_float_reuse_const:
; CHECK-FMA:       # %bb.0:
; CHECK-FMA-NEXT:    addis r3, r2, .LCPI2_0@toc@ha
; CHECK-FMA-NEXT:    xsmulsp f1, f2, f1
; CHECK-FMA-NEXT:    lfs f0, .LCPI2_0@toc@l(r3)
; CHECK-FMA-NEXT:    addis r3, r2, .LCPI2_1@toc@ha
; CHECK-FMA-NEXT:    lfs f5, .LCPI2_1@toc@l(r3)
; CHECK-FMA-NEXT:    addis r3, r2, .LC0@toc@ha
; CHECK-FMA-NEXT:    ld r3, .LC0@toc@l(r3)
; CHECK-FMA-NEXT:    xsmaddasp f1, f4, f5
; CHECK-FMA-NEXT:    xsmaddasp f1, f3, f0
; CHECK-FMA-NEXT:    xsmulsp f0, f2, f5
; CHECK-FMA-NEXT:    stfs f0, 0(r3)
; CHECK-FMA-NEXT:    blr
  %5 = fmul contract reassoc nsz float %1, %0
  %6 = fsub contract reassoc nsz float %2, %3
  %7 = fmul contract reassoc nsz float %6, 0x3DB2533FE0000000
  %8 = fadd contract reassoc nsz float %7, %5
  %9 = fmul contract reassoc nsz float %1, 0xBDB2533FE0000000
  store float %9, float* @global_val, align 4
  ret float %8
}