Skip to content

Commit fbf67d8

Browse files
committed
GlobalISel: Add DAG compat for G_FCANONICALIZE
llvm-svn: 364758
1 parent ceb9da5 commit fbf67d8

File tree

2 files changed

+170
-0
lines changed

2 files changed

+170
-0
lines changed

llvm/include/llvm/Target/GlobalISel/SelectionDAGCompat.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ def : GINodeEquiv<G_FREM, frem>;
7676
def : GINodeEquiv<G_FPOW, fpow>;
7777
def : GINodeEquiv<G_FEXP2, fexp2>;
7878
def : GINodeEquiv<G_FLOG2, flog2>;
79+
def : GINodeEquiv<G_FCANONICALIZE, fcanonicalize>;
7980
def : GINodeEquiv<G_INTRINSIC, intrinsic_wo_chain>;
8081
// ISD::INTRINSIC_VOID can also be handled with G_INTRINSIC_W_SIDE_EFFECTS.
8182
def : GINodeEquiv<G_INTRINSIC_W_SIDE_EFFECTS, intrinsic_void>;
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -march=amdgcn -mcpu=gfx900 -mattr=+fp32-denormals,+fp64-fp16-denormals -run-pass=instruction-select -global-isel-abort=2 -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9-DENORM %s
3+
# RUN: llc -march=amdgcn -mcpu=gfx900 -mattr=-fp32-denormals,-fp64-fp16-denormals -run-pass=instruction-select -global-isel-abort=2 -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9-FLUSH %s
4+
5+
---
6+
7+
name: fcanonicalize_f16
8+
legalized: true
9+
regBankSelected: true
10+
11+
body: |
12+
bb.0:
13+
liveins: $vgpr0
14+
; GFX9-DENORM-LABEL: name: fcanonicalize_f16
15+
; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
16+
; GFX9-DENORM: [[V_MAX_F16_e64_:%[0-9]+]]:vgpr_32 = V_MAX_F16_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $exec
17+
; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F16_e64_]]
18+
; GFX9-FLUSH-LABEL: name: fcanonicalize_f16
19+
; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
20+
; GFX9-FLUSH: [[V_MUL_F16_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F16_e64 0, 15360, 0, [[COPY]], 0, 0, implicit $exec
21+
; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F16_e64_]]
22+
%0:vgpr(s32) = COPY $vgpr0
23+
%1:vgpr(s16) = G_TRUNC %0
24+
%2:vgpr(s16) = G_FCANONICALIZE %1
25+
S_ENDPGM 0, implicit %2
26+
...
27+
28+
---
29+
30+
name: fcanonicalize_f32
31+
legalized: true
32+
regBankSelected: true
33+
34+
body: |
35+
bb.0:
36+
liveins: $vgpr0
37+
; GFX9-DENORM-LABEL: name: fcanonicalize_f32
38+
; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
39+
; GFX9-DENORM: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32 = V_MAX_F32_e64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $exec
40+
; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]]
41+
; GFX9-FLUSH-LABEL: name: fcanonicalize_f32
42+
; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
43+
; GFX9-FLUSH: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 1065353216, 0, [[COPY]], 0, 0, implicit $exec
44+
; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]]
45+
%0:vgpr(s32) = COPY $vgpr0
46+
%1:vgpr(s32) = G_FCANONICALIZE %0
47+
S_ENDPGM 0, implicit %1
48+
...
49+
50+
---
51+
52+
name: fcanonicalize_v2f16
53+
legalized: true
54+
regBankSelected: true
55+
56+
body: |
57+
bb.0:
58+
liveins: $vgpr0
59+
; GFX9-DENORM-LABEL: name: fcanonicalize_v2f16
60+
; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
61+
; GFX9-DENORM: [[FCANONICALIZE:%[0-9]+]]:vgpr(<2 x s16>) = G_FCANONICALIZE [[COPY]]
62+
; GFX9-DENORM: S_ENDPGM 0, implicit [[FCANONICALIZE]](<2 x s16>)
63+
; GFX9-FLUSH-LABEL: name: fcanonicalize_v2f16
64+
; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr(<2 x s16>) = COPY $vgpr0
65+
; GFX9-FLUSH: [[FCANONICALIZE:%[0-9]+]]:vgpr(<2 x s16>) = G_FCANONICALIZE [[COPY]]
66+
; GFX9-FLUSH: S_ENDPGM 0, implicit [[FCANONICALIZE]](<2 x s16>)
67+
%0:vgpr(<2 x s16>) = COPY $vgpr0
68+
%1:vgpr(<2 x s16>) = G_FCANONICALIZE %0
69+
S_ENDPGM 0, implicit %1
70+
...
71+
72+
---
73+
74+
name: fcanonicalize_f64
75+
legalized: true
76+
regBankSelected: true
77+
78+
body: |
79+
bb.0:
80+
liveins: $vgpr0_vgpr1
81+
; GFX9-DENORM-LABEL: name: fcanonicalize_f64
82+
; GFX9-DENORM: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
83+
; GFX9-DENORM: [[V_MAX_F64_:%[0-9]+]]:vreg_64 = V_MAX_F64 0, [[COPY]], 0, [[COPY]], 0, 0, implicit $exec
84+
; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F64_]]
85+
; GFX9-FLUSH-LABEL: name: fcanonicalize_f64
86+
; GFX9-FLUSH: [[COPY:%[0-9]+]]:vreg_64 = COPY $vgpr0_vgpr1
87+
; GFX9-FLUSH: [[V_MUL_F64_:%[0-9]+]]:vreg_64 = V_MUL_F64 0, 4607182418800017408, 0, [[COPY]], 0, 0, implicit $exec
88+
; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F64_]]
89+
%0:vgpr(s64) = COPY $vgpr0_vgpr1
90+
%1:vgpr(s64) = G_FCANONICALIZE %0
91+
S_ENDPGM 0, implicit %1
92+
...
93+
94+
---
95+
96+
name: fcanonicalize_fabs_f32
97+
legalized: true
98+
regBankSelected: true
99+
100+
body: |
101+
bb.0:
102+
liveins: $vgpr0
103+
; GFX9-DENORM-LABEL: name: fcanonicalize_fabs_f32
104+
; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
105+
; GFX9-DENORM: [[FABS:%[0-9]+]]:vgpr_32(s32) = G_FABS [[COPY]]
106+
; GFX9-DENORM: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32(s32) = V_MAX_F32_e64 0, [[FABS]](s32), 0, [[FABS]](s32), 0, 0, implicit $exec
107+
; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]](s32)
108+
; GFX9-FLUSH-LABEL: name: fcanonicalize_fabs_f32
109+
; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
110+
; GFX9-FLUSH: [[FABS:%[0-9]+]]:vgpr_32(s32) = G_FABS [[COPY]]
111+
; GFX9-FLUSH: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32(s32) = V_MUL_F32_e64 0, 1065353216, 0, [[FABS]](s32), 0, 0, implicit $exec
112+
; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]](s32)
113+
%0:vgpr(s32) = COPY $vgpr0
114+
%1:vgpr(s32) = G_FABS %0
115+
%2:vgpr(s32) = G_FCANONICALIZE %1
116+
S_ENDPGM 0, implicit %2
117+
...
118+
119+
---
120+
121+
name: fcanonicalize_fneg_f32
122+
legalized: true
123+
regBankSelected: true
124+
125+
body: |
126+
bb.0:
127+
liveins: $vgpr0
128+
; GFX9-DENORM-LABEL: name: fcanonicalize_fneg_f32
129+
; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
130+
; GFX9-DENORM: [[FNEG:%[0-9]+]]:vgpr_32(s32) = G_FNEG [[COPY]]
131+
; GFX9-DENORM: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32(s32) = V_MAX_F32_e64 0, [[FNEG]](s32), 0, [[FNEG]](s32), 0, 0, implicit $exec
132+
; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]](s32)
133+
; GFX9-FLUSH-LABEL: name: fcanonicalize_fneg_f32
134+
; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
135+
; GFX9-FLUSH: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32 = V_MUL_F32_e64 0, 3212836864, 0, [[COPY]], 0, 0, implicit $exec
136+
; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]]
137+
%0:vgpr(s32) = COPY $vgpr0
138+
%1:vgpr(s32) = G_FNEG %0
139+
%2:vgpr(s32) = G_FCANONICALIZE %1
140+
S_ENDPGM 0, implicit %2
141+
...
142+
143+
---
144+
145+
name: fcanonicalize_fneg_fabs_f32
146+
legalized: true
147+
regBankSelected: true
148+
149+
body: |
150+
bb.0:
151+
liveins: $vgpr0
152+
; GFX9-DENORM-LABEL: name: fcanonicalize_fneg_fabs_f32
153+
; GFX9-DENORM: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
154+
; GFX9-DENORM: [[FNEG:%[0-9]+]]:vgpr(s32) = G_FNEG [[COPY]]
155+
; GFX9-DENORM: [[FABS:%[0-9]+]]:vgpr_32(s32) = G_FABS [[FNEG]]
156+
; GFX9-DENORM: [[V_MAX_F32_e64_:%[0-9]+]]:vgpr_32(s32) = V_MAX_F32_e64 0, [[FABS]](s32), 0, [[FABS]](s32), 0, 0, implicit $exec
157+
; GFX9-DENORM: S_ENDPGM 0, implicit [[V_MAX_F32_e64_]](s32)
158+
; GFX9-FLUSH-LABEL: name: fcanonicalize_fneg_fabs_f32
159+
; GFX9-FLUSH: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
160+
; GFX9-FLUSH: [[FNEG:%[0-9]+]]:vgpr(s32) = G_FNEG [[COPY]]
161+
; GFX9-FLUSH: [[FABS:%[0-9]+]]:vgpr_32(s32) = G_FABS [[FNEG]]
162+
; GFX9-FLUSH: [[V_MUL_F32_e64_:%[0-9]+]]:vgpr_32(s32) = V_MUL_F32_e64 0, 1065353216, 0, [[FABS]](s32), 0, 0, implicit $exec
163+
; GFX9-FLUSH: S_ENDPGM 0, implicit [[V_MUL_F32_e64_]](s32)
164+
%0:vgpr(s32) = COPY $vgpr0
165+
%1:vgpr(s32) = G_FNEG %0
166+
%2:vgpr(s32) = G_FABS %1
167+
%3:vgpr(s32) = G_FCANONICALIZE %2
168+
S_ENDPGM 0, implicit %3
169+
...

0 commit comments

Comments
 (0)