From 677a910123cb6325aaaef433d5c54243d7a4a569 Mon Sep 17 00:00:00 2001 From: Paul Walker Date: Tue, 16 Sep 2025 14:10:45 +0100 Subject: [PATCH] [LLVM][CodeGen] Update PPCFastISel::SelectRet for ConstantInt based vectors. The current implementation assumes ConstantInt return values are scalar, which is not true when use-constant-int-for-fixed-length-splat is enabled. --- llvm/lib/Target/PowerPC/PPCFastISel.cpp | 3 ++- llvm/test/CodeGen/PowerPC/vec_constants.ll | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/llvm/lib/Target/PowerPC/PPCFastISel.cpp b/llvm/lib/Target/PowerPC/PPCFastISel.cpp index 0b68ba12e337f..ea4e597d0fd7d 100644 --- a/llvm/lib/Target/PowerPC/PPCFastISel.cpp +++ b/llvm/lib/Target/PowerPC/PPCFastISel.cpp @@ -1707,7 +1707,8 @@ bool PPCFastISel::SelectRet(const Instruction *I) { // Special case for returning a constant integer of any size - materialize // the constant as an i64 and copy it to the return register. - if (const ConstantInt *CI = dyn_cast(RV)) { + if (isa(RV) && RV->getType()->isIntegerTy()) { + const ConstantInt *CI = cast(RV); CCValAssign &VA = ValLocs[0]; Register RetReg = VA.getLocReg(); diff --git a/llvm/test/CodeGen/PowerPC/vec_constants.ll b/llvm/test/CodeGen/PowerPC/vec_constants.ll index 3c14c14e06568..2b448fd05aeb5 100644 --- a/llvm/test/CodeGen/PowerPC/vec_constants.ll +++ b/llvm/test/CodeGen/PowerPC/vec_constants.ll @@ -3,6 +3,10 @@ ; RUN: llc -verify-machineinstrs -O0 -mcpu=pwr7 -mtriple=powerpc64-ibm-aix-xcoff -vec-extabi < %s | FileCheck %s --check-prefixes=CHECK,BE ; RUN: llc -verify-machineinstrs -O0 -mcpu=pwr7 -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,LE +; RUN: llc -verify-machineinstrs -O0 -mcpu=pwr7 -mtriple=powerpc64-unknown-linux-gnu -use-constant-int-for-fixed-length-splat -use-constant-fp-for-fixed-length-splat < %s | FileCheck %s --check-prefixes=CHECK,BE +; RUN: llc -verify-machineinstrs -O0 -mcpu=pwr7 -mtriple=powerpc64-ibm-aix-xcoff -vec-extabi -use-constant-int-for-fixed-length-splat -use-constant-fp-for-fixed-length-splat < %s | FileCheck %s --check-prefixes=CHECK,BE +; RUN: llc -verify-machineinstrs -O0 -mcpu=pwr7 -mtriple=powerpc64le-unknown-linux-gnu -use-constant-int-for-fixed-length-splat -use-constant-fp-for-fixed-length-splat < %s | FileCheck %s --check-prefixes=CHECK,LE + define void @test1(ptr %P1, ptr %P2, ptr %P3) nounwind { ; BE-LABEL: test1: ; BE: # %bb.0: