From 48649c79c2a485af1140d9ae0ea0c01dc761fcf6 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Wed, 9 Dec 2015 21:08:18 +0000 Subject: [PATCH] [Float2Int] Don't operate on vector instructions This fixes a crash bug. It's also not clear if we'd want to do this transform for vectors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255155 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Scalar/Float2Int.cpp | 2 ++ test/Transforms/Float2Int/basic.ll | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/lib/Transforms/Scalar/Float2Int.cpp b/lib/Transforms/Scalar/Float2Int.cpp index a9a4a24f8e9..7f5d78656b5 100644 --- a/lib/Transforms/Scalar/Float2Int.cpp +++ b/lib/Transforms/Scalar/Float2Int.cpp @@ -131,6 +131,8 @@ static Instruction::BinaryOps mapBinOpcode(unsigned Opcode) { // integer domain. void Float2Int::findRoots(Function &F, SmallPtrSet &Roots) { for (auto &I : instructions(F)) { + if (isa(I.getType())) + continue; switch (I.getOpcode()) { default: break; case Instruction::FPToUI: diff --git a/test/Transforms/Float2Int/basic.ll b/test/Transforms/Float2Int/basic.ll index f4d946914cd..7f04a594dc8 100644 --- a/test/Transforms/Float2Int/basic.ll +++ b/test/Transforms/Float2Int/basic.ll @@ -254,3 +254,13 @@ define i32 @neg_calluser(i32 %value) { ret i32 %7 } declare double @g(double) + +; CHECK-LABEL: @neg_vector +; CHECK: %1 = uitofp <4 x i8> %a to <4 x float> +; CHECK: %2 = fptoui <4 x float> %1 to <4 x i16> +; CHECK: ret <4 x i16> %2 +define <4 x i16> @neg_vector(<4 x i8> %a) { + %1 = uitofp <4 x i8> %a to <4 x float> + %2 = fptoui <4 x float> %1 to <4 x i16> + ret <4 x i16> %2 +} -- 2.34.1