aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2010-08-28 01:50:57 +0000
committerChris Lattner <sabre@nondot.org>2010-08-28 01:50:57 +0000
commit790077954384a4546fa68247744104936fd9b6cf (patch)
treee4f0468292791a54fcb33cdcf1c6d38f8e5c1773 /lib/Target
parent75ebbceeeda1e7a78efe1848bb90e034f0c6ba61 (diff)
downloadexternal_llvm-790077954384a4546fa68247744104936fd9b6cf.zip
external_llvm-790077954384a4546fa68247744104936fd9b6cf.tar.gz
external_llvm-790077954384a4546fa68247744104936fd9b6cf.tar.bz2
handle the constant case of vector insertion. For something
like this: struct S { float A, B, C, D; }; struct S g; struct S bar() { struct S A = g; ++A.B; A.A = 42; return A; } we now generate: _bar: ## @bar ## BB#0: ## %entry movq _g@GOTPCREL(%rip), %rax movss 12(%rax), %xmm0 pshufd $16, %xmm0, %xmm0 movss 4(%rax), %xmm2 movss 8(%rax), %xmm1 pshufd $16, %xmm1, %xmm1 unpcklps %xmm0, %xmm1 addss LCPI1_0(%rip), %xmm2 pshufd $16, %xmm2, %xmm2 movss LCPI1_1(%rip), %xmm0 pshufd $16, %xmm0, %xmm0 unpcklps %xmm2, %xmm0 ret instead of: _bar: ## @bar ## BB#0: ## %entry movq _g@GOTPCREL(%rip), %rax movss 12(%rax), %xmm0 pshufd $16, %xmm0, %xmm0 movss 4(%rax), %xmm2 movss 8(%rax), %xmm1 pshufd $16, %xmm1, %xmm1 unpcklps %xmm0, %xmm1 addss LCPI1_0(%rip), %xmm2 movd %xmm2, %eax shlq $32, %rax addq $1109917696, %rax ## imm = 0x42280000 movd %rax, %xmm0 ret git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112345 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target')
0 files changed, 0 insertions, 0 deletions