Skip to content

Commit bf12954

Browse files
authored
[AMDGPU] Whitelist all intrinsics (#130150)
For code maintainability -- this may result in cases where we are applying the optimization where it is not profitable, but those are likely to be rare.
1 parent 813325e commit bf12954

File tree

2 files changed

+707
-625
lines changed

2 files changed

+707
-625
lines changed

llvm/lib/Target/AMDGPU/AMDGPULateCodeGenPrepare.cpp

Lines changed: 1 addition & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -127,92 +127,8 @@ class LiveRegOptimizer {
127127
return LK.first != TargetLoweringBase::TypeLegal;
128128
}
129129

130-
/// Check if intrinsic natively operates on 8-bit or 16-bit
131-
bool isNativeIntrinsic(Intrinsic::ID ID) {
132-
switch (ID) {
133-
case Intrinsic::amdgcn_dot4_f32_fp8_bf8:
134-
case Intrinsic::amdgcn_dot4_f32_bf8_fp8:
135-
case Intrinsic::amdgcn_dot4_f32_fp8_fp8:
136-
case Intrinsic::amdgcn_dot4_f32_bf8_bf8:
137-
case Intrinsic::amdgcn_mfma_i32_4x4x4i8:
138-
case Intrinsic::amdgcn_mfma_i32_16x16x4i8:
139-
case Intrinsic::amdgcn_mfma_i32_32x32x4i8:
140-
case Intrinsic::amdgcn_mfma_i32_16x16x16i8:
141-
case Intrinsic::amdgcn_mfma_i32_32x32x8i8:
142-
case Intrinsic::amdgcn_mfma_i32_16x16x64_i8:
143-
case Intrinsic::amdgcn_mfma_i32_32x32x32_i8:
144-
case Intrinsic::amdgcn_mfma_i32_32x32x16_i8:
145-
case Intrinsic::amdgcn_mfma_i32_16x16x32_i8:
146-
case Intrinsic::amdgcn_mfma_f32_16x16x32_bf8_bf8:
147-
case Intrinsic::amdgcn_mfma_f32_16x16x32_bf8_fp8:
148-
case Intrinsic::amdgcn_mfma_f32_16x16x32_fp8_bf8:
149-
case Intrinsic::amdgcn_mfma_f32_16x16x32_fp8_fp8:
150-
case Intrinsic::amdgcn_mfma_f32_32x32x16_bf8_bf8:
151-
case Intrinsic::amdgcn_mfma_f32_32x32x16_bf8_fp8:
152-
case Intrinsic::amdgcn_mfma_f32_32x32x16_fp8_bf8:
153-
case Intrinsic::amdgcn_mfma_f32_32x32x16_fp8_fp8:
154-
case Intrinsic::amdgcn_smfmac_i32_16x16x64_i8:
155-
case Intrinsic::amdgcn_smfmac_i32_32x32x32_i8:
156-
case Intrinsic::amdgcn_smfmac_f32_16x16x64_bf8_bf8:
157-
case Intrinsic::amdgcn_smfmac_f32_16x16x64_bf8_fp8:
158-
case Intrinsic::amdgcn_smfmac_f32_16x16x64_fp8_bf8:
159-
case Intrinsic::amdgcn_smfmac_f32_16x16x64_fp8_fp8:
160-
case Intrinsic::amdgcn_smfmac_f32_32x32x32_bf8_bf8:
161-
case Intrinsic::amdgcn_smfmac_f32_32x32x32_bf8_fp8:
162-
case Intrinsic::amdgcn_smfmac_f32_32x32x32_fp8_bf8:
163-
case Intrinsic::amdgcn_smfmac_f32_32x32x32_fp8_fp8:
164-
case Intrinsic::amdgcn_smfmac_i32_16x16x128_i8:
165-
case Intrinsic::amdgcn_smfmac_i32_32x32x64_i8:
166-
case Intrinsic::amdgcn_smfmac_f32_16x16x128_bf8_bf8:
167-
case Intrinsic::amdgcn_smfmac_f32_16x16x128_bf8_fp8:
168-
case Intrinsic::amdgcn_smfmac_f32_16x16x128_fp8_bf8:
169-
case Intrinsic::amdgcn_smfmac_f32_16x16x128_fp8_fp8:
170-
case Intrinsic::amdgcn_smfmac_f32_32x32x64_bf8_bf8:
171-
case Intrinsic::amdgcn_smfmac_f32_32x32x64_bf8_fp8:
172-
case Intrinsic::amdgcn_smfmac_f32_32x32x64_fp8_bf8:
173-
case Intrinsic::amdgcn_smfmac_f32_32x32x64_fp8_fp8:
174-
case Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_fp8:
175-
case Intrinsic::amdgcn_wmma_f32_16x16x16_fp8_bf8:
176-
case Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_fp8:
177-
case Intrinsic::amdgcn_wmma_f32_16x16x16_bf8_bf8:
178-
case Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_fp8:
179-
case Intrinsic::amdgcn_swmmac_f32_16x16x32_fp8_bf8:
180-
case Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_fp8:
181-
case Intrinsic::amdgcn_swmmac_f32_16x16x32_bf8_bf8:
182-
case Intrinsic::amdgcn_wmma_i32_16x16x16_iu8:
183-
case Intrinsic::amdgcn_wmma_i32_16x16x16_iu4:
184-
case Intrinsic::amdgcn_wmma_i32_16x16x32_iu4:
185-
case Intrinsic::amdgcn_swmmac_i32_16x16x32_iu8:
186-
case Intrinsic::amdgcn_swmmac_i32_16x16x32_iu4:
187-
case Intrinsic::amdgcn_swmmac_i32_16x16x64_iu4:
188-
case Intrinsic::amdgcn_raw_buffer_store_format:
189-
case Intrinsic::amdgcn_raw_buffer_store:
190-
case Intrinsic::amdgcn_raw_ptr_buffer_store_format:
191-
case Intrinsic::amdgcn_raw_ptr_buffer_store:
192-
case Intrinsic::amdgcn_struct_buffer_store_format:
193-
case Intrinsic::amdgcn_struct_buffer_store:
194-
case Intrinsic::amdgcn_struct_ptr_buffer_store_format:
195-
case Intrinsic::amdgcn_struct_ptr_buffer_store:
196-
case Intrinsic::amdgcn_raw_tbuffer_store:
197-
case Intrinsic::amdgcn_raw_ptr_tbuffer_store:
198-
case Intrinsic::amdgcn_struct_ptr_tbuffer_store:
199-
case Intrinsic::amdgcn_struct_tbuffer_store:
200-
return true;
201-
default:
202-
return false;
203-
}
204-
}
205-
206130
bool isOpLegal(Instruction *I) {
207-
if (const auto *Intr = dyn_cast<IntrinsicInst>(I)) {
208-
Intrinsic::ID ID = Intr->getIntrinsicID();
209-
if (isNativeIntrinsic(ID))
210-
return true;
211-
}
212-
// Stores
213-
if (isa<StoreInst>(I))
214-
return true;
215-
return false;
131+
return isa<StoreInst>(I) || isa<IntrinsicInst>(I);
216132
}
217133

218134
bool isCoercionProfitable(Instruction *II) {

0 commit comments

Comments
 (0)