Skip to content

Commit 055f935

Browse files
committed
[AArch64] Fix buildbot breakage of ubsan
Fix the ERROR: UndefinedBehaviorSanitizer, reproduced by BUILDBOT_REVISION=43ffe2eed llvm-zorg/zorg/buildbot/builders/sanitizers/buildbot_bootstrap_ubsan.sh It might be also related to llvm#76202
1 parent 3be955a commit 055f935

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2223,7 +2223,9 @@ bool AArch64LoadStoreOpt::isMatchingMovConstInsn(MachineInstr &MemMI,
22232223
return false;
22242224
MBBI = prev_nodbg(MBBI, B);
22252225
MachineInstr &MovzMI = *MBBI;
2226-
if (MovzMI.getOpcode() == AArch64::MOVZWi) {
2226+
// Make sure the MOVKWi and MOVZWi set the same register.
2227+
if (MovzMI.getOpcode() == AArch64::MOVZWi &&
2228+
MovzMI.getOperand(0).getReg() == MI.getOperand(0).getReg()) {
22272229
unsigned Low = MovzMI.getOperand(1).getImm();
22282230
unsigned High = MI.getOperand(2).getImm() << MI.getOperand(3).getImm();
22292231
Offset = High + Low;

llvm/test/CodeGen/AArch64/large-offset-ldr-merge.mir

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,26 @@ body: |
6565
renamable $w8 = MOVKWi $w8, 15, 16, implicit-def $x8
6666
renamable $w0 = LDRBBroX killed renamable $x0, killed renamable $x8, 0, 0
6767
RET undef $lr, implicit $w0
68+
...
69+
70+
# Negative test: MOVZWi and MOVKWi don't set the same register
71+
---
72+
name: LdOffset_different_register_MOVZ_MOVK
73+
tracksRegLiveness: true
74+
liveins:
75+
- { reg: '$x0', virtual-reg: '' }
76+
body: |
77+
bb.0.entry:
78+
liveins: $x0
79+
80+
; CHECK-LABEL: name: LdOffset_different_register_MOVZ_MOVK
81+
; CHECK: liveins: $x0
82+
; CHECK-NEXT: {{ $}}
83+
; CHECK-NEXT: renamable $w7 = MOVZWi 56952, 0
84+
; CHECK-NEXT: renamable $w8 = MOVKWi $w8, 15, 16, implicit-def $x8
85+
; CHECK-NEXT: renamable $w0 = LDRBBroX killed renamable $x0, killed renamable $x8, 0, 0
86+
; CHECK-NEXT: RET undef $lr, implicit $w0
87+
renamable $w7 = MOVZWi 56952, 0
88+
renamable $w8 = MOVKWi $w8, 15, 16, implicit-def $x8
89+
renamable $w0 = LDRBBroX killed renamable $x0, killed renamable $x8, 0, 0
90+
RET undef $lr, implicit $w0

0 commit comments

Comments
 (0)