Skip to content

Commit e285656

Browse files
committed
Fix PHI case handling where there is no instruction, add test case
1 parent 4369c84 commit e285656

File tree

2 files changed

+71
-3
lines changed

2 files changed

+71
-3
lines changed

llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1153,9 +1153,13 @@ void RISCVInsertVSETVLI::insertVSETVLI(MachineBasicBlock &MBB,
11531153
else {
11541154
Register AVLCopyReg =
11551155
MRI->createVirtualRegister(&RISCV::GPRNoX0RegClass);
1156-
MachineBasicBlock::iterator AVLDef =
1157-
LIS->getInstructionFromIndex(Info.getAVLVNInfo()->def);
1158-
auto AVLCopy = BuildMI(*AVLDef->getParent(), std::next(AVLDef), DL,
1156+
MachineBasicBlock::iterator II;
1157+
if (Info.getAVLVNInfo()->isPHIDef())
1158+
II = LIS->getMBBFromIndex(Info.getAVLVNInfo()->def)->getFirstNonPHI();
1159+
else
1160+
II = LIS->getInstructionFromIndex(Info.getAVLVNInfo()->def);
1161+
assert(II.isValid());
1162+
auto AVLCopy = BuildMI(*II->getParent(), std::next(II), DL,
11591163
TII->get(RISCV::COPY), AVLCopyReg)
11601164
.addReg(AVLReg);
11611165
LIS->InsertMachineInstrInMaps(*AVLCopy);

llvm/test/CodeGen/RISCV/rvv/vsetvli-insert-crossbb.mir

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,10 @@
138138
ret void
139139
}
140140

141+
define void @clobberred_forwarded_phi_avl() {
142+
ret void
143+
}
144+
141145
declare i32 @llvm.vector.reduce.add.v4i32(<4 x i32>)
142146

143147
declare <vscale x 1 x i64> @llvm.riscv.vadd.nxv1i64.nxv1i64.i64(<vscale x 1 x i64>, <vscale x 1 x i64>, <vscale x 1 x i64>, i64) #1
@@ -1035,3 +1039,63 @@ body: |
10351039
renamable $v10m2 = PseudoVADD_VV_M2 undef renamable $v10m2, renamable $v8m2, renamable $v8m2, -1, 5, 0
10361040
renamable $v8m2 = PseudoVADD_VV_M2 undef renamable $v8m2, killed renamable $v10m2, killed renamable $v8m2, %outvl:gprnox0, 5, 0
10371041
PseudoRET implicit $v8m2
1042+
...
1043+
---
1044+
name: clobberred_forwarded_phi_avl
1045+
tracksRegLiveness: true
1046+
body: |
1047+
; CHECK-LABEL: name: clobberred_forwarded_phi_avl
1048+
; CHECK: bb.0:
1049+
; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)
1050+
; CHECK-NEXT: liveins: $x10, $x11, $v8m2
1051+
; CHECK-NEXT: {{ $}}
1052+
; CHECK-NEXT: %v:vrm2 = COPY $v8m2
1053+
; CHECK-NEXT: [[ADDI:%[0-9]+]]:gprnox0 = ADDI $x0, 1
1054+
; CHECK-NEXT: %x:gpr = COPY $x10
1055+
; CHECK-NEXT: %y:gpr = COPY $x11
1056+
; CHECK-NEXT: BEQ %x, %y, %bb.2
1057+
; CHECK-NEXT: {{ $}}
1058+
; CHECK-NEXT: bb.1:
1059+
; CHECK-NEXT: successors: %bb.2(0x80000000)
1060+
; CHECK-NEXT: {{ $}}
1061+
; CHECK-NEXT: [[ADDI:%[0-9]+]]:gprnox0 = ADDI $x0, 2
1062+
; CHECK-NEXT: {{ $}}
1063+
; CHECK-NEXT: bb.2:
1064+
; CHECK-NEXT: successors: %bb.3(0x80000000)
1065+
; CHECK-NEXT: {{ $}}
1066+
; CHECK-NEXT: dead %outvl:gprnox0 = PseudoVSETVLI [[ADDI]], 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1067+
; CHECK-NEXT: [[COPY:%[0-9]+]]:gprnox0 = COPY [[ADDI]]
1068+
; CHECK-NEXT: {{ $}}
1069+
; CHECK-NEXT: bb.3:
1070+
; CHECK-NEXT: successors: %bb.4(0x80000000)
1071+
; CHECK-NEXT: {{ $}}
1072+
; CHECK-NEXT: dead [[ADDI:%[0-9]+]]:gprnox0 = ADDI [[ADDI]], 1
1073+
; CHECK-NEXT: {{ $}}
1074+
; CHECK-NEXT: bb.4:
1075+
; CHECK-NEXT: dead [[PseudoVSETVLIX0_:%[0-9]+]]:gpr = PseudoVSETVLIX0 killed $x0, 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1076+
; CHECK-NEXT: renamable $v10m2 = PseudoVADD_VV_M2 undef renamable $v10m2, %v, %v, -1, 5 /* e32 */, 0 /* tu, mu */, implicit $vl, implicit $vtype
1077+
; CHECK-NEXT: dead $x0 = PseudoVSETVLI [[COPY]], 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1078+
; CHECK-NEXT: renamable $v8m2 = PseudoVADD_VV_M2 undef renamable $v8m2, killed renamable $v10m2, %v, $noreg, 5 /* e32 */, 0 /* tu, mu */, implicit $vl, implicit $vtype
1079+
; CHECK-NEXT: PseudoRET implicit $v8m2
1080+
bb.0:
1081+
liveins: $x10, $x11, $v8m2
1082+
%v:vrm2 = COPY $v8m2
1083+
%a:gpr = ADDI $x0, 1
1084+
%x:gpr = COPY $x10
1085+
%y:gpr = COPY $x11
1086+
BEQ %x, %y, %bb.2
1087+
1088+
bb.1:
1089+
%b:gpr = ADDI $x0, 2
1090+
1091+
bb.2:
1092+
%avl:gprnox0 = PHI %a, %bb.0, %b, %bb.1
1093+
%outvl:gprnox0 = PseudoVSETVLI %avl:gprnox0, 209, implicit-def dead $vl, implicit-def dead $vtype
1094+
1095+
bb.3:
1096+
%avl:gprnox0 = ADDI %avl:gprnox0, 1
1097+
1098+
bb.4:
1099+
renamable $v10m2 = PseudoVADD_VV_M2 undef renamable $v10m2, %v, %v, -1, 5, 0
1100+
renamable $v8m2 = PseudoVADD_VV_M2 undef renamable $v8m2, killed renamable $v10m2, killed %v, %outvl:gprnox0, 5, 0
1101+
PseudoRET implicit $v8m2

0 commit comments

Comments
 (0)