Skip to content

Commit c87d504

Browse files
committed
Pick correct size for the constant based on the addrspace
1 parent 7f2b4e4 commit c87d504

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4652,14 +4652,16 @@ bool CombinerHelper::matchReassocFoldConstantsInSubTree(GPtrAdd &MI,
46524652
if (!C2)
46534653
return false;
46544654

4655-
// If constant widths differ pick larger one.
4656-
unsigned BitWidth = std::max(C1->getBitWidth(), C2->getBitWidth());
4657-
APInt NewConst = C1->sext(BitWidth) + C2->sext(BitWidth);
4658-
LLT Type =
4659-
MRI.getType(C1->getBitWidth() > C2->getBitWidth() ? LHSSrc2 : Src2Reg);
4655+
// Pick correct size for the constant based on the address space
4656+
const DataLayout &DL = MI.getMF()->getDataLayout();
4657+
Register Dst = MI.getOperand(0).getReg();
4658+
unsigned AS = MRI.getType(Dst).getAddressSpace();
4659+
unsigned NewSize = DL.getIndexSize(AS) * 8;
4660+
APInt ConstVal = C1->sextOrTrunc(NewSize) + C2->sextOrTrunc(NewSize);
4661+
LLT ConstType = MRI.getType(Src2Reg).changeElementSize(NewSize);
46604662

46614663
MatchInfo = [=, &MI](MachineIRBuilder &B) {
4662-
auto NewCst = B.buildConstant(Type, NewConst);
4664+
auto NewCst = B.buildConstant(ConstType, ConstVal);
46634665
Observer.changingInstr(MI);
46644666
MI.getOperand(1).setReg(LHSSrc1);
46654667
MI.getOperand(2).setReg(NewCst.getReg(0));

0 commit comments

Comments
 (0)