Skip to content

Commit 5ac616f

Browse files
authored
[AArch64] Improve lowering of GPR zeroing in copyPhysReg (#163059)
This patch pivots GPR32 and GPR64 zeroing into distinct branches to simplify the code an improve the lowering. Zeroing GPR moves are now handled differently than non-zeroing ones. Zero source registers WZR and XZR do not require register annotations of undef, implicit and kill. The non-zeroing source now cannot process WZR removing the ternary expression. This patch also moves GPR64 logic right after GPR32 for better organization.
1 parent 324bd15 commit 5ac616f

File tree

2 files changed

+97
-108
lines changed

2 files changed

+97
-108
lines changed

llvm/lib/Target/AArch64/AArch64InstrInfo.cpp

Lines changed: 48 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5063,7 +5063,7 @@ void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
50635063
bool RenamableDest,
50645064
bool RenamableSrc) const {
50655065
if (AArch64::GPR32spRegClass.contains(DestReg) &&
5066-
(AArch64::GPR32spRegClass.contains(SrcReg) || SrcReg == AArch64::WZR)) {
5066+
AArch64::GPR32spRegClass.contains(SrcReg)) {
50675067
if (DestReg == AArch64::WSP || SrcReg == AArch64::WSP) {
50685068
// If either operand is WSP, expand to ADD #0.
50695069
if (Subtarget.hasZeroCycleRegMoveGPR64() &&
@@ -5088,21 +5088,14 @@ void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
50885088
.addImm(0)
50895089
.addImm(AArch64_AM::getShifterImm(AArch64_AM::LSL, 0));
50905090
}
5091-
} else if (SrcReg == AArch64::WZR && Subtarget.hasZeroCycleZeroingGPR32()) {
5092-
BuildMI(MBB, I, DL, get(AArch64::MOVZWi), DestReg)
5093-
.addImm(0)
5094-
.addImm(AArch64_AM::getShifterImm(AArch64_AM::LSL, 0));
50955091
} else if (Subtarget.hasZeroCycleRegMoveGPR64() &&
50965092
!Subtarget.hasZeroCycleRegMoveGPR32()) {
50975093
// Cyclone recognizes "ORR Xd, XZR, Xm" as a zero-cycle register move.
50985094
MCRegister DestRegX = RI.getMatchingSuperReg(DestReg, AArch64::sub_32,
50995095
&AArch64::GPR64spRegClass);
51005096
assert(DestRegX.isValid() && "Destination super-reg not valid");
5101-
MCRegister SrcRegX =
5102-
SrcReg == AArch64::WZR
5103-
? AArch64::XZR
5104-
: RI.getMatchingSuperReg(SrcReg, AArch64::sub_32,
5105-
&AArch64::GPR64spRegClass);
5097+
MCRegister SrcRegX = RI.getMatchingSuperReg(SrcReg, AArch64::sub_32,
5098+
&AArch64::GPR64spRegClass);
51065099
assert(SrcRegX.isValid() && "Source super-reg not valid");
51075100
// This instruction is reading and writing X registers. This may upset
51085101
// the register scavenger and machine verifier, so we need to indicate
@@ -5121,6 +5114,51 @@ void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
51215114
return;
51225115
}
51235116

5117+
// GPR32 zeroing
5118+
if (AArch64::GPR32spRegClass.contains(DestReg) && SrcReg == AArch64::WZR) {
5119+
if (Subtarget.hasZeroCycleZeroingGPR32()) {
5120+
BuildMI(MBB, I, DL, get(AArch64::MOVZWi), DestReg)
5121+
.addImm(0)
5122+
.addImm(AArch64_AM::getShifterImm(AArch64_AM::LSL, 0));
5123+
} else {
5124+
BuildMI(MBB, I, DL, get(AArch64::ORRWrr), DestReg)
5125+
.addReg(AArch64::WZR)
5126+
.addReg(AArch64::WZR);
5127+
}
5128+
return;
5129+
}
5130+
5131+
if (AArch64::GPR64spRegClass.contains(DestReg) &&
5132+
AArch64::GPR64spRegClass.contains(SrcReg)) {
5133+
if (DestReg == AArch64::SP || SrcReg == AArch64::SP) {
5134+
// If either operand is SP, expand to ADD #0.
5135+
BuildMI(MBB, I, DL, get(AArch64::ADDXri), DestReg)
5136+
.addReg(SrcReg, getKillRegState(KillSrc))
5137+
.addImm(0)
5138+
.addImm(AArch64_AM::getShifterImm(AArch64_AM::LSL, 0));
5139+
} else {
5140+
// Otherwise, expand to ORR XZR.
5141+
BuildMI(MBB, I, DL, get(AArch64::ORRXrr), DestReg)
5142+
.addReg(AArch64::XZR)
5143+
.addReg(SrcReg, getKillRegState(KillSrc));
5144+
}
5145+
return;
5146+
}
5147+
5148+
// GPR64 zeroing
5149+
if (AArch64::GPR64spRegClass.contains(DestReg) && SrcReg == AArch64::XZR) {
5150+
if (Subtarget.hasZeroCycleZeroingGPR64()) {
5151+
BuildMI(MBB, I, DL, get(AArch64::MOVZXi), DestReg)
5152+
.addImm(0)
5153+
.addImm(AArch64_AM::getShifterImm(AArch64_AM::LSL, 0));
5154+
} else {
5155+
BuildMI(MBB, I, DL, get(AArch64::ORRXrr), DestReg)
5156+
.addReg(AArch64::XZR)
5157+
.addReg(AArch64::XZR);
5158+
}
5159+
return;
5160+
}
5161+
51245162
// Copy a Predicate register by ORRing with itself.
51255163
if (AArch64::PPRRegClass.contains(DestReg) &&
51265164
AArch64::PPRRegClass.contains(SrcReg)) {
@@ -5205,27 +5243,6 @@ void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
52055243
return;
52065244
}
52075245

5208-
if (AArch64::GPR64spRegClass.contains(DestReg) &&
5209-
(AArch64::GPR64spRegClass.contains(SrcReg) || SrcReg == AArch64::XZR)) {
5210-
if (DestReg == AArch64::SP || SrcReg == AArch64::SP) {
5211-
// If either operand is SP, expand to ADD #0.
5212-
BuildMI(MBB, I, DL, get(AArch64::ADDXri), DestReg)
5213-
.addReg(SrcReg, getKillRegState(KillSrc))
5214-
.addImm(0)
5215-
.addImm(AArch64_AM::getShifterImm(AArch64_AM::LSL, 0));
5216-
} else if (SrcReg == AArch64::XZR && Subtarget.hasZeroCycleZeroingGPR64()) {
5217-
BuildMI(MBB, I, DL, get(AArch64::MOVZXi), DestReg)
5218-
.addImm(0)
5219-
.addImm(AArch64_AM::getShifterImm(AArch64_AM::LSL, 0));
5220-
} else {
5221-
// Otherwise, expand to ORR XZR.
5222-
BuildMI(MBB, I, DL, get(AArch64::ORRXrr), DestReg)
5223-
.addReg(AArch64::XZR)
5224-
.addReg(SrcReg, getKillRegState(KillSrc));
5225-
}
5226-
return;
5227-
}
5228-
52295246
// Copy a DDDD register quad by copying the individual sub-registers.
52305247
if (AArch64::DDDDRegClass.contains(DestReg) &&
52315248
AArch64::DDDDRegClass.contains(SrcReg)) {
Lines changed: 49 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1-
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 5
2-
# RUN: llc -o - -mtriple=arm64-apple-ios -run-pass=postrapseudos -simplify-mir -verify-machineinstrs -mattr="-zcm-gpr32,-zcm-gpr64,-zcz-gpr32,-zcz-gpr64" %s \
3-
# RUN: | FileCheck --check-prefix=CHECK-NO-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ %s
4-
# RUN: llc -o - -mtriple=arm64-apple-ios -run-pass=postrapseudos -simplify-mir -verify-machineinstrs -mattr="+zcm-gpr32,-zcm-gpr64,-zcz-gpr32,-zcz-gpr64" %s \
5-
# RUN: | FileCheck --check-prefix=CHECK-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ %s
6-
# RUN: llc -o - -mtriple=arm64-apple-ios -run-pass=postrapseudos -simplify-mir -verify-machineinstrs -mattr="-zcm-gpr32,+zcm-gpr64,-zcz-gpr32,-zcz-gpr64" %s \
7-
# RUN: | FileCheck --check-prefix=CHECK-NO-ZCM-GPR32-ZCM-GPR64-NO-ZCZ %s
8-
# RUN: llc -o - -mtriple=arm64-apple-ios -run-pass=postrapseudos -simplify-mir -verify-machineinstrs -mattr="+zcm-gpr32,+zcm-gpr64,-zcz-gpr32,-zcz-gpr64" %s \
9-
# RUN: | FileCheck --check-prefix=CHECK-ZCM-GPR32-ZCM-GPR64-NO-ZCZ %s
10-
# RUN: llc -o - -mtriple=arm64-apple-ios -run-pass=postrapseudos -simplify-mir -verify-machineinstrs -mattr="-zcm-gpr32,-zcm-gpr64,+zcz-gpr32,+zcz-gpr64" %s \
11-
# RUN: | FileCheck --check-prefix=CHECK-NO-ZCM-ZCZ %s
12-
# RUN: llc -o - -mtriple=arm64-apple-ios -run-pass=postrapseudos -simplify-mir -verify-machineinstrs -mattr="+zcm-gpr32,+zcm-gpr64,+zcz-gpr32,+zcz-gpr64" %s \
13-
# RUN: | FileCheck --check-prefix=CHECK-ZCM-ZCZ %s
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 6
2+
# RUN: llc -o - -mtriple=arm64-apple-ios -run-pass=postrapseudos -simplify-mir -verify-machineinstrs -mattr="-zcz-gpr32,-zcz-gpr64" %s \
3+
# RUN: | FileCheck --check-prefix=CHECK-NOZCZ-GPR32-NOZCZ-GPR64 %s
4+
# RUN: llc -o - -mtriple=arm64-apple-ios -run-pass=postrapseudos -simplify-mir -verify-machineinstrs -mattr="+zcz-gpr32,-zcz-gpr64" %s \
5+
# RUN: | FileCheck --check-prefix=CHECK-ZCZ-GPR32-NOZCZ-GPR64 %s
6+
# RUN: llc -o - -mtriple=arm64-apple-ios -run-pass=postrapseudos -simplify-mir -verify-machineinstrs -mattr="-zcz-gpr32,+zcz-gpr64" %s \
7+
# RUN: | FileCheck --check-prefix=CHECK-NOZCZ-GPR32-ZCZ-GPR64 %s
8+
# RUN: llc -o - -mtriple=arm64-apple-ios -run-pass=postrapseudos -simplify-mir -verify-machineinstrs -mattr="+zcz-gpr32,+zcz-gpr64" %s \
9+
# RUN: | FileCheck --check-prefix=CHECK-ZCZ-GPR32-ZCZ-GPR64 %s
1410

1511
--- |
1612
define void @f0(i64 noundef %x) { ret void }
@@ -24,41 +20,29 @@ liveins:
2420
body: |
2521
bb.0:
2622
liveins: $x0, $lr
27-
; CHECK-NO-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-LABEL: name: f0
28-
; CHECK-NO-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ: liveins: $x0, $lr
29-
; CHECK-NO-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-NEXT: {{ $}}
30-
; CHECK-NO-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-NEXT: $w0 = ORRWrr $wzr, $wzr
31-
; CHECK-NO-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
23+
; CHECK-NOZCZ-GPR32-NOZCZ-GPR64-LABEL: name: f0
24+
; CHECK-NOZCZ-GPR32-NOZCZ-GPR64: liveins: $x0, $lr
25+
; CHECK-NOZCZ-GPR32-NOZCZ-GPR64-NEXT: {{ $}}
26+
; CHECK-NOZCZ-GPR32-NOZCZ-GPR64-NEXT: $w0 = ORRWrr $wzr, $wzr
27+
; CHECK-NOZCZ-GPR32-NOZCZ-GPR64-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
3228
;
33-
; CHECK-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-LABEL: name: f0
34-
; CHECK-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ: liveins: $x0, $lr
35-
; CHECK-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-NEXT: {{ $}}
36-
; CHECK-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-NEXT: $w0 = ORRWrr $wzr, $wzr
37-
; CHECK-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
29+
; CHECK-ZCZ-GPR32-NOZCZ-GPR64-LABEL: name: f0
30+
; CHECK-ZCZ-GPR32-NOZCZ-GPR64: liveins: $x0, $lr
31+
; CHECK-ZCZ-GPR32-NOZCZ-GPR64-NEXT: {{ $}}
32+
; CHECK-ZCZ-GPR32-NOZCZ-GPR64-NEXT: $w0 = MOVZWi 0, 0
33+
; CHECK-ZCZ-GPR32-NOZCZ-GPR64-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
3834
;
39-
; CHECK-NO-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-LABEL: name: f0
40-
; CHECK-NO-ZCM-GPR32-ZCM-GPR64-NO-ZCZ: liveins: $x0, $lr
41-
; CHECK-NO-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-NEXT: {{ $}}
42-
; CHECK-NO-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-NEXT: $x0 = ORRXrr $xzr, undef $xzr, implicit $wzr
43-
; CHECK-NO-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
35+
; CHECK-NOZCZ-GPR32-ZCZ-GPR64-LABEL: name: f0
36+
; CHECK-NOZCZ-GPR32-ZCZ-GPR64: liveins: $x0, $lr
37+
; CHECK-NOZCZ-GPR32-ZCZ-GPR64-NEXT: {{ $}}
38+
; CHECK-NOZCZ-GPR32-ZCZ-GPR64-NEXT: $w0 = ORRWrr $wzr, $wzr
39+
; CHECK-NOZCZ-GPR32-ZCZ-GPR64-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
4440
;
45-
; CHECK-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-LABEL: name: f0
46-
; CHECK-ZCM-GPR32-ZCM-GPR64-NO-ZCZ: liveins: $x0, $lr
47-
; CHECK-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-NEXT: {{ $}}
48-
; CHECK-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-NEXT: $w0 = ORRWrr $wzr, $wzr
49-
; CHECK-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
50-
;
51-
; CHECK-NO-ZCM-ZCZ-LABEL: name: f0
52-
; CHECK-NO-ZCM-ZCZ: liveins: $x0, $lr
53-
; CHECK-NO-ZCM-ZCZ-NEXT: {{ $}}
54-
; CHECK-NO-ZCM-ZCZ-NEXT: $w0 = MOVZWi 0, 0
55-
; CHECK-NO-ZCM-ZCZ-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
56-
;
57-
; CHECK-ZCM-ZCZ-LABEL: name: f0
58-
; CHECK-ZCM-ZCZ: liveins: $x0, $lr
59-
; CHECK-ZCM-ZCZ-NEXT: {{ $}}
60-
; CHECK-ZCM-ZCZ-NEXT: $w0 = MOVZWi 0, 0
61-
; CHECK-ZCM-ZCZ-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
41+
; CHECK-ZCZ-GPR32-ZCZ-GPR64-LABEL: name: f0
42+
; CHECK-ZCZ-GPR32-ZCZ-GPR64: liveins: $x0, $lr
43+
; CHECK-ZCZ-GPR32-ZCZ-GPR64-NEXT: {{ $}}
44+
; CHECK-ZCZ-GPR32-ZCZ-GPR64-NEXT: $w0 = MOVZWi 0, 0
45+
; CHECK-ZCZ-GPR32-ZCZ-GPR64-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
6246
$w0 = COPY $wzr
6347
BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
6448
...
@@ -69,41 +53,29 @@ liveins:
6953
body: |
7054
bb.0:
7155
liveins: $x0, $lr
72-
; CHECK-NO-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-LABEL: name: f1
73-
; CHECK-NO-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ: liveins: $x0, $lr
74-
; CHECK-NO-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-NEXT: {{ $}}
75-
; CHECK-NO-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-NEXT: $x0 = ORRXrr $xzr, $xzr
76-
; CHECK-NO-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
77-
;
78-
; CHECK-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-LABEL: name: f1
79-
; CHECK-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ: liveins: $x0, $lr
80-
; CHECK-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-NEXT: {{ $}}
81-
; CHECK-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-NEXT: $x0 = ORRXrr $xzr, $xzr
82-
; CHECK-ZCM-GPR32-NO-ZCM-GPR64-NO-ZCZ-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
83-
;
84-
; CHECK-NO-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-LABEL: name: f1
85-
; CHECK-NO-ZCM-GPR32-ZCM-GPR64-NO-ZCZ: liveins: $x0, $lr
86-
; CHECK-NO-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-NEXT: {{ $}}
87-
; CHECK-NO-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-NEXT: $x0 = ORRXrr $xzr, $xzr
88-
; CHECK-NO-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
56+
; CHECK-NOZCZ-GPR32-NOZCZ-GPR64-LABEL: name: f1
57+
; CHECK-NOZCZ-GPR32-NOZCZ-GPR64: liveins: $x0, $lr
58+
; CHECK-NOZCZ-GPR32-NOZCZ-GPR64-NEXT: {{ $}}
59+
; CHECK-NOZCZ-GPR32-NOZCZ-GPR64-NEXT: $x0 = ORRXrr $xzr, $xzr
60+
; CHECK-NOZCZ-GPR32-NOZCZ-GPR64-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
8961
;
90-
; CHECK-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-LABEL: name: f1
91-
; CHECK-ZCM-GPR32-ZCM-GPR64-NO-ZCZ: liveins: $x0, $lr
92-
; CHECK-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-NEXT: {{ $}}
93-
; CHECK-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-NEXT: $x0 = ORRXrr $xzr, $xzr
94-
; CHECK-ZCM-GPR32-ZCM-GPR64-NO-ZCZ-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
62+
; CHECK-ZCZ-GPR32-NOZCZ-GPR64-LABEL: name: f1
63+
; CHECK-ZCZ-GPR32-NOZCZ-GPR64: liveins: $x0, $lr
64+
; CHECK-ZCZ-GPR32-NOZCZ-GPR64-NEXT: {{ $}}
65+
; CHECK-ZCZ-GPR32-NOZCZ-GPR64-NEXT: $x0 = ORRXrr $xzr, $xzr
66+
; CHECK-ZCZ-GPR32-NOZCZ-GPR64-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
9567
;
96-
; CHECK-NO-ZCM-ZCZ-LABEL: name: f1
97-
; CHECK-NO-ZCM-ZCZ: liveins: $x0, $lr
98-
; CHECK-NO-ZCM-ZCZ-NEXT: {{ $}}
99-
; CHECK-NO-ZCM-ZCZ-NEXT: $x0 = MOVZXi 0, 0
100-
; CHECK-NO-ZCM-ZCZ-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
68+
; CHECK-NOZCZ-GPR32-ZCZ-GPR64-LABEL: name: f1
69+
; CHECK-NOZCZ-GPR32-ZCZ-GPR64: liveins: $x0, $lr
70+
; CHECK-NOZCZ-GPR32-ZCZ-GPR64-NEXT: {{ $}}
71+
; CHECK-NOZCZ-GPR32-ZCZ-GPR64-NEXT: $x0 = MOVZXi 0, 0
72+
; CHECK-NOZCZ-GPR32-ZCZ-GPR64-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
10173
;
102-
; CHECK-ZCM-ZCZ-LABEL: name: f1
103-
; CHECK-ZCM-ZCZ: liveins: $x0, $lr
104-
; CHECK-ZCM-ZCZ-NEXT: {{ $}}
105-
; CHECK-ZCM-ZCZ-NEXT: $x0 = MOVZXi 0, 0
106-
; CHECK-ZCM-ZCZ-NEXT:BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
74+
; CHECK-ZCZ-GPR32-ZCZ-GPR64-LABEL: name: f1
75+
; CHECK-ZCZ-GPR32-ZCZ-GPR64: liveins: $x0, $lr
76+
; CHECK-ZCZ-GPR32-ZCZ-GPR64-NEXT: {{ $}}
77+
; CHECK-ZCZ-GPR32-ZCZ-GPR64-NEXT: $x0 = MOVZXi 0, 0
78+
; CHECK-ZCZ-GPR32-ZCZ-GPR64-NEXT: BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
10779
$x0 = COPY $xzr
10880
BL @f2, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit $w0, implicit-def $sp, implicit-def $w0
10981
...

0 commit comments

Comments
 (0)