From 009b5281407b951c8556bcb96c3a1caf25630b1c Mon Sep 17 00:00:00 2001 From: gregory Date: Mon, 22 Aug 2022 22:42:34 -0700 Subject: [PATCH] Fix an issue causing incorrect conversion into unsigned types --- llvm/lib/SYCLLowerIR/ESIMD/LowerESIMD.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/llvm/lib/SYCLLowerIR/ESIMD/LowerESIMD.cpp b/llvm/lib/SYCLLowerIR/ESIMD/LowerESIMD.cpp index 8ac058f90416f..50063e544f996 100644 --- a/llvm/lib/SYCLLowerIR/ESIMD/LowerESIMD.cpp +++ b/llvm/lib/SYCLLowerIR/ESIMD/LowerESIMD.cpp @@ -1685,7 +1685,11 @@ size_t SYCLLowerESIMDPass::runOnFunction(Function &F, auto TmpTy = llvm::FixedVectorType::get( llvm::Type::getInt32Ty(DstTy->getContext()), cast(DstTy)->getNumElements()); - Src = Builder.CreateFPToSI(Src, TmpTy); + if (CastOpcode == llvm::Instruction::FPToUI) { + Src = Builder.CreateFPToUI(Src, TmpTy); + } else { + Src = Builder.CreateFPToSI(Src, TmpTy); + } llvm::Instruction::CastOps TruncOp = llvm::Instruction::Trunc; llvm::Value *NewDst = Builder.CreateCast(TruncOp, Src, DstTy);