Skip to content

Commit c2d186f

Browse files
Fix test expectations and code formatting
- Fix LLVM code style: use trailing parameter alignment for getMatchingSuperReg calls instead of assignment-aligned continuation - Update CHECK-FP16 expectations for atomic_load_half/bfloat: GlobalISel allocates FPR32 (s0) for GPR->FPR copies even with FullFP16, then narrows to h0 via kill annotation. The FullFP16 optimization only applies to FPR->GPR (store) direction where the value arrives in h0. - Add kill annotations to CHECK-NOFP16 load tests to match actual output Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 314a54a commit c2d186f

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

llvm/lib/Target/AArch64/AArch64InstrInfo.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5811,8 +5811,8 @@ void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
58115811
BuildMI(MBB, I, DL, get(AArch64::FMOVWHr), DestReg)
58125812
.addReg(SrcReg, getKillRegState(KillSrc));
58135813
} else {
5814-
MCRegister DestRegS =
5815-
RI.getMatchingSuperReg(DestReg, AArch64::hsub, &AArch64::FPR32RegClass);
5814+
MCRegister DestRegS = RI.getMatchingSuperReg(DestReg, AArch64::hsub,
5815+
&AArch64::FPR32RegClass);
58165816
BuildMI(MBB, I, DL, get(AArch64::FMOVWSr), DestRegS)
58175817
.addReg(SrcReg, getKillRegState(KillSrc));
58185818
}
@@ -5824,8 +5824,8 @@ void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
58245824
BuildMI(MBB, I, DL, get(AArch64::FMOVHWr), DestReg)
58255825
.addReg(SrcReg, getKillRegState(KillSrc));
58265826
} else {
5827-
MCRegister SrcRegS =
5828-
RI.getMatchingSuperReg(SrcReg, AArch64::hsub, &AArch64::FPR32RegClass);
5827+
MCRegister SrcRegS = RI.getMatchingSuperReg(SrcReg, AArch64::hsub,
5828+
&AArch64::FPR32RegClass);
58295829
BuildMI(MBB, I, DL, get(AArch64::FMOVSWr), DestReg)
58305830
.addReg(SrcRegS, RegState::Undef)
58315831
.addReg(SrcReg, RegState::Implicit | getKillRegState(KillSrc));
@@ -5840,8 +5840,8 @@ void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
58405840
BuildMI(MBB, I, DL, get(AArch64::FMOVXHr), DestReg)
58415841
.addReg(SrcReg, getKillRegState(KillSrc));
58425842
} else {
5843-
MCRegister DestRegD =
5844-
RI.getMatchingSuperReg(DestReg, AArch64::hsub, &AArch64::FPR64RegClass);
5843+
MCRegister DestRegD = RI.getMatchingSuperReg(DestReg, AArch64::hsub,
5844+
&AArch64::FPR64RegClass);
58455845
BuildMI(MBB, I, DL, get(AArch64::FMOVXDr), DestRegD)
58465846
.addReg(SrcReg, getKillRegState(KillSrc));
58475847
}
@@ -5853,8 +5853,8 @@ void AArch64InstrInfo::copyPhysReg(MachineBasicBlock &MBB,
58535853
BuildMI(MBB, I, DL, get(AArch64::FMOVHXr), DestReg)
58545854
.addReg(SrcReg, getKillRegState(KillSrc));
58555855
} else {
5856-
MCRegister SrcRegD =
5857-
RI.getMatchingSuperReg(SrcReg, AArch64::hsub, &AArch64::FPR64RegClass);
5856+
MCRegister SrcRegD = RI.getMatchingSuperReg(SrcReg, AArch64::hsub,
5857+
&AArch64::FPR64RegClass);
58585858
BuildMI(MBB, I, DL, get(AArch64::FMOVDXr), DestReg)
58595859
.addReg(SrcRegD, RegState::Undef)
58605860
.addReg(SrcReg, RegState::Implicit | getKillRegState(KillSrc));

llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic-store-fp16.ll

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@ define half @atomic_load_half(ptr %addr) {
2727
; CHECK-NOFP16: ; %bb.0:
2828
; CHECK-NOFP16-NEXT: ldarh w8, [x0]
2929
; CHECK-NOFP16-NEXT: fmov s0, w8
30+
; CHECK-NOFP16-NEXT: ; kill: def $h0 killed $h0 killed $s0
3031
; CHECK-NOFP16-NEXT: ret
3132
;
3233
; CHECK-FP16-LABEL: atomic_load_half:
3334
; CHECK-FP16: ; %bb.0:
3435
; CHECK-FP16-NEXT: ldarh w8, [x0]
35-
; CHECK-FP16-NEXT: fmov h0, w8
36+
; CHECK-FP16-NEXT: fmov s0, w8
37+
; CHECK-FP16-NEXT: ; kill: def $h0 killed $h0 killed $s0
3638
; CHECK-FP16-NEXT: ret
3739
%ival = load atomic i16, ptr %addr acquire, align 2
3840
%val = bitcast i16 %ival to half
@@ -61,12 +63,14 @@ define bfloat @atomic_load_bfloat(ptr %addr) {
6163
; CHECK-NOFP16: ; %bb.0:
6264
; CHECK-NOFP16-NEXT: ldarh w8, [x0]
6365
; CHECK-NOFP16-NEXT: fmov s0, w8
66+
; CHECK-NOFP16-NEXT: ; kill: def $h0 killed $h0 killed $s0
6467
; CHECK-NOFP16-NEXT: ret
6568
;
6669
; CHECK-FP16-LABEL: atomic_load_bfloat:
6770
; CHECK-FP16: ; %bb.0:
6871
; CHECK-FP16-NEXT: ldarh w8, [x0]
69-
; CHECK-FP16-NEXT: fmov h0, w8
72+
; CHECK-FP16-NEXT: fmov s0, w8
73+
; CHECK-FP16-NEXT: ; kill: def $h0 killed $h0 killed $s0
7074
; CHECK-FP16-NEXT: ret
7175
%ival = load atomic i16, ptr %addr acquire, align 2
7276
%val = bitcast i16 %ival to bfloat

0 commit comments

Comments
 (0)