Skip to content

Commit 2513c59

Browse files
[RISCV][VLOPT] Look through PHI instructions
1 parent 15c96d6 commit 2513c59

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

llvm/lib/Target/RISCV/RISCVVLOptimizer.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,6 +1340,13 @@ RISCVVLOptimizer::checkUsers(const MachineInstr &MI) const {
13401340
continue;
13411341
}
13421342

1343+
if (UserMI.isPHI()) {
1344+
LLVM_DEBUG(dbgs() << " Peeking through uses of PHI\n");
1345+
for (auto &PhiUse : MRI->use_operands(UserMI.getOperand(0).getReg()))
1346+
Worklist.insert(&PhiUse);
1347+
continue;
1348+
}
1349+
13431350
auto VLOp = getMinimumVLForUser(UserOp);
13441351
if (!VLOp)
13451352
return std::nullopt;

llvm/test/CodeGen/RISCV/rvv/vl-opt.mir

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,3 +368,87 @@ body: |
368368
%y:vr = COPY %x
369369
%z:vr = PseudoVADD_VV_M1 $noreg, %y, $noreg, 1, 4 /* e16 */, 0 /* tu, mu */
370370
...
371+
---
372+
name: phi
373+
tracksRegLiveness: true
374+
body: |
375+
; CHECK-LABEL: name: phi
376+
; CHECK: bb.0:
377+
; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
378+
; CHECK-NEXT: {{ $}}
379+
; CHECK-NEXT: %w:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
380+
; CHECK-NEXT: BNE $noreg, $noreg, %bb.2
381+
; CHECK-NEXT: {{ $}}
382+
; CHECK-NEXT: bb.1:
383+
; CHECK-NEXT: successors: %bb.2(0x80000000)
384+
; CHECK-NEXT: {{ $}}
385+
; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
386+
; CHECK-NEXT: {{ $}}
387+
; CHECK-NEXT: bb.2:
388+
; CHECK-NEXT: %y:vr = PHI %w, %bb.0, %x, %bb.1
389+
; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %y, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
390+
bb.0:
391+
%w:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
392+
BNE $noreg, $noreg, %bb.2
393+
bb.1:
394+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
395+
bb.2:
396+
%y:vr = PHI %w, %bb.0, %x, %bb.1
397+
%z:vr = PseudoVADD_VV_M1 $noreg, %y, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
398+
...
399+
---
400+
name: phi_user_invalid_sew
401+
tracksRegLiveness: true
402+
body: |
403+
; CHECK-LABEL: name: phi_user_invalid_sew
404+
; CHECK: bb.0:
405+
; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
406+
; CHECK-NEXT: {{ $}}
407+
; CHECK-NEXT: %w:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
408+
; CHECK-NEXT: BNE $noreg, $noreg, %bb.2
409+
; CHECK-NEXT: {{ $}}
410+
; CHECK-NEXT: bb.1:
411+
; CHECK-NEXT: successors: %bb.2(0x80000000)
412+
; CHECK-NEXT: {{ $}}
413+
; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
414+
; CHECK-NEXT: {{ $}}
415+
; CHECK-NEXT: bb.2:
416+
; CHECK-NEXT: %y:vr = PHI %w, %bb.0, %x, %bb.1
417+
; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %y, $noreg, 1, 4 /* e16 */, 0 /* tu, mu */
418+
bb.0:
419+
%w:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
420+
BNE $noreg, $noreg, %bb.2
421+
bb.1:
422+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
423+
bb.2:
424+
%y:vr = PHI %w, %bb.0, %x, %bb.1
425+
%z:vr = PseudoVADD_VV_M1 $noreg, %y, $noreg, 1, 4 /* e16 */, 0 /* tu, mu */
426+
...
427+
---
428+
name: phi_different_incoming_sew
429+
tracksRegLiveness: true
430+
body: |
431+
; CHECK-LABEL: name: phi_different_incoming_sew
432+
; CHECK: bb.0:
433+
; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
434+
; CHECK-NEXT: {{ $}}
435+
; CHECK-NEXT: %w:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
436+
; CHECK-NEXT: BNE $noreg, $noreg, %bb.2
437+
; CHECK-NEXT: {{ $}}
438+
; CHECK-NEXT: bb.1:
439+
; CHECK-NEXT: successors: %bb.2(0x80000000)
440+
; CHECK-NEXT: {{ $}}
441+
; CHECK-NEXT: %x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0 /* tu, mu */
442+
; CHECK-NEXT: {{ $}}
443+
; CHECK-NEXT: bb.2:
444+
; CHECK-NEXT: %y:vr = PHI %w, %bb.0, %x, %bb.1
445+
; CHECK-NEXT: %z:vr = PseudoVADD_VV_M1 $noreg, %y, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
446+
bb.0:
447+
%w:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 3 /* e8 */, 0 /* tu, mu */
448+
BNE $noreg, $noreg, %bb.2
449+
bb.1:
450+
%x:vr = PseudoVADD_VV_M1 $noreg, $noreg, $noreg, -1, 4 /* e16 */, 0 /* tu, mu */
451+
bb.2:
452+
%y:vr = PHI %w, %bb.0, %x, %bb.1
453+
%z:vr = PseudoVADD_VV_M1 $noreg, %y, $noreg, 1, 3 /* e8 */, 0 /* tu, mu */
454+
...

0 commit comments

Comments
 (0)