Skip to content

Commit 8ed397d

Browse files
authored
[DAGCombiner] Disable narrowExtractedVectorLoad for indexed loads. (llvm#135847)
The later code does not expect or preserve the index output. Fixes llvm#135821
1 parent 2d98bdc commit 8ed397d

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

Diff for: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -25183,7 +25183,7 @@ static SDValue narrowExtractedVectorLoad(SDNode *Extract, SelectionDAG &DAG) {
2518325183
return SDValue();
2518425184

2518525185
auto *Ld = dyn_cast<LoadSDNode>(Extract->getOperand(0));
25186-
if (!Ld || Ld->getExtensionType() || !Ld->isSimple())
25186+
if (!Ld || !ISD::isNormalLoad(Ld) || !Ld->isSimple())
2518725187
return SDValue();
2518825188

2518925189
// Allow targets to opt-out.

Diff for: llvm/test/CodeGen/AArch64/pr135821.ll

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc < %s -mtriple=aarch64-unknown-linux-gnu | FileCheck %s
3+
4+
define <4 x float> @f(ptr %0) {
5+
; CHECK-LABEL: f:
6+
; CHECK: // %bb.0:
7+
; CHECK-NEXT: sub sp, sp, #32
8+
; CHECK-NEXT: str x30, [sp, #16] // 8-byte Folded Spill
9+
; CHECK-NEXT: .cfi_def_cfa_offset 32
10+
; CHECK-NEXT: .cfi_offset w30, -16
11+
; CHECK-NEXT: ldr q1, [x0, #56]!
12+
; CHECK-NEXT: ldr d0, [x0, #16]
13+
; CHECK-NEXT: mov v1.d[1], v0.d[0]
14+
; CHECK-NEXT: str q1, [sp] // 16-byte Folded Spill
15+
; CHECK-NEXT: bl use
16+
; CHECK-NEXT: ldr q0, [sp] // 16-byte Folded Reload
17+
; CHECK-NEXT: ldr x30, [sp, #16] // 8-byte Folded Reload
18+
; CHECK-NEXT: add sp, sp, #32
19+
; CHECK-NEXT: ret
20+
%2 = getelementptr inbounds nuw i8, ptr %0, i64 56
21+
%3 = load <6 x float>, ptr %2, align 4
22+
%4 = shufflevector <6 x float> %3, <6 x float> poison, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
23+
tail call void @use(ptr %2)
24+
ret <4 x float> %4
25+
}
26+
27+
declare void @use(ptr)

0 commit comments

Comments
 (0)