Skip to content

Commit 7ccf02a

Browse files
committed
[AArch64] Support merging of narrow zero stores
1 parent bc11987 commit 7ccf02a

File tree

2 files changed

+9
-11
lines changed

2 files changed

+9
-11
lines changed

llvm/lib/Target/AArch64/AArch64LoadStoreOptimizer.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1539,10 +1539,12 @@ static bool areCandidatesToMergeOrPair(MachineInstr &FirstMI, MachineInstr &MI,
15391539
if (!PairIsValidLdStrOpc)
15401540
return false;
15411541

1542-
// FIXME: We don't support merging narrow stores with mixed scaled/unscaled
1543-
// offsets.
1542+
// Narrow stores do not have a matching pair opcodes, so constrain their
1543+
// merging to zero stores.
15441544
if (isNarrowStore(OpcA) || isNarrowStore(OpcB))
1545-
return false;
1545+
return getLdStRegOp(FirstMI).getReg() == AArch64::WZR &&
1546+
getLdStRegOp(MI).getReg() == AArch64::WZR &&
1547+
TII->getMemScale(FirstMI) == TII->getMemScale(MI);
15461548

15471549
// The STR<S,D,Q,W,X>pre - STR<S,D,Q,W,X>ui and
15481550
// LDR<S,D,Q,W,X,SW>pre-LDR<S,D,Q,W,X,SW>ui

llvm/test/CodeGen/AArch64/str-narrow-zero-merge.mir

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ name: merge_scaled_str_with_unscaled_8
2929
body: |
3030
bb.0.entry:
3131
; CHECK-LABEL: name: merge_scaled_str_with_unscaled_8
32-
; CHECK: STRBBui $wzr, $x0, 4 :: (store (s8))
33-
; CHECK-NEXT: STURBBi $wzr, $x0, 5 :: (store (s8))
32+
; CHECK: STRHHui $wzr, $x0, 2 :: (store (s8))
3433
; CHECK-NEXT: RET undef $lr
3534
STRBBui $wzr, $x0, 4 :: (store (s8))
3635
STURBBi $wzr, $x0, 5 :: (store (s8))
@@ -41,8 +40,7 @@ name: merge_unscaled_str_with_scaled_8
4140
body: |
4241
bb.0.entry:
4342
; CHECK-LABEL: name: merge_unscaled_str_with_scaled_8
44-
; CHECK: STURBBi $wzr, $x0, 4 :: (store (s8))
45-
; CHECK-NEXT: STRBBui $wzr, $x0, 5 :: (store (s8))
43+
; CHECK: STURHHi $wzr, $x0, 4 :: (store (s8))
4644
; CHECK-NEXT: RET undef $lr
4745
STURBBi $wzr, $x0, 4 :: (store (s8))
4846
STRBBui $wzr, $x0, 5 :: (store (s8))
@@ -75,8 +73,7 @@ name: merge_scaled_str_with_unscaled_16
7573
body: |
7674
bb.0.entry:
7775
; CHECK-LABEL: name: merge_scaled_str_with_unscaled_16
78-
; CHECK: STRHHui $wzr, $x0, 2 :: (store (s16))
79-
; CHECK-NEXT: STURHHi $wzr, $x0, 6 :: (store (s16))
76+
; CHECK: STRWui $wzr, $x0, 1 :: (store (s16))
8077
; CHECK-NEXT: RET undef $lr
8178
STRHHui $wzr, $x0, 2 :: (store (s16))
8279
STURHHi $wzr, $x0, 6 :: (store (s16))
@@ -87,8 +84,7 @@ name: merge_unscaled_str_with_scaled_16
8784
body: |
8885
bb.0.entry:
8986
; CHECK-LABEL: name: merge_unscaled_str_with_scaled_16
90-
; CHECK: STURHHi $wzr, $x0, 4 :: (store (s16))
91-
; CHECK-NEXT: STRHHui $wzr, $x0, 3 :: (store (s16))
87+
; CHECK: STURWi $wzr, $x0, 4 :: (store (s16))
9288
; CHECK-NEXT: RET undef $lr
9389
STURHHi $wzr, $x0, 4 :: (store (s16))
9490
STRHHui $wzr, $x0, 3 :: (store (s16))

0 commit comments

Comments
 (0)