Skip to content

Commit 67aa036

Browse files
committed
[GlobalISel] Check width of APInts in Reassoc PtrAdd combine
1 parent d2dff43 commit 67aa036

File tree

2 files changed

+51
-1
lines changed

2 files changed

+51
-1
lines changed

llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4653,7 +4653,8 @@ bool CombinerHelper::matchReassocFoldConstantsInSubTree(GPtrAdd &MI,
46534653
return false;
46544654

46554655
MatchInfo = [=, &MI](MachineIRBuilder &B) {
4656-
auto NewCst = B.buildConstant(MRI.getType(Src2Reg), *C1 + *C2);
4656+
auto NewCst = B.buildConstant(MRI.getType(Src2Reg),
4657+
C1->sextOrTrunc(C2->getBitWidth()) + *C2);
46574658
Observer.changingInstr(MI);
46584659
MI.getOperand(1).setReg(LHSSrc1);
46594660
MI.getOperand(2).setReg(NewCst.getReg(0));
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=amdgcn -run-pass=amdgpu-prelegalizer-combiner -verify-machineinstrs %s -o - | FileCheck %s
3+
4+
---
5+
name: test_different_sizes_64_32
6+
tracksRegLiveness: true
7+
body: |
8+
bb.0:
9+
liveins: $sgpr0_sgpr1
10+
11+
; CHECK-LABEL: name: test_different_sizes_64_32
12+
; CHECK: liveins: $sgpr0_sgpr1
13+
; CHECK-NEXT: {{ $}}
14+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr1
15+
; 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)
18+
; CHECK-NEXT: SI_RETURN implicit [[PTR_ADD]](p1)
19+
%0:_(s64) = COPY $sgpr0_sgpr1
20+
%1:_(s64) = G_CONSTANT i64 8
21+
%2:_(s32) = G_CONSTANT i32 4
22+
%3:_(p1) = G_INTTOPTR %0(s64)
23+
%4:_(p1) = G_PTR_ADD %3, %1(s64)
24+
%5:_(p1) = G_PTR_ADD %4, %2(s32)
25+
SI_RETURN implicit %5(p1)
26+
...
27+
---
28+
name: test_different_sizes_32_64
29+
tracksRegLiveness: true
30+
body: |
31+
bb.0:
32+
liveins: $sgpr0_sgpr1
33+
34+
; CHECK-LABEL: name: test_different_sizes_32_64
35+
; CHECK: liveins: $sgpr0_sgpr1
36+
; CHECK-NEXT: {{ $}}
37+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $sgpr0_sgpr1
38+
; CHECK-NEXT: [[INTTOPTR:%[0-9]+]]:_(p1) = G_INTTOPTR [[COPY]](s64)
39+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 12
40+
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p1) = G_PTR_ADD [[INTTOPTR]], [[C]](s64)
41+
; CHECK-NEXT: SI_RETURN implicit [[PTR_ADD]](p1)
42+
%0:_(s64) = COPY $sgpr0_sgpr1
43+
%1:_(s64) = G_CONSTANT i64 8
44+
%2:_(s32) = G_CONSTANT i32 4
45+
%3:_(p1) = G_INTTOPTR %0(s64)
46+
%4:_(p1) = G_PTR_ADD %3, %2(s32)
47+
%5:_(p1) = G_PTR_ADD %4, %1(s64)
48+
SI_RETURN implicit %5(p1)
49+
...

0 commit comments

Comments
 (0)