Skip to content

Commit 3baedb4

Browse files
widlarizerEmil Tywoniak
and
Emil Tywoniak
authored
[GISel] Fix #77762: extend correct source registers in combiner helper rule extend_through_phis (#77765)
Since we already know which register we want to extend, we don't have to ask its defining MI about it --------- Co-authored-by: Emil Tywoniak <Emil.Tywoniak@hightec-rt.com>
1 parent 54c1954 commit 3baedb4

File tree

2 files changed

+68
-2
lines changed

2 files changed

+68
-2
lines changed

llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3939,7 +3939,8 @@ void CombinerHelper::applyExtendThroughPhis(MachineInstr &MI,
39393939
SmallSetVector<MachineInstr *, 8> SrcMIs;
39403940
SmallDenseMap<MachineInstr *, MachineInstr *, 8> OldToNewSrcMap;
39413941
for (unsigned SrcIdx = 1; SrcIdx < MI.getNumOperands(); SrcIdx += 2) {
3942-
auto *SrcMI = MRI.getVRegDef(MI.getOperand(SrcIdx).getReg());
3942+
auto SrcReg = MI.getOperand(SrcIdx).getReg();
3943+
auto *SrcMI = MRI.getVRegDef(SrcReg);
39433944
if (!SrcMIs.insert(SrcMI))
39443945
continue;
39453946

@@ -3952,7 +3953,7 @@ void CombinerHelper::applyExtendThroughPhis(MachineInstr &MI,
39523953
Builder.setInsertPt(*SrcMI->getParent(), InsertPt);
39533954
Builder.setDebugLoc(MI.getDebugLoc());
39543955
auto NewExt = Builder.buildExtOrTrunc(ExtMI->getOpcode(), ExtTy,
3955-
SrcMI->getOperand(0).getReg());
3956+
SrcReg);
39563957
OldToNewSrcMap[SrcMI] = NewExt;
39573958
}
39583959

llvm/test/CodeGen/AArch64/GlobalISel/prelegalizercombiner-prop-extends-phi.mir

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,3 +489,68 @@ body: |
489489
RET_ReallyLR implicit $x0
490490
491491
...
492+
# Same as above but with a source MI with multiple destination operands.
493+
---
494+
name: anyext_add_through_phi_multiple_operands
495+
tracksRegLiveness: true
496+
body: |
497+
; CHECK-LABEL: name: anyext_add_through_phi_multiple_operands
498+
; CHECK: bb.0.entry:
499+
; CHECK-NEXT: successors: %bb.1(0x40000000), %bb.2(0x40000000)
500+
; CHECK-NEXT: liveins: $w0, $w1
501+
; CHECK-NEXT: {{ $}}
502+
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
503+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
504+
; CHECK-NEXT: %one:_(s32) = G_CONSTANT i32 2
505+
; CHECK-NEXT: %cmp:_(s1) = G_ICMP intpred(sle), [[COPY]](s32), %one
506+
; CHECK-NEXT: G_BRCOND %cmp(s1), %bb.2
507+
; CHECK-NEXT: G_BR %bb.1
508+
; CHECK-NEXT: {{ $}}
509+
; CHECK-NEXT: bb.1:
510+
; CHECK-NEXT: successors: %bb.3(0x80000000)
511+
; CHECK-NEXT: {{ $}}
512+
; CHECK-NEXT: %big0:_(s64) = G_SEXT [[COPY]](s32)
513+
; CHECK-NEXT: %big1:_(s64) = G_SEXT [[COPY1]](s32)
514+
; CHECK-NEXT: %add:_(s64) = G_ADD %big0, %big1
515+
; CHECK-NEXT: %first:_(s32), %second:_(s32) = G_UNMERGE_VALUES %add(s64)
516+
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT %second(s32)
517+
; CHECK-NEXT: G_BR %bb.3
518+
; CHECK-NEXT: {{ $}}
519+
; CHECK-NEXT: bb.2:
520+
; CHECK-NEXT: successors: %bb.3(0x80000000)
521+
; CHECK-NEXT: {{ $}}
522+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 10
523+
; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[C]](s32)
524+
; CHECK-NEXT: {{ $}}
525+
; CHECK-NEXT: bb.3:
526+
; CHECK-NEXT: %ext:_(s64) = G_PHI [[ANYEXT]](s64), %bb.1, [[ANYEXT1]](s64), %bb.2
527+
; CHECK-NEXT: $x0 = COPY %ext(s64)
528+
; CHECK-NEXT: RET_ReallyLR implicit $x0
529+
bb.1.entry:
530+
liveins: $w0, $w1
531+
532+
%0:_(s32) = COPY $w0
533+
%1:_(s32) = COPY $w1
534+
%zero:_(s32) = G_CONSTANT i32 0
535+
%one:_(s32) = G_CONSTANT i32 2
536+
%cmp:_(s1) = G_ICMP intpred(sgt), %0(s32), %one
537+
G_BRCOND %cmp(s1), %bb.2
538+
G_BR %bb.3
539+
540+
bb.2:
541+
%big0:_(s64) = G_SEXT %0
542+
%big1:_(s64) = G_SEXT %1
543+
%add:_(s64) = G_ADD %big0, %big1
544+
%first:_(s32), %second:_(s32) = G_UNMERGE_VALUES %add:_(s64)
545+
G_BR %bb.4
546+
547+
bb.3:
548+
%cst32_10:_(s32) = G_CONSTANT i32 10
549+
550+
bb.4:
551+
%phi:_(s32) = G_PHI %second, %bb.2, %cst32_10, %bb.3
552+
%ext:_(s64) = G_ANYEXT %phi
553+
$x0 = COPY %ext(s64)
554+
RET_ReallyLR implicit $x0
555+
556+
...

0 commit comments

Comments
 (0)