Skip to content

Commit fb4bd70

Browse files
committed
FPInfo: AMDGPULegalizerInfo and Combiner
1 parent e01ddfa commit fb4bd70

File tree

6 files changed

+1374
-1216
lines changed

6 files changed

+1374
-1216
lines changed

llvm/lib/Target/AMDGPU/AMDGPUGlobalISelUtils.cpp

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ static LLT getReadAnyLaneSplitTy(LLT Ty) {
120120
}
121121

122122
// Large scalars and 64-bit pointers
123-
return LLT::scalar(32);
123+
return LLT::integer(32);
124124
}
125125

126126
static Register buildReadAnyLane(MachineIRBuilder &B, Register VgprSrc,
@@ -131,9 +131,17 @@ static void unmergeReadAnyLane(MachineIRBuilder &B,
131131
LLT UnmergeTy, Register VgprSrc,
132132
const RegisterBankInfo &RBI) {
133133
const RegisterBank *VgprRB = &RBI.getRegBank(AMDGPU::VGPRRegBankID);
134-
auto Unmerge = B.buildUnmerge({VgprRB, UnmergeTy}, VgprSrc);
134+
LLT Ty = B.getMRI()->getType(VgprSrc);
135+
if (Ty.getScalarType().isFloat()) {
136+
VgprSrc = B.buildBitcast({VgprRB, Ty.changeToInteger()}, VgprSrc).getReg(0);
137+
}
138+
auto Unmerge = B.buildUnmerge({VgprRB, UnmergeTy.changeToInteger()}, VgprSrc);
135139
for (unsigned i = 0; i < Unmerge->getNumOperands() - 1; ++i) {
136-
SgprDstParts.push_back(buildReadAnyLane(B, Unmerge.getReg(i), RBI));
140+
Register Op = Unmerge.getReg(i);
141+
if (UnmergeTy.getScalarType().isFloat()) {
142+
Op = B.buildBitcast({VgprRB, UnmergeTy}, Op).getReg(0);
143+
}
144+
SgprDstParts.push_back(buildReadAnyLane(B, Op, RBI));
137145
}
138146
}
139147

@@ -149,6 +157,11 @@ static Register buildReadAnyLane(MachineIRBuilder &B, Register VgprSrc,
149157
SmallVector<Register, 8> SgprDstParts;
150158
unmergeReadAnyLane(B, SgprDstParts, getReadAnyLaneSplitTy(Ty), VgprSrc, RBI);
151159

160+
if (Ty.getScalarType().isFloat()) {
161+
auto Merge = B.buildMergeLikeInstr({SgprRB, Ty.changeToInteger()}, SgprDstParts);
162+
return B.buildBitcast({SgprRB, Ty}, Merge).getReg(0);
163+
}
164+
152165
return B.buildMergeLikeInstr({SgprRB, Ty}, SgprDstParts).getReg(0);
153166
}
154167

0 commit comments

Comments
 (0)