Skip to content

Commit 2308d7b

Browse files
authored
[AArch64][GlobalISel] Fix passing <3 x ptr> via the stack. (#157247)
A <3 x ptr> will become a <1 x ptr> after being split, which needs to be represented as a s64 in a LLT.
1 parent 8ba0d0f commit 2308d7b

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

llvm/lib/CodeGen/GlobalISel/CallLowering.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1256,7 +1256,7 @@ LLT CallLowering::ValueHandler::getStackValueStoreType(
12561256
if (Flags.isPointer()) {
12571257
LLT PtrTy = LLT::pointer(Flags.getPointerAddrSpace(),
12581258
ValTy.getScalarSizeInBits());
1259-
if (ValVT.isVector())
1259+
if (ValVT.isVector() && ValVT.getVectorNumElements() != 1)
12601260
return LLT::vector(ValTy.getElementCount(), PtrTy);
12611261
return PtrTy;
12621262
}

llvm/test/CodeGen/AArch64/extract-vector-elt.ll

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,3 +1093,38 @@ loop:
10931093
ret:
10941094
ret i32 %3
10951095
}
1096+
1097+
define <3 x ptr> @v3move(<3 x ptr> %a, <3 x ptr> %b, <3 x ptr> %x) {
1098+
; CHECK-SD-LABEL: v3move:
1099+
; CHECK-SD: // %bb.0: // %entry
1100+
; CHECK-SD-NEXT: fmov d1, d7
1101+
; CHECK-SD-NEXT: fmov d0, d6
1102+
; CHECK-SD-NEXT: ldr d2, [sp]
1103+
; CHECK-SD-NEXT: ret
1104+
;
1105+
; CHECK-GI-LABEL: v3move:
1106+
; CHECK-GI: // %bb.0: // %entry
1107+
; CHECK-GI-NEXT: ldr x8, [sp]
1108+
; CHECK-GI-NEXT: fmov d0, d6
1109+
; CHECK-GI-NEXT: fmov d1, d7
1110+
; CHECK-GI-NEXT: fmov d2, x8
1111+
; CHECK-GI-NEXT: ret
1112+
entry:
1113+
ret <3 x ptr> %x
1114+
}
1115+
1116+
define ptr @v3ext(<3 x ptr> %a, <3 x ptr> %b, <3 x ptr> %x) {
1117+
; CHECK-SD-LABEL: v3ext:
1118+
; CHECK-SD: // %bb.0: // %entry
1119+
; CHECK-SD-NEXT: ldr d0, [sp]
1120+
; CHECK-SD-NEXT: fmov x0, d0
1121+
; CHECK-SD-NEXT: ret
1122+
;
1123+
; CHECK-GI-LABEL: v3ext:
1124+
; CHECK-GI: // %bb.0: // %entry
1125+
; CHECK-GI-NEXT: ldr x0, [sp]
1126+
; CHECK-GI-NEXT: ret
1127+
entry:
1128+
%c = extractelement <3 x ptr> %x, i32 2
1129+
ret ptr %c
1130+
}

0 commit comments

Comments
 (0)