Skip to content

Commit d51dcf9

Browse files
authored
[GlobalISel] Combine away G_UNMERGE(G_IMPLICITDEF). (#119183)
This helps clean up some more legalization artefacts during legalization, in a similar way to other operations, and helps some of the DUP cases get through legalization successfully.
1 parent a17dcaf commit d51dcf9

File tree

80 files changed

+3551
-5737
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

80 files changed

+3551
-5737
lines changed

llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ class LegalizationArtifactCombiner {
356356
// trunc(ext x) -> x
357357
ArtifactValueFinder Finder(MRI, Builder, LI);
358358
if (Register FoundReg =
359-
Finder.findValueFromDef(DstReg, 0, DstTy.getSizeInBits())) {
359+
Finder.findValueFromDef(DstReg, 0, DstTy.getSizeInBits(), DstTy)) {
360360
LLT FoundRegTy = MRI.getType(FoundReg);
361361
if (DstTy == FoundRegTy) {
362362
LLVM_DEBUG(dbgs() << ".. Combine G_TRUNC(G_[S,Z,ANY]EXT/G_TRUNC...): "
@@ -641,10 +641,11 @@ class LegalizationArtifactCombiner {
641641
Register SrcReg = Concat.getReg(StartSrcIdx);
642642
if (InRegOffset == 0 && Size == SrcSize) {
643643
CurrentBest = SrcReg;
644-
return findValueFromDefImpl(SrcReg, 0, Size);
644+
return findValueFromDefImpl(SrcReg, 0, Size, MRI.getType(SrcReg));
645645
}
646646

647-
return findValueFromDefImpl(SrcReg, InRegOffset, Size);
647+
return findValueFromDefImpl(SrcReg, InRegOffset, Size,
648+
MRI.getType(SrcReg));
648649
}
649650

650651
/// Given an build_vector op \p BV and a start bit and size, try to find
@@ -759,15 +760,17 @@ class LegalizationArtifactCombiner {
759760
if (EndBit <= InsertOffset || InsertedEndBit <= StartBit) {
760761
SrcRegToUse = ContainerSrcReg;
761762
NewStartBit = StartBit;
762-
return findValueFromDefImpl(SrcRegToUse, NewStartBit, Size);
763+
return findValueFromDefImpl(SrcRegToUse, NewStartBit, Size,
764+
MRI.getType(SrcRegToUse));
763765
}
764766
if (InsertOffset <= StartBit && EndBit <= InsertedEndBit) {
765767
SrcRegToUse = InsertedReg;
766768
NewStartBit = StartBit - InsertOffset;
767769
if (NewStartBit == 0 &&
768770
Size == MRI.getType(SrcRegToUse).getSizeInBits())
769771
CurrentBest = SrcRegToUse;
770-
return findValueFromDefImpl(SrcRegToUse, NewStartBit, Size);
772+
return findValueFromDefImpl(SrcRegToUse, NewStartBit, Size,
773+
MRI.getType(SrcRegToUse));
771774
}
772775
// The bit range spans both the inserted and container regions.
773776
return Register();
@@ -799,7 +802,7 @@ class LegalizationArtifactCombiner {
799802

800803
if (StartBit == 0 && SrcType.getSizeInBits() == Size)
801804
CurrentBest = SrcReg;
802-
return findValueFromDefImpl(SrcReg, StartBit, Size);
805+
return findValueFromDefImpl(SrcReg, StartBit, Size, SrcType);
803806
}
804807

805808
/// Given an G_TRUNC op \p MI and a start bit and size, try to find
@@ -819,14 +822,14 @@ class LegalizationArtifactCombiner {
819822
if (!SrcType.isScalar())
820823
return CurrentBest;
821824

822-
return findValueFromDefImpl(SrcReg, StartBit, Size);
825+
return findValueFromDefImpl(SrcReg, StartBit, Size, SrcType);
823826
}
824827

825828
/// Internal implementation for findValueFromDef(). findValueFromDef()
826829
/// initializes some data like the CurrentBest register, which this method
827830
/// and its callees rely upon.
828831
Register findValueFromDefImpl(Register DefReg, unsigned StartBit,
829-
unsigned Size) {
832+
unsigned Size, LLT DstTy) {
830833
std::optional<DefinitionAndSourceRegister> DefSrcReg =
831834
getDefSrcRegIgnoringCopies(DefReg, MRI);
832835
MachineInstr *Def = DefSrcReg->MI;
@@ -847,7 +850,7 @@ class LegalizationArtifactCombiner {
847850
}
848851
Register SrcReg = Def->getOperand(Def->getNumOperands() - 1).getReg();
849852
Register SrcOriginReg =
850-
findValueFromDefImpl(SrcReg, StartBit + DefStartBit, Size);
853+
findValueFromDefImpl(SrcReg, StartBit + DefStartBit, Size, DstTy);
851854
if (SrcOriginReg)
852855
return SrcOriginReg;
853856
// Failed to find a further value. If the StartBit and Size perfectly
@@ -868,6 +871,12 @@ class LegalizationArtifactCombiner {
868871
case TargetOpcode::G_ZEXT:
869872
case TargetOpcode::G_ANYEXT:
870873
return findValueFromExt(*Def, StartBit, Size);
874+
case TargetOpcode::G_IMPLICIT_DEF: {
875+
if (MRI.getType(DefReg) == DstTy)
876+
return DefReg;
877+
MIB.setInstrAndDebugLoc(*Def);
878+
return MIB.buildUndef(DstTy).getReg(0);
879+
}
871880
default:
872881
return CurrentBest;
873882
}
@@ -882,10 +891,10 @@ class LegalizationArtifactCombiner {
882891
/// at position \p StartBit with size \p Size.
883892
/// \returns a register with the requested size, or an empty Register if no
884893
/// better value could be found.
885-
Register findValueFromDef(Register DefReg, unsigned StartBit,
886-
unsigned Size) {
894+
Register findValueFromDef(Register DefReg, unsigned StartBit, unsigned Size,
895+
LLT DstTy) {
887896
CurrentBest = Register();
888-
Register FoundReg = findValueFromDefImpl(DefReg, StartBit, Size);
897+
Register FoundReg = findValueFromDefImpl(DefReg, StartBit, Size, DstTy);
889898
return FoundReg != DefReg ? FoundReg : Register();
890899
}
891900

@@ -904,7 +913,8 @@ class LegalizationArtifactCombiner {
904913
DeadDefs[DefIdx] = true;
905914
continue;
906915
}
907-
Register FoundVal = findValueFromDef(DefReg, 0, DestTy.getSizeInBits());
916+
Register FoundVal =
917+
findValueFromDef(DefReg, 0, DestTy.getSizeInBits(), DestTy);
908918
if (!FoundVal)
909919
continue;
910920
if (MRI.getType(FoundVal) != DestTy)
@@ -923,7 +933,7 @@ class LegalizationArtifactCombiner {
923933

924934
GUnmerge *findUnmergeThatDefinesReg(Register Reg, unsigned Size,
925935
unsigned &DefOperandIdx) {
926-
if (Register Def = findValueFromDefImpl(Reg, 0, Size)) {
936+
if (Register Def = findValueFromDefImpl(Reg, 0, Size, MRI.getType(Reg))) {
927937
if (auto *Unmerge = dyn_cast<GUnmerge>(MRI.getVRegDef(Def))) {
928938
DefOperandIdx =
929939
Unmerge->findRegisterDefOperandIdx(Def, /*TRI=*/nullptr);
@@ -1288,12 +1298,19 @@ class LegalizationArtifactCombiner {
12881298
// for N >= %2.getSizeInBits() / 2
12891299
// %3 = G_EXTRACT %1, (N - %0.getSizeInBits()
12901300

1301+
Register DstReg = MI.getOperand(0).getReg();
12911302
Register SrcReg = lookThroughCopyInstrs(MI.getOperand(1).getReg());
12921303
MachineInstr *MergeI = MRI.getVRegDef(SrcReg);
1304+
if (MergeI && MergeI->getOpcode() == TargetOpcode::G_IMPLICIT_DEF) {
1305+
Builder.setInstrAndDebugLoc(MI);
1306+
Builder.buildUndef(DstReg);
1307+
UpdatedDefs.push_back(DstReg);
1308+
markInstAndDefDead(MI, *MergeI, DeadInsts);
1309+
return true;
1310+
}
12931311
if (!MergeI || !isa<GMergeLikeInstr>(MergeI))
12941312
return false;
12951313

1296-
Register DstReg = MI.getOperand(0).getReg();
12971314
LLT DstTy = MRI.getType(DstReg);
12981315
LLT SrcTy = MRI.getType(SrcReg);
12991316

llvm/test/CodeGen/AArch64/GlobalISel/legalize-extracts.mir

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -290,11 +290,8 @@ body: |
290290
; CHECK-LABEL: name: s3_from_s35
291291
; CHECK: liveins: $w0
292292
; CHECK-NEXT: {{ $}}
293-
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
294-
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[DEF]](s64)
295-
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 7
296-
; CHECK-NEXT: %ext:_(s32) = G_AND [[TRUNC]], [[C]]
297-
; CHECK-NEXT: $w0 = COPY %ext(s32)
293+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
294+
; CHECK-NEXT: $w0 = COPY [[C]](s32)
298295
; CHECK-NEXT: RET_ReallyLR implicit $w0
299296
%val:_(s35) = G_IMPLICIT_DEF
300297
%extract:_(s3) = G_EXTRACT %val, 0

llvm/test/CodeGen/AArch64/GlobalISel/legalize-freeze.mir

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -159,13 +159,16 @@ body: |
159159
; CHECK-LABEL: name: test_freeze_v3s8
160160
; CHECK: liveins: $q0
161161
; CHECK-NEXT: {{ $}}
162-
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s8>) = G_IMPLICIT_DEF
163-
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<4 x s8>) = G_FREEZE [[DEF]]
164-
; CHECK-NEXT: [[UV:%[0-9]+]]:_(s8), [[UV1:%[0-9]+]]:_(s8), [[UV2:%[0-9]+]]:_(s8), [[UV3:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[FREEZE]](<4 x s8>)
162+
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
163+
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
164+
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<8 x s8>) = G_TRUNC [[BUILD_VECTOR]](<8 x s16>)
165+
; CHECK-NEXT: [[UV:%[0-9]+]]:_(<4 x s8>), [[UV1:%[0-9]+]]:_(<4 x s8>) = G_UNMERGE_VALUES [[TRUNC]](<8 x s8>)
166+
; CHECK-NEXT: [[FREEZE:%[0-9]+]]:_(<4 x s8>) = G_FREEZE [[UV]]
167+
; CHECK-NEXT: [[UV2:%[0-9]+]]:_(s8), [[UV3:%[0-9]+]]:_(s8), [[UV4:%[0-9]+]]:_(s8), [[UV5:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[FREEZE]](<4 x s8>)
165168
; CHECK-NEXT: %undef:_(s32) = G_IMPLICIT_DEF
166-
; CHECK-NEXT: %ext0:_(s32) = G_ZEXT [[UV]](s8)
167-
; CHECK-NEXT: %ext1:_(s32) = G_ZEXT [[UV1]](s8)
168-
; CHECK-NEXT: %ext2:_(s32) = G_ZEXT [[UV2]](s8)
169+
; CHECK-NEXT: %ext0:_(s32) = G_ZEXT [[UV2]](s8)
170+
; CHECK-NEXT: %ext1:_(s32) = G_ZEXT [[UV3]](s8)
171+
; CHECK-NEXT: %ext2:_(s32) = G_ZEXT [[UV4]](s8)
169172
; CHECK-NEXT: %res:_(<4 x s32>) = G_BUILD_VECTOR %ext0(s32), %ext1(s32), %ext2(s32), %undef(s32)
170173
; CHECK-NEXT: $q0 = COPY %res(<4 x s32>)
171174
%x:_(<3 x s8>) = G_IMPLICIT_DEF

llvm/test/CodeGen/AArch64/GlobalISel/legalize-insert-vector-elt.mir

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -248,21 +248,19 @@ body: |
248248
; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s16)
249249
; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s8) = G_TRUNC [[UV3]](s16)
250250
; CHECK-NEXT: [[TRUNC5:%[0-9]+]]:_(s8) = G_TRUNC [[UV4]](s16)
251-
; CHECK-NEXT: [[DEF2:%[0-9]+]]:_(<4 x s8>) = G_IMPLICIT_DEF
252-
; CHECK-NEXT: [[UV6:%[0-9]+]]:_(s8), [[UV7:%[0-9]+]]:_(s8), [[UV8:%[0-9]+]]:_(s8), [[UV9:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[DEF2]](<4 x s8>)
253-
; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR [[TRUNC3]](s8), [[TRUNC4]](s8), [[TRUNC5]](s8), [[UV6]](s8), [[UV7]](s8), [[UV8]](s8), [[UV6]](s8), [[UV7]](s8), [[UV8]](s8), [[UV6]](s8), [[UV7]](s8), [[UV8]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8)
254-
; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR [[C]](s8), [[DEF]](s8), [[DEF]](s8), [[UV6]](s8), [[UV7]](s8), [[UV8]](s8), [[UV6]](s8), [[UV7]](s8), [[UV8]](s8), [[UV6]](s8), [[UV7]](s8), [[UV8]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8)
251+
; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR [[TRUNC3]](s8), [[TRUNC4]](s8), [[TRUNC5]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8)
252+
; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<16 x s8>) = G_BUILD_VECTOR [[C]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8)
255253
; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<16 x s8>) = G_SHUFFLE_VECTOR [[BUILD_VECTOR1]](<16 x s8>), [[BUILD_VECTOR2]], shufflemask(0, 16, 16, 16, 1, 16, 16, 16, 2, 16, 16, 16, undef, undef, undef, undef)
256254
; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(<4 x s32>) = G_BITCAST [[SHUF]](<16 x s8>)
257255
; CHECK-NEXT: [[UITOFP:%[0-9]+]]:_(<4 x s32>) = G_UITOFP [[BITCAST]](<4 x s32>)
258-
; CHECK-NEXT: [[UV10:%[0-9]+]]:_(s32), [[UV11:%[0-9]+]]:_(s32), [[UV12:%[0-9]+]]:_(s32), [[UV13:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UITOFP]](<4 x s32>)
259-
; CHECK-NEXT: G_STORE [[UV10]](s32), [[COPY]](p0) :: (store (s32), align 16)
256+
; CHECK-NEXT: [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32), [[UV8:%[0-9]+]]:_(s32), [[UV9:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[UITOFP]](<4 x s32>)
257+
; CHECK-NEXT: G_STORE [[UV6]](s32), [[COPY]](p0) :: (store (s32), align 16)
260258
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
261259
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C3]](s64)
262-
; CHECK-NEXT: G_STORE [[UV11]](s32), [[PTR_ADD]](p0) :: (store (s32) into unknown-address + 4)
260+
; CHECK-NEXT: G_STORE [[UV7]](s32), [[PTR_ADD]](p0) :: (store (s32) into unknown-address + 4)
263261
; CHECK-NEXT: [[C4:%[0-9]+]]:_(s64) = G_CONSTANT i64 8
264262
; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD [[COPY]], [[C4]](s64)
265-
; CHECK-NEXT: G_STORE [[UV12]](s32), [[PTR_ADD1]](p0) :: (store (s32) into unknown-address + 8, align 8)
263+
; CHECK-NEXT: G_STORE [[UV8]](s32), [[PTR_ADD1]](p0) :: (store (s32) into unknown-address + 8, align 8)
266264
; CHECK-NEXT: G_BR %bb.1
267265
bb.1:
268266
liveins: $w1, $w2, $w3, $x0

llvm/test/CodeGen/AArch64/GlobalISel/legalize-load-store.mir

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -545,15 +545,18 @@ body: |
545545
; CHECK-LABEL: name: store_6xs64
546546
; CHECK: liveins: $x0
547547
; CHECK-NEXT: {{ $}}
548-
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<2 x s64>) = G_IMPLICIT_DEF
548+
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
549+
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[DEF]](s64), [[DEF]](s64)
550+
; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[DEF]](s64), [[DEF]](s64)
551+
; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<2 x s64>) = G_BUILD_VECTOR [[DEF]](s64), [[DEF]](s64)
549552
; CHECK-NEXT: %ptr:_(p0) = COPY $x0
550-
; CHECK-NEXT: G_STORE [[DEF]](<2 x s64>), %ptr(p0) :: (store (<2 x s64>))
553+
; CHECK-NEXT: G_STORE [[BUILD_VECTOR]](<2 x s64>), %ptr(p0) :: (store (<2 x s64>))
551554
; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
552555
; CHECK-NEXT: [[PTR_ADD:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C]](s64)
553-
; CHECK-NEXT: G_STORE [[DEF]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
556+
; CHECK-NEXT: G_STORE [[BUILD_VECTOR1]](<2 x s64>), [[PTR_ADD]](p0) :: (store (<2 x s64>) into unknown-address + 16)
554557
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 32
555558
; CHECK-NEXT: [[PTR_ADD1:%[0-9]+]]:_(p0) = nuw inbounds G_PTR_ADD %ptr, [[C1]](s64)
556-
; CHECK-NEXT: G_STORE [[DEF]](<2 x s64>), [[PTR_ADD1]](p0) :: (store (<2 x s64>) into unknown-address + 32)
559+
; CHECK-NEXT: G_STORE [[BUILD_VECTOR2]](<2 x s64>), [[PTR_ADD1]](p0) :: (store (<2 x s64>) into unknown-address + 32)
557560
; CHECK-NEXT: RET_ReallyLR
558561
%val:_(<6 x s64>) = G_IMPLICIT_DEF
559562
%ptr:_(p0) = COPY $x0

llvm/test/CodeGen/AArch64/GlobalISel/legalize-saddsat.mir

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,8 @@ body: |
220220
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[UADDE]](s32), [[SEXT_INREG2]]
221221
; CHECK-NEXT: [[UV4:%[0-9]+]]:_(s8), [[UV5:%[0-9]+]]:_(s8), [[UV6:%[0-9]+]]:_(s8), [[UV7:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[UADDE]](s32)
222222
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
223-
; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
224-
; CHECK-NEXT: [[UV8:%[0-9]+]]:_(s8), [[UV9:%[0-9]+]]:_(s8), [[UV10:%[0-9]+]]:_(s8), [[UV11:%[0-9]+]]:_(s8) = G_UNMERGE_VALUES [[DEF1]](s32)
225223
; CHECK-NEXT: [[MV:%[0-9]+]]:_(s32) = G_MERGE_VALUES [[UV4]](s8), [[UV5]](s8), [[UV6]](s8), [[DEF]](s8)
226-
; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s32) = G_MERGE_VALUES [[UV8]](s8), [[UV9]](s8), [[UV10]](s8), [[UV8]](s8)
224+
; CHECK-NEXT: [[MV1:%[0-9]+]]:_(s32) = G_MERGE_VALUES [[DEF]](s8), [[DEF]](s8), [[DEF]](s8), [[DEF]](s8)
227225
; CHECK-NEXT: [[MV2:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[MV]](s32), [[MV1]](s32)
228226
; CHECK-NEXT: [[SEXT_INREG3:%[0-9]+]]:_(s64) = G_SEXT_INREG [[MV2]], 24
229227
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 23

llvm/test/CodeGen/AArch64/GlobalISel/legalize-select.mir

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -289,35 +289,35 @@ body: |
289289
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 4100
290290
; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), %w0(s32), [[C]]
291291
; CHECK-NEXT: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[ICMP2]], 1
292-
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF
292+
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
293+
; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF
293294
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
294295
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[SEXT_INREG]](s32)
295-
; CHECK-NEXT: [[IVEC:%[0-9]+]]:_(<4 x s16>) = G_INSERT_VECTOR_ELT [[DEF]], [[TRUNC]](s16), [[C1]](s64)
296+
; CHECK-NEXT: [[IVEC:%[0-9]+]]:_(<4 x s16>) = G_INSERT_VECTOR_ELT [[DEF1]], [[TRUNC]](s16), [[C1]](s64)
296297
; CHECK-NEXT: [[UV:%[0-9]+]]:_(s16), [[UV1:%[0-9]+]]:_(s16), [[UV2:%[0-9]+]]:_(s16), [[UV3:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[IVEC]](<4 x s16>)
297298
; CHECK-NEXT: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[UV]](s16)
298299
; CHECK-NEXT: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[UV1]](s16)
299300
; CHECK-NEXT: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s16)
300301
; CHECK-NEXT: [[TRUNC4:%[0-9]+]]:_(s8) = G_TRUNC [[UV3]](s16)
301-
; CHECK-NEXT: [[DEF1:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
302-
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s8>) = G_BUILD_VECTOR [[TRUNC1]](s8), [[TRUNC2]](s8), [[TRUNC3]](s8), [[TRUNC4]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8)
303-
; CHECK-NEXT: [[UV4:%[0-9]+]]:_(s16), [[UV5:%[0-9]+]]:_(s16), [[UV6:%[0-9]+]]:_(s16), [[UV7:%[0-9]+]]:_(s16) = G_UNMERGE_VALUES [[DEF]](<4 x s16>)
304-
; CHECK-NEXT: [[TRUNC5:%[0-9]+]]:_(s8) = G_TRUNC [[UV4]](s16)
305-
; CHECK-NEXT: [[TRUNC6:%[0-9]+]]:_(s8) = G_TRUNC [[UV5]](s16)
306-
; CHECK-NEXT: [[TRUNC7:%[0-9]+]]:_(s8) = G_TRUNC [[UV6]](s16)
307-
; CHECK-NEXT: [[TRUNC8:%[0-9]+]]:_(s8) = G_TRUNC [[UV7]](s16)
308-
; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s8>) = G_BUILD_VECTOR [[TRUNC5]](s8), [[TRUNC6]](s8), [[TRUNC7]](s8), [[TRUNC8]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8)
302+
; CHECK-NEXT: [[DEF2:%[0-9]+]]:_(s8) = G_IMPLICIT_DEF
303+
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s8>) = G_BUILD_VECTOR [[TRUNC1]](s8), [[TRUNC2]](s8), [[TRUNC3]](s8), [[TRUNC4]](s8), [[DEF2]](s8), [[DEF2]](s8), [[DEF2]](s8), [[DEF2]](s8)
304+
; CHECK-NEXT: [[TRUNC5:%[0-9]+]]:_(s8) = G_TRUNC [[DEF]](s16)
305+
; CHECK-NEXT: [[TRUNC6:%[0-9]+]]:_(s8) = G_TRUNC [[DEF]](s16)
306+
; CHECK-NEXT: [[TRUNC7:%[0-9]+]]:_(s8) = G_TRUNC [[DEF]](s16)
307+
; CHECK-NEXT: [[TRUNC8:%[0-9]+]]:_(s8) = G_TRUNC [[DEF]](s16)
308+
; CHECK-NEXT: [[BUILD_VECTOR1:%[0-9]+]]:_(<8 x s8>) = G_BUILD_VECTOR [[TRUNC5]](s8), [[TRUNC6]](s8), [[TRUNC7]](s8), [[TRUNC8]](s8), [[DEF2]](s8), [[DEF2]](s8), [[DEF2]](s8), [[DEF2]](s8)
309309
; CHECK-NEXT: [[SHUF:%[0-9]+]]:_(<8 x s8>) = G_SHUFFLE_VECTOR [[BUILD_VECTOR]](<8 x s8>), [[BUILD_VECTOR1]], shufflemask(0, 0, 0, 0, undef, undef, undef, undef)
310310
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s8) = G_CONSTANT i8 1
311311
; CHECK-NEXT: [[ANYEXT:%[0-9]+]]:_(<8 x s16>) = G_ANYEXT [[SHUF]](<8 x s8>)
312-
; CHECK-NEXT: [[UV8:%[0-9]+]]:_(<4 x s16>), [[UV9:%[0-9]+]]:_(<4 x s16>) = G_UNMERGE_VALUES [[ANYEXT]](<8 x s16>)
313-
; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<8 x s8>) = G_BUILD_VECTOR [[C2]](s8), [[C2]](s8), [[C2]](s8), [[C2]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8), [[DEF1]](s8)
312+
; CHECK-NEXT: [[UV4:%[0-9]+]]:_(<4 x s16>), [[UV5:%[0-9]+]]:_(<4 x s16>) = G_UNMERGE_VALUES [[ANYEXT]](<8 x s16>)
313+
; CHECK-NEXT: [[BUILD_VECTOR2:%[0-9]+]]:_(<8 x s8>) = G_BUILD_VECTOR [[C2]](s8), [[C2]](s8), [[C2]](s8), [[C2]](s8), [[DEF2]](s8), [[DEF2]](s8), [[DEF2]](s8), [[DEF2]](s8)
314314
; CHECK-NEXT: [[ANYEXT1:%[0-9]+]]:_(<8 x s16>) = G_ANYEXT [[BUILD_VECTOR2]](<8 x s8>)
315-
; CHECK-NEXT: [[UV10:%[0-9]+]]:_(<4 x s16>), [[UV11:%[0-9]+]]:_(<4 x s16>) = G_UNMERGE_VALUES [[ANYEXT1]](<8 x s16>)
316-
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<4 x s16>) = G_XOR [[UV8]], [[UV10]]
315+
; CHECK-NEXT: [[UV6:%[0-9]+]]:_(<4 x s16>), [[UV7:%[0-9]+]]:_(<4 x s16>) = G_UNMERGE_VALUES [[ANYEXT1]](<8 x s16>)
316+
; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<4 x s16>) = G_XOR [[UV4]], [[UV6]]
317317
; CHECK-NEXT: [[TRUNC9:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[ICMP]](<4 x s32>)
318318
; CHECK-NEXT: [[ANYEXT2:%[0-9]+]]:_(<8 x s16>) = G_ANYEXT [[SHUF]](<8 x s8>)
319-
; CHECK-NEXT: [[UV12:%[0-9]+]]:_(<4 x s16>), [[UV13:%[0-9]+]]:_(<4 x s16>) = G_UNMERGE_VALUES [[ANYEXT2]](<8 x s16>)
320-
; CHECK-NEXT: [[AND:%[0-9]+]]:_(<4 x s16>) = G_AND [[TRUNC9]], [[UV12]]
319+
; CHECK-NEXT: [[UV8:%[0-9]+]]:_(<4 x s16>), [[UV9:%[0-9]+]]:_(<4 x s16>) = G_UNMERGE_VALUES [[ANYEXT2]](<8 x s16>)
320+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(<4 x s16>) = G_AND [[TRUNC9]], [[UV8]]
321321
; CHECK-NEXT: [[TRUNC10:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[ICMP1]](<4 x s32>)
322322
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(<4 x s16>) = G_AND [[TRUNC10]], [[XOR]]
323323
; CHECK-NEXT: [[OR:%[0-9]+]]:_(<4 x s16>) = G_OR [[AND]], [[AND1]]

0 commit comments

Comments
 (0)