1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 03:02:36 +01:00

Fix constant folding for one lane vector types. Constant folding one lane vector types not returns a vector instead of a scalar.

llvm-svn: 180254
This commit is contained in:
Silviu Baranga 2013-04-25 09:32:33 +00:00
parent d89ddc118c
commit c656dd9bdd
2 changed files with 19 additions and 1 deletions

View File

@ -2785,7 +2785,7 @@ SDValue SelectionDAG::FoldConstantArithmetic(unsigned Opcode, EVT VT,
}
// Handle the scalar case first.
if (Outputs.size() == 1)
if (Scalar1 && Scalar2)
return Outputs.back();
// Otherwise build a big vector out of the scalar elements we generated.

View File

@ -0,0 +1,18 @@
; RUN: llc < %s -mtriple=armv7-none-linux-gnueabi -mattr=+v7,+vfp3,-neon | FileCheck %s
; PR15611. Check that we don't crash when constant folding v1i32 types.
; CHECK: foo:
define void @foo(i32 %arg) {
bb:
%tmp = insertelement <4 x i32> undef, i32 %arg, i32 0
%tmp1 = insertelement <4 x i32> %tmp, i32 0, i32 1
%tmp2 = insertelement <4 x i32> %tmp1, i32 0, i32 2
%tmp3 = insertelement <4 x i32> %tmp2, i32 0, i32 3
%tmp4 = add <4 x i32> %tmp3, <i32 -1, i32 -1, i32 -1, i32 -1>
; CHECK: bl bar
tail call void @bar(<4 x i32> %tmp4)
ret void
}
declare void @bar(<4 x i32>)