[llvm] 9575c48 - [AArch64][GlobalISel] Fix crash on lowering <1 x half> types.
Amara Emerson via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 15 23:49:31 PDT 2021
Author: Amara Emerson
Date: 2021-03-15T23:27:43-07:00
New Revision: 9575c48b8959dae3c3e39e0227435ae6ebd71443
URL: https://github.com/llvm/llvm-project/commit/9575c48b8959dae3c3e39e0227435ae6ebd71443
DIFF: https://github.com/llvm/llvm-project/commit/9575c48b8959dae3c3e39e0227435ae6ebd71443.diff
LOG: [AArch64][GlobalISel] Fix crash on lowering <1 x half> types.
Added:
Modified:
llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp
llvm/test/CodeGen/AArch64/GlobalISel/call-lowering-vectors.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp b/llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp
index d16e2fd13475..dbe5f5635048 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64CallLowering.cpp
@@ -357,9 +357,14 @@ bool AArch64CallLowering::lowerReturn(MachineIRBuilder &MIRBuilder,
return false;
}
} else {
- // A scalar extend.
- CurVReg =
- MIRBuilder.buildInstr(ExtendOp, {NewLLT}, {CurVReg}).getReg(0);
+ // If the split EVT was a <1 x T> vector, and NewVT is T, then we
+ // don't have to do anything since we don't distinguish between the
+ // two.
+ if (NewLLT != MRI.getType(CurVReg)) {
+ // A scalar extend.
+ CurVReg = MIRBuilder.buildInstr(ExtendOp, {NewLLT}, {CurVReg})
+ .getReg(0);
+ }
}
}
}
diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/call-lowering-vectors.ll b/llvm/test/CodeGen/AArch64/GlobalISel/call-lowering-vectors.ll
index ee73e58798c7..f34f0981c211 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/call-lowering-vectors.ll
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/call-lowering-vectors.ll
@@ -31,3 +31,16 @@ define i24 @test_v3i8(<3 x i8> %a) {
ret i24 %res
}
+
+define <1 x half> @test_v1s16(<1 x float> %x) {
+ ; CHECK-LABEL: name: test_v1s16
+ ; CHECK: bb.1 (%ir-block.0):
+ ; CHECK: liveins: $d0
+ ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $d0
+ ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
+ ; CHECK: [[FPTRUNC:%[0-9]+]]:_(s16) = G_FPTRUNC [[UV]](s32)
+ ; CHECK: $h0 = COPY [[FPTRUNC]](s16)
+ ; CHECK: RET_ReallyLR implicit $h0
+ %tmp = fptrunc <1 x float> %x to <1 x half>
+ ret <1 x half> %tmp
+}
More information about the llvm-commits
mailing list