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:
parent
d89ddc118c
commit
c656dd9bdd
@ -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.
|
||||
|
18
test/CodeGen/ARM/v1-constant-fold.ll
Normal file
18
test/CodeGen/ARM/v1-constant-fold.ll
Normal 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>)
|
Loading…
Reference in New Issue
Block a user