mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-21 21:41:43 +00:00

This patch fixes issues with vector constant folding not correctly handling scalar input operands if they require implicit truncation - this was tested with llvm-stress as recommended by Patrik H Hagglund. The patch ensures that integer input scalars from a build vector are correctly truncated before folding, and that constant integer scalar results are promoted to a legal type before inclusion in the new folded build vector. I have added another crash test case and also a test for UINT_TO_FP / SINT_TO_FP using an non-truncated scalar input, which was failing before this patch. Differential Revision: http://reviews.llvm.org/D9282 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236308 91177308-0d34-0410-b5e6-96231b3b80d8
18 lines
475 B
LLVM
18 lines
475 B
LLVM
; RUN: llc < %s -mtriple=i686-unknown -mattr=+avx
|
|
; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+avx
|
|
|
|
;
|
|
; llvm-stress generated crash case due to build_vector implicit
|
|
; truncation bug from constant folding after legalization.
|
|
;
|
|
|
|
@G = external global i32
|
|
|
|
define void @bv_crash_test() {
|
|
%I = insertelement <4 x i64> zeroinitializer, i64 15910, i32 0
|
|
%Tr = trunc <4 x i64> %I to <4 x i8>
|
|
%Bc = bitcast <4 x i8> %Tr to i32
|
|
store volatile i32 %Bc, i32* @G
|
|
ret void
|
|
}
|