Skip to content

Commit 7f2b4e4

Browse files
committed
If constant widths differ pick larger one
1 parent 67aa036 commit 7f2b4e4

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4652,9 +4652,14 @@ 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);
4660+
46554661
MatchInfo = [=, &MI](MachineIRBuilder &B) {
4656-
auto NewCst = B.buildConstant(MRI.getType(Src2Reg),
4657-
C1->sextOrTrunc(C2->getBitWidth()) + *C2);
4662+
auto NewCst = B.buildConstant(Type, NewConst);
46584663
Observer.changingInstr(MI);
46594664
MI.getOperand(1).setReg(LHSSrc1);
46604665
MI.getOperand(2).setReg(NewCst.getReg(0));

llvm/test/CodeGen/AMDGPU/GlobalISel/combine-ptradd-reassociation.mir

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ body: |
1313
; CHECK-NEXT: {{ $}}
1414
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr1
1515
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:_(p1) = G_INTTOPTR [[COPY]](s64)
16-
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 12
17-
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[INTTOPTR]], [[C]](s32)
16+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 12
17+
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[INTTOPTR]], [[C]](s64)
1818
; CHECK-NEXT: SI_RETURN implicit [[PTR_ADD]](p1)
1919
%0:_(s64) = COPY $sgpr0_sgpr1
2020
%1:_(s64) = G_CONSTANT i64 8

0 commit comments

Comments
 (0)