134134 ret void
135135 }
136136
137- define void @unforwardable_avl() {
137+ define void @clobberred_forwarded_avl() {
138+ ret void
139+ }
140+
141+ define void @clobberred_forwarded_phi_avl() {
138142 ret void
139143 }
140144
@@ -995,16 +999,17 @@ body: |
995999 PseudoBR %bb.1
9961000 ...
9971001---
998- name : unforwardable_avl
1002+ name : clobberred_forwarded_avl
9991003tracksRegLiveness : true
10001004body : |
1001- ; CHECK-LABEL: name: unforwardable_avl
1005+ ; CHECK-LABEL: name: clobberred_forwarded_avl
10021006 ; CHECK: bb.0:
10031007 ; CHECK-NEXT: successors: %bb.1(0x80000000)
10041008 ; CHECK-NEXT: liveins: $x10, $v8m2
10051009 ; CHECK-NEXT: {{ $}}
10061010 ; CHECK-NEXT: %avl:gprnox0 = COPY $x10
1007- ; CHECK-NEXT: %outvl:gprnox0 = PseudoVSETVLI %avl, 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1011+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:gprnox0 = COPY %avl
1012+ ; CHECK-NEXT: dead %outvl:gprnox0 = PseudoVSETVLI %avl, 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
10081013 ; CHECK-NEXT: {{ $}}
10091014 ; CHECK-NEXT: bb.1:
10101015 ; CHECK-NEXT: successors: %bb.2(0x80000000)
@@ -1017,7 +1022,7 @@ body: |
10171022 ; CHECK-NEXT: {{ $}}
10181023 ; CHECK-NEXT: dead [[PseudoVSETVLIX0_:%[0-9]+]]:gpr = PseudoVSETVLIX0 killed $x0, 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
10191024 ; CHECK-NEXT: renamable $v10m2 = PseudoVADD_VV_M2 undef renamable $v10m2, renamable $v8m2, renamable $v8m2, -1, 5 /* e32 */, 0 /* tu, mu */, implicit $vl, implicit $vtype
1020- ; CHECK-NEXT: dead $x0 = PseudoVSETVLI %outvl , 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
1025+ ; CHECK-NEXT: dead $x0 = PseudoVSETVLI [[COPY]] , 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
10211026 ; CHECK-NEXT: renamable $v8m2 = PseudoVADD_VV_M2 undef renamable $v8m2, killed renamable $v10m2, renamable $v8m2, $noreg, 5 /* e32 */, 0 /* tu, mu */, implicit $vl, implicit $vtype
10221027 ; CHECK-NEXT: PseudoRET implicit $v8m2
10231028 bb.0:
@@ -1034,3 +1039,63 @@ body: |
10341039 renamable $v10m2 = PseudoVADD_VV_M2 undef renamable $v10m2, renamable $v8m2, renamable $v8m2, -1, 5, 0
10351040 renamable $v8m2 = PseudoVADD_VV_M2 undef renamable $v8m2, killed renamable $v10m2, killed renamable $v8m2, %outvl:gprnox0, 5, 0
10361041 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: [[COPY:%[0-9]+]]:gprnox0 = COPY [[ADDI]]
1067+ ; CHECK-NEXT: dead %outvl:gprnox0 = PseudoVSETVLI [[ADDI]], 209 /* e32, m2, ta, ma */, implicit-def $vl, implicit-def $vtype
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