Skip to content

Commit e0644ab

Browse files
[InstrRef][AArch64]Add Target hooks for InstrRef on AArch64
Accordint to llvm/docs/InstrRefDebugInfo.md, to support proper instruction. referecing on any platform, the target specific TargetInstrInfo::isLoadFromStackSlotPostFE and TargetInstrInfo::isStoreToStackSlotPostFE are needed to be implemented for the Instruction Reference-based LiveDebugValues pass to identify spill and restore instructions. This patch implements the AArch64 versions of those functions. Namely, AArch64InstrInfo::isLoadFromStackSlotPostFE and AArch64InstrInfo::isStoreToStackSlotPostFE.
1 parent 09f0f38 commit e0644ab

File tree

178 files changed

+10905
-10850
lines changed

Some content is hidden

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

178 files changed

+10905
-10850
lines changed

llvm/lib/Target/AArch64/AArch64InstrInfo.cpp

Lines changed: 53 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2357,11 +2357,10 @@ bool AArch64InstrInfo::isFPRCopy(const MachineInstr &MI) {
23572357
return false;
23582358
}
23592359

2360-
Register AArch64InstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
2361-
int &FrameIndex) const {
2362-
switch (MI.getOpcode()) {
2360+
static bool isFrameLoadOpcode(int Opcode) {
2361+
switch (Opcode) {
23632362
default:
2364-
break;
2363+
return false;
23652364
case AArch64::LDRWui:
23662365
case AArch64::LDRXui:
23672366
case AArch64::LDRBui:
@@ -2370,22 +2369,26 @@ Register AArch64InstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
23702369
case AArch64::LDRDui:
23712370
case AArch64::LDRQui:
23722371
case AArch64::LDR_PXI:
2372+
return true;
2373+
}
2374+
}
2375+
2376+
Register AArch64InstrInfo::isLoadFromStackSlot(const MachineInstr &MI,
2377+
int &FrameIndex) const {
2378+
if (isFrameLoadOpcode(MI.getOpcode())) {
23732379
if (MI.getOperand(0).getSubReg() == 0 && MI.getOperand(1).isFI() &&
23742380
MI.getOperand(2).isImm() && MI.getOperand(2).getImm() == 0) {
23752381
FrameIndex = MI.getOperand(1).getIndex();
23762382
return MI.getOperand(0).getReg();
23772383
}
2378-
break;
23792384
}
2380-
23812385
return 0;
23822386
}
23832387

2384-
Register AArch64InstrInfo::isStoreToStackSlot(const MachineInstr &MI,
2385-
int &FrameIndex) const {
2386-
switch (MI.getOpcode()) {
2388+
static bool isFrameStoreOpcode(int Opcode) {
2389+
switch (Opcode) {
23872390
default:
2388-
break;
2391+
return false;
23892392
case AArch64::STRWui:
23902393
case AArch64::STRXui:
23912394
case AArch64::STRBui:
@@ -2394,16 +2397,55 @@ Register AArch64InstrInfo::isStoreToStackSlot(const MachineInstr &MI,
23942397
case AArch64::STRDui:
23952398
case AArch64::STRQui:
23962399
case AArch64::STR_PXI:
2400+
return true;
2401+
}
2402+
}
2403+
2404+
Register AArch64InstrInfo::isStoreToStackSlot(const MachineInstr &MI,
2405+
int &FrameIndex) const {
2406+
if (isFrameStoreOpcode(MI.getOpcode())) {
23972407
if (MI.getOperand(0).getSubReg() == 0 && MI.getOperand(1).isFI() &&
23982408
MI.getOperand(2).isImm() && MI.getOperand(2).getImm() == 0) {
23992409
FrameIndex = MI.getOperand(1).getIndex();
24002410
return MI.getOperand(0).getReg();
24012411
}
2402-
break;
24032412
}
24042413
return 0;
24052414
}
24062415

2416+
Register AArch64InstrInfo::isStoreToStackSlotPostFE(const MachineInstr &MI,
2417+
int &FrameIndex) const {
2418+
if (isFrameStoreOpcode(MI.getOpcode())) {
2419+
SmallVector<const MachineMemOperand *, 1> Accesses;
2420+
if (Register Reg = isStoreToStackSlot(MI, FrameIndex))
2421+
return Reg;
2422+
2423+
if (hasStoreToStackSlot(MI, Accesses)) {
2424+
FrameIndex =
2425+
cast<FixedStackPseudoSourceValue>(Accesses.front()->getPseudoValue())
2426+
->getFrameIndex();
2427+
return 1;
2428+
}
2429+
}
2430+
return Register();
2431+
}
2432+
2433+
Register AArch64InstrInfo::isLoadFromStackSlotPostFE(const MachineInstr &MI,
2434+
int &FrameIndex) const {
2435+
if (isFrameLoadOpcode(MI.getOpcode())) {
2436+
if (Register Reg = isLoadFromStackSlot(MI, FrameIndex))
2437+
return Reg;
2438+
SmallVector<const MachineMemOperand *, 1> Accesses;
2439+
if (hasLoadFromStackSlot(MI, Accesses)) {
2440+
FrameIndex =
2441+
cast<FixedStackPseudoSourceValue>(Accesses.front()->getPseudoValue())
2442+
->getFrameIndex();
2443+
return 1;
2444+
}
2445+
}
2446+
return Register();
2447+
}
2448+
24072449
/// Check all MachineMemOperands for a hint to suppress pairing.
24082450
bool AArch64InstrInfo::isLdStPairSuppressed(const MachineInstr &MI) {
24092451
return llvm::any_of(MI.memoperands(), [](MachineMemOperand *MMO) {

llvm/lib/Target/AArch64/AArch64InstrInfo.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,15 @@ class AArch64InstrInfo final : public AArch64GenInstrInfo {
205205
Register isStoreToStackSlot(const MachineInstr &MI,
206206
int &FrameIndex) const override;
207207

208+
/// isStoreToStackSlotPostFE - Check for post-frame ptr elimination
209+
/// stack locations as well. This uses a heuristic so it isn't
210+
/// reliable for correctness.
211+
Register isStoreToStackSlotPostFE(const MachineInstr &MI,
212+
int &FrameIndex) const override;
213+
214+
Register isLoadFromStackSlotPostFE(const MachineInstr &MI,
215+
int &FrameIndex) const override;
216+
208217
/// Does this instruction set its full destination register to zero?
209218
static bool isGPRZero(const MachineInstr &MI);
210219

llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic-128.ll

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -89,33 +89,33 @@ define void @val_compare_and_swap(ptr %p, i128 %oldval, i128 %newval) {
8989
; CHECK-OUTLINE-LLSC-O0-LABEL: val_compare_and_swap:
9090
; CHECK-OUTLINE-LLSC-O0: // %bb.0:
9191
; CHECK-OUTLINE-LLSC-O0-NEXT: sub sp, sp, #32
92-
; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
92+
; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
9393
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_def_cfa_offset 32
9494
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_offset w30, -16
95-
; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Folded Spill
95+
; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Spill
9696
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x0, x2
9797
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x1, x3
9898
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x2, x4
99-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Folded Reload
99+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Reload
100100
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x3, x5
101101
; CHECK-OUTLINE-LLSC-O0-NEXT: bl __aarch64_cas16_acq
102102
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x8, x0
103-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Folded Reload
103+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Reload
104104
; CHECK-OUTLINE-LLSC-O0-NEXT: // implicit-def: $q0
105105
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[0], x8
106106
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[1], x1
107107
; CHECK-OUTLINE-LLSC-O0-NEXT: str q0, [x0]
108-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
108+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
109109
; CHECK-OUTLINE-LLSC-O0-NEXT: add sp, sp, #32
110110
; CHECK-OUTLINE-LLSC-O0-NEXT: ret
111111
;
112112
; CHECK-CAS-O0-LABEL: val_compare_and_swap:
113113
; CHECK-CAS-O0: // %bb.0:
114114
; CHECK-CAS-O0-NEXT: sub sp, sp, #16
115115
; CHECK-CAS-O0-NEXT: .cfi_def_cfa_offset 16
116-
; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Folded Spill
116+
; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Spill
117117
; CHECK-CAS-O0-NEXT: mov x1, x5
118-
; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Folded Reload
118+
; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Reload
119119
; CHECK-CAS-O0-NEXT: // kill: def $x2 killed $x2 def $x2_x3
120120
; CHECK-CAS-O0-NEXT: mov x3, x5
121121
; CHECK-CAS-O0-NEXT: // kill: def $x4 killed $x4 def $x4_x5
@@ -216,33 +216,33 @@ define void @val_compare_and_swap_monotonic_seqcst(ptr %p, i128 %oldval, i128 %n
216216
; CHECK-OUTLINE-LLSC-O0-LABEL: val_compare_and_swap_monotonic_seqcst:
217217
; CHECK-OUTLINE-LLSC-O0: // %bb.0:
218218
; CHECK-OUTLINE-LLSC-O0-NEXT: sub sp, sp, #32
219-
; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
219+
; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
220220
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_def_cfa_offset 32
221221
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_offset w30, -16
222-
; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Folded Spill
222+
; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Spill
223223
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x0, x2
224224
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x1, x3
225225
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x2, x4
226-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Folded Reload
226+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Reload
227227
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x3, x5
228228
; CHECK-OUTLINE-LLSC-O0-NEXT: bl __aarch64_cas16_acq_rel
229229
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x8, x0
230-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Folded Reload
230+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Reload
231231
; CHECK-OUTLINE-LLSC-O0-NEXT: // implicit-def: $q0
232232
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[0], x8
233233
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[1], x1
234234
; CHECK-OUTLINE-LLSC-O0-NEXT: str q0, [x0]
235-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
235+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
236236
; CHECK-OUTLINE-LLSC-O0-NEXT: add sp, sp, #32
237237
; CHECK-OUTLINE-LLSC-O0-NEXT: ret
238238
;
239239
; CHECK-CAS-O0-LABEL: val_compare_and_swap_monotonic_seqcst:
240240
; CHECK-CAS-O0: // %bb.0:
241241
; CHECK-CAS-O0-NEXT: sub sp, sp, #16
242242
; CHECK-CAS-O0-NEXT: .cfi_def_cfa_offset 16
243-
; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Folded Spill
243+
; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Spill
244244
; CHECK-CAS-O0-NEXT: mov x1, x5
245-
; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Folded Reload
245+
; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Reload
246246
; CHECK-CAS-O0-NEXT: // kill: def $x2 killed $x2 def $x2_x3
247247
; CHECK-CAS-O0-NEXT: mov x3, x5
248248
; CHECK-CAS-O0-NEXT: // kill: def $x4 killed $x4 def $x4_x5
@@ -343,33 +343,33 @@ define void @val_compare_and_swap_release_acquire(ptr %p, i128 %oldval, i128 %ne
343343
; CHECK-OUTLINE-LLSC-O0-LABEL: val_compare_and_swap_release_acquire:
344344
; CHECK-OUTLINE-LLSC-O0: // %bb.0:
345345
; CHECK-OUTLINE-LLSC-O0-NEXT: sub sp, sp, #32
346-
; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
346+
; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
347347
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_def_cfa_offset 32
348348
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_offset w30, -16
349-
; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Folded Spill
349+
; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Spill
350350
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x0, x2
351351
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x1, x3
352352
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x2, x4
353-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Folded Reload
353+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Reload
354354
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x3, x5
355355
; CHECK-OUTLINE-LLSC-O0-NEXT: bl __aarch64_cas16_acq_rel
356356
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x8, x0
357-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Folded Reload
357+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Reload
358358
; CHECK-OUTLINE-LLSC-O0-NEXT: // implicit-def: $q0
359359
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[0], x8
360360
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[1], x1
361361
; CHECK-OUTLINE-LLSC-O0-NEXT: str q0, [x0]
362-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
362+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
363363
; CHECK-OUTLINE-LLSC-O0-NEXT: add sp, sp, #32
364364
; CHECK-OUTLINE-LLSC-O0-NEXT: ret
365365
;
366366
; CHECK-CAS-O0-LABEL: val_compare_and_swap_release_acquire:
367367
; CHECK-CAS-O0: // %bb.0:
368368
; CHECK-CAS-O0-NEXT: sub sp, sp, #16
369369
; CHECK-CAS-O0-NEXT: .cfi_def_cfa_offset 16
370-
; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Folded Spill
370+
; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Spill
371371
; CHECK-CAS-O0-NEXT: mov x1, x5
372-
; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Folded Reload
372+
; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Reload
373373
; CHECK-CAS-O0-NEXT: // kill: def $x2 killed $x2 def $x2_x3
374374
; CHECK-CAS-O0-NEXT: mov x3, x5
375375
; CHECK-CAS-O0-NEXT: // kill: def $x4 killed $x4 def $x4_x5
@@ -470,33 +470,33 @@ define void @val_compare_and_swap_monotonic(ptr %p, i128 %oldval, i128 %newval)
470470
; CHECK-OUTLINE-LLSC-O0-LABEL: val_compare_and_swap_monotonic:
471471
; CHECK-OUTLINE-LLSC-O0: // %bb.0:
472472
; CHECK-OUTLINE-LLSC-O0-NEXT: sub sp, sp, #32
473-
; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
473+
; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
474474
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_def_cfa_offset 32
475475
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_offset w30, -16
476-
; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Folded Spill
476+
; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Spill
477477
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x0, x2
478478
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x1, x3
479479
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x2, x4
480-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Folded Reload
480+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Reload
481481
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x3, x5
482482
; CHECK-OUTLINE-LLSC-O0-NEXT: bl __aarch64_cas16_acq_rel
483483
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x8, x0
484-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Folded Reload
484+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x0, [sp, #8] // 8-byte Reload
485485
; CHECK-OUTLINE-LLSC-O0-NEXT: // implicit-def: $q0
486486
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[0], x8
487487
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[1], x1
488488
; CHECK-OUTLINE-LLSC-O0-NEXT: str q0, [x0]
489-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
489+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
490490
; CHECK-OUTLINE-LLSC-O0-NEXT: add sp, sp, #32
491491
; CHECK-OUTLINE-LLSC-O0-NEXT: ret
492492
;
493493
; CHECK-CAS-O0-LABEL: val_compare_and_swap_monotonic:
494494
; CHECK-CAS-O0: // %bb.0:
495495
; CHECK-CAS-O0-NEXT: sub sp, sp, #16
496496
; CHECK-CAS-O0-NEXT: .cfi_def_cfa_offset 16
497-
; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Folded Spill
497+
; CHECK-CAS-O0-NEXT: str x3, [sp, #8] // 8-byte Spill
498498
; CHECK-CAS-O0-NEXT: mov x1, x5
499-
; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Folded Reload
499+
; CHECK-CAS-O0-NEXT: ldr x5, [sp, #8] // 8-byte Reload
500500
; CHECK-CAS-O0-NEXT: // kill: def $x2 killed $x2 def $x2_x3
501501
; CHECK-CAS-O0-NEXT: mov x3, x5
502502
; CHECK-CAS-O0-NEXT: // kill: def $x4 killed $x4 def $x4_x5
@@ -580,22 +580,22 @@ define void @atomic_load_relaxed(i64, i64, ptr %p, ptr %p2) {
580580
; CHECK-OUTLINE-LLSC-O0-LABEL: atomic_load_relaxed:
581581
; CHECK-OUTLINE-LLSC-O0: // %bb.0:
582582
; CHECK-OUTLINE-LLSC-O0-NEXT: sub sp, sp, #32
583-
; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
583+
; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
584584
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_def_cfa_offset 32
585585
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_offset w30, -16
586586
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x4, x2
587-
; CHECK-OUTLINE-LLSC-O0-NEXT: str x3, [sp, #8] // 8-byte Folded Spill
587+
; CHECK-OUTLINE-LLSC-O0-NEXT: str x3, [sp, #8] // 8-byte Spill
588588
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x3, xzr
589589
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x0, x3
590590
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x1, x3
591591
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x2, x3
592592
; CHECK-OUTLINE-LLSC-O0-NEXT: bl __aarch64_cas16_relax
593-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x3, [sp, #8] // 8-byte Folded Reload
593+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x3, [sp, #8] // 8-byte Reload
594594
; CHECK-OUTLINE-LLSC-O0-NEXT: // implicit-def: $q0
595595
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[0], x0
596596
; CHECK-OUTLINE-LLSC-O0-NEXT: mov v0.d[1], x1
597597
; CHECK-OUTLINE-LLSC-O0-NEXT: str q0, [x3]
598-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
598+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
599599
; CHECK-OUTLINE-LLSC-O0-NEXT: add sp, sp, #32
600600
; CHECK-OUTLINE-LLSC-O0-NEXT: ret
601601
;
@@ -690,17 +690,17 @@ define i128 @val_compare_and_swap_return(ptr %p, i128 %oldval, i128 %newval) {
690690
; CHECK-OUTLINE-LLSC-O0-LABEL: val_compare_and_swap_return:
691691
; CHECK-OUTLINE-LLSC-O0: // %bb.0:
692692
; CHECK-OUTLINE-LLSC-O0-NEXT: sub sp, sp, #32
693-
; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
693+
; CHECK-OUTLINE-LLSC-O0-NEXT: str x30, [sp, #16] // 8-byte Spill
694694
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_def_cfa_offset 32
695695
; CHECK-OUTLINE-LLSC-O0-NEXT: .cfi_offset w30, -16
696-
; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Folded Spill
696+
; CHECK-OUTLINE-LLSC-O0-NEXT: str x0, [sp, #8] // 8-byte Spill
697697
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x0, x2
698698
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x1, x3
699699
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x2, x4
700-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Folded Reload
700+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x4, [sp, #8] // 8-byte Reload
701701
; CHECK-OUTLINE-LLSC-O0-NEXT: mov x3, x5
702702
; CHECK-OUTLINE-LLSC-O0-NEXT: bl __aarch64_cas16_acq
703-
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
703+
; CHECK-OUTLINE-LLSC-O0-NEXT: ldr x30, [sp, #16] // 8-byte Reload
704704
; CHECK-OUTLINE-LLSC-O0-NEXT: add sp, sp, #32
705705
; CHECK-OUTLINE-LLSC-O0-NEXT: ret
706706
;

0 commit comments

Comments
 (0)