https://llvm.org/bugs/show_bug.cgi?id=29124
Bug ID: 29124
Summary: [InstCombine] reduce insertelements of constants to
shufflevector
Product: libraries
Version: trunk
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P
Component: Scalar Optimizations
Assignee: [email protected]
Reporter: [email protected]
CC: [email protected]
Classification: Unclassified
If we're inserting more than one constant into a vector:
define <4 x float> @foo(<4 x float> %x) {
%ins1 = insertelement <4 x float> %x, float 1.0, i32 1
%ins2 = insertelement <4 x float> %ins1, float 2.0, i32 2
ret <4 x float> %ins2
}
InstCombine could reduce that to a shufflevector:
define <4 x float> @goo(<4 x float> %x) {
%shuf = shufflevector <4 x float> %x, <4 x float> <float undef, float 1.0,
float 2.0, float undef>, <4 x i32><i32 0, i32 5, i32 6, i32 3>
ret <4 x float> %shuf
}
This can improve codegen (possibly a separate bug that the backend doesn't do
this too?):
$ ./llc -o - min.ll -mattr=avx
LCPI0_0:
.long 1065353216 ## float 1
LCPI0_1:
.long 1073741824 ## float 2
## BB#0:
vinsertps $16, LCPI0_0(%rip), %xmm0, %xmm0
vinsertps $32, LCPI0_1(%rip), %xmm0, %xmm0
retq
LCPI1_0:
.space 4
.long 1065353216 ## float 1
.long 1073741824 ## float 2
.space 4
## BB#0:
vblendps $6, LCPI1_0(%rip), %xmm0, %xmm0
retq
--
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
llvm-bugs mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs