xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/combine-rsq.mir (revision 9e9907f1cfa424366fba58d9520f9305b537cec9)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s
3
4---
5name:            rcp_sqrt_test_f32
6body:             |
7  bb.0:
8    liveins: $sgpr0
9
10    ; GCN-LABEL: name: rcp_sqrt_test_f32
11    ; GCN: liveins: $sgpr0
12    ; GCN-NEXT: {{  $}}
13    ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
14    ; GCN-NEXT: [[FSQRT:%[0-9]+]]:_(s32) = G_FSQRT [[COPY]]
15    ; GCN-NEXT: [[INT:%[0-9]+]]:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), [[FSQRT]](s32)
16    ; GCN-NEXT: $vgpr0 = COPY [[INT]](s32)
17    ; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
18    %0:_(s32) = COPY $sgpr0
19    %2:_(s32) = G_FSQRT %0:_
20    %3:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %2:_(s32)
21    $vgpr0 = COPY %3:_(s32)
22    SI_RETURN_TO_EPILOG implicit $vgpr0
23
24...
25
26---
27name:            contract_afn_rcp_contract_sqrt_test_f32
28body:             |
29  bb.0:
30    liveins: $sgpr0
31
32    ; GCN-LABEL: name: contract_afn_rcp_contract_sqrt_test_f32
33    ; GCN: liveins: $sgpr0
34    ; GCN-NEXT: {{  $}}
35    ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
36    ; GCN-NEXT: [[INT:%[0-9]+]]:_(s32) = contract afn G_INTRINSIC intrinsic(@llvm.amdgcn.rsq), [[COPY]](s32)
37    ; GCN-NEXT: $vgpr0 = COPY [[INT]](s32)
38    ; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
39    %0:_(s32) = COPY $sgpr0
40    %2:_(s32) = contract G_FSQRT %0:_
41    %3:_(s32) = contract afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %2:_(s32)
42    $vgpr0 = COPY %3:_(s32)
43    SI_RETURN_TO_EPILOG implicit $vgpr0
44
45...
46
47---
48name:            sqrt_rcp_test_f32
49body:             |
50  bb.0:
51    liveins: $sgpr0
52
53    ; GCN-LABEL: name: sqrt_rcp_test_f32
54    ; GCN: liveins: $sgpr0
55    ; GCN-NEXT: {{  $}}
56    ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
57    ; GCN-NEXT: [[INT:%[0-9]+]]:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), [[COPY]](s32)
58    ; GCN-NEXT: [[FSQRT:%[0-9]+]]:_(s32) = G_FSQRT [[INT]]
59    ; GCN-NEXT: $vgpr0 = COPY [[FSQRT]](s32)
60    ; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
61    %0:_(s32) = COPY $sgpr0
62    %2:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %0:_(s32)
63    %3:_(s32) = G_FSQRT %2:_
64    $vgpr0 = COPY %3:_(s32)
65    SI_RETURN_TO_EPILOG implicit $vgpr0
66
67...
68
69---
70name:            afn_rcp_afn_amdgcn_sqrt_test_f32
71body:             |
72  bb.0:
73    liveins: $sgpr0
74
75    ; GCN-LABEL: name: afn_rcp_afn_amdgcn_sqrt_test_f32
76    ; GCN: liveins: $sgpr0
77    ; GCN-NEXT: {{  $}}
78    ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
79    ; GCN-NEXT: [[INT:%[0-9]+]]:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.sqrt), [[COPY]](s32)
80    ; GCN-NEXT: [[INT1:%[0-9]+]]:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), [[INT]](s32)
81    ; GCN-NEXT: $vgpr0 = COPY [[INT1]](s32)
82    ; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
83    %0:_(s32) = COPY $sgpr0
84    %1:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.sqrt), %0:_(s32)
85    %2:_(s32) = afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %1:_(s32)
86    $vgpr0 = COPY %2
87    SI_RETURN_TO_EPILOG implicit $vgpr0
88
89...
90
91---
92name:            afn_contract_rcp_afn_contract_amdgcn_sqrt_test_f32
93body:             |
94  bb.0:
95    liveins: $sgpr0
96
97    ; GCN-LABEL: name: afn_contract_rcp_afn_contract_amdgcn_sqrt_test_f32
98    ; GCN: liveins: $sgpr0
99    ; GCN-NEXT: {{  $}}
100    ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
101    ; GCN-NEXT: [[INT:%[0-9]+]]:_(s32) = contract afn G_INTRINSIC intrinsic(@llvm.amdgcn.sqrt), [[COPY]](s32)
102    ; GCN-NEXT: [[INT1:%[0-9]+]]:_(s32) = contract afn G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), [[INT]](s32)
103    ; GCN-NEXT: $vgpr0 = COPY [[INT1]](s32)
104    ; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
105    %0:_(s32) = COPY $sgpr0
106    %1:_(s32) = afn contract G_INTRINSIC intrinsic(@llvm.amdgcn.sqrt), %0:_(s32)
107    %2:_(s32) = afn contract G_INTRINSIC intrinsic(@llvm.amdgcn.rcp), %1:_(s32)
108    $vgpr0 = COPY %2
109    SI_RETURN_TO_EPILOG implicit $vgpr0
110
111...
112
113---
114name:            rsq_test_f16
115body:             |
116  bb.0:
117    liveins: $sgpr0
118
119    ; GCN-LABEL: name: rsq_test_f16
120    ; GCN: liveins: $sgpr0
121    ; GCN-NEXT: {{  $}}
122    ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
123    ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
124    ; GCN-NEXT: %sqrt:_(s16) = G_FSQRT [[TRUNC]]
125    ; GCN-NEXT: %one:_(s16) = contract G_FCONSTANT half 0xH3C00
126    ; GCN-NEXT: %rsq:_(s16) = contract G_FDIV %one, %sqrt
127    ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16)
128    ; GCN-NEXT: $vgpr0 = COPY %ext(s32)
129    ; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
130    %0:_(s32) = COPY $sgpr0
131    %1:_(s16) = G_TRUNC %0
132    %sqrt:_(s16) = G_FSQRT %1:_
133    %one:_(s16) = contract G_FCONSTANT half 1.0
134    %rsq:_(s16) = contract G_FDIV %one, %sqrt
135    %ext:_(s32) = G_ANYEXT %rsq
136    $vgpr0 = COPY %ext
137    SI_RETURN_TO_EPILOG implicit $vgpr0
138
139...
140
141---
142name:            neg_rsq_test_f16
143body:             |
144  bb.0:
145    liveins: $sgpr0
146
147    ; GCN-LABEL: name: neg_rsq_test_f16
148    ; GCN: liveins: $sgpr0
149    ; GCN-NEXT: {{  $}}
150    ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $sgpr0
151    ; GCN-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
152    ; GCN-NEXT: %sqrt:_(s16) = G_FSQRT [[TRUNC]]
153    ; GCN-NEXT: %one:_(s16) = contract G_FCONSTANT half 0xHBC00
154    ; GCN-NEXT: %rsq:_(s16) = contract G_FDIV %one, %sqrt
155    ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16)
156    ; GCN-NEXT: $vgpr0 = COPY %ext(s32)
157    ; GCN-NEXT: SI_RETURN_TO_EPILOG implicit $vgpr0
158    %0:_(s32) = COPY $sgpr0
159    %1:_(s16) = G_TRUNC %0
160    %sqrt:_(s16) = G_FSQRT %1:_
161    %one:_(s16) = contract G_FCONSTANT half -1.0
162    %rsq:_(s16) = contract G_FDIV %one, %sqrt
163    %ext:_(s32) = G_ANYEXT %rsq
164    $vgpr0 = COPY %ext
165    SI_RETURN_TO_EPILOG implicit $vgpr0
166
167...
168