Skip to content

Commit 2fdf283

Browse files
committed
[X86] constant-pool-sharing.ll - add test showing failure to reuse subvectors when storing larger vector types
We do correctly use implicit zero-extension of xmm constant load -> ymm constant store though.
1 parent 23e1b61 commit 2fdf283

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

llvm/test/CodeGen/X86/constant-pool-sharing.ll

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,66 @@ loop:
7171
ret:
7272
ret void
7373
}
74+
75+
define void @store_repeated_constants(ptr %lo, ptr %hi) {
76+
; SSE-LINUX-LABEL: store_repeated_constants:
77+
; SSE-LINUX: # %bb.0:
78+
; SSE-LINUX-NEXT: xorps %xmm0, %xmm0
79+
; SSE-LINUX-NEXT: movaps %xmm0, 48(%rdi)
80+
; SSE-LINUX-NEXT: movaps {{.*#+}} xmm1 = [18446744073709551615,0]
81+
; SSE-LINUX-NEXT: movaps %xmm1, 32(%rdi)
82+
; SSE-LINUX-NEXT: movaps %xmm1, 16(%rdi)
83+
; SSE-LINUX-NEXT: movaps %xmm1, (%rdi)
84+
; SSE-LINUX-NEXT: movaps %xmm0, 32(%rsi)
85+
; SSE-LINUX-NEXT: movaps %xmm0, 48(%rsi)
86+
; SSE-LINUX-NEXT: movaps %xmm1, (%rsi)
87+
; SSE-LINUX-NEXT: movaps {{.*#+}} xmm0 = [0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255]
88+
; SSE-LINUX-NEXT: movaps %xmm0, 16(%rsi)
89+
; SSE-LINUX-NEXT: retq
90+
;
91+
; SSE-MSVC-LABEL: store_repeated_constants:
92+
; SSE-MSVC: # %bb.0:
93+
; SSE-MSVC-NEXT: xorps %xmm0, %xmm0
94+
; SSE-MSVC-NEXT: movaps %xmm0, 48(%rcx)
95+
; SSE-MSVC-NEXT: movaps {{.*#+}} xmm1 = [18446744073709551615,0]
96+
; SSE-MSVC-NEXT: movaps %xmm1, 32(%rcx)
97+
; SSE-MSVC-NEXT: movaps %xmm1, 16(%rcx)
98+
; SSE-MSVC-NEXT: movaps %xmm1, (%rcx)
99+
; SSE-MSVC-NEXT: movaps %xmm0, 32(%rdx)
100+
; SSE-MSVC-NEXT: movaps %xmm0, 48(%rdx)
101+
; SSE-MSVC-NEXT: movaps %xmm1, (%rdx)
102+
; SSE-MSVC-NEXT: movaps {{.*#+}} xmm0 = [0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255]
103+
; SSE-MSVC-NEXT: movaps %xmm0, 16(%rdx)
104+
; SSE-MSVC-NEXT: retq
105+
;
106+
; AVX-LINUX-LABEL: store_repeated_constants:
107+
; AVX-LINUX: # %bb.0:
108+
; AVX-LINUX-NEXT: vbroadcastf128 {{.*#+}} ymm0 = [18446744073709551615,0,18446744073709551615,0]
109+
; AVX-LINUX-NEXT: # ymm0 = mem[0,1,0,1]
110+
; AVX-LINUX-NEXT: vmovaps %ymm0, (%rdi)
111+
; AVX-LINUX-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,0]
112+
; AVX-LINUX-NEXT: vmovaps %ymm0, 32(%rdi)
113+
; AVX-LINUX-NEXT: vxorps %xmm0, %xmm0, %xmm0
114+
; AVX-LINUX-NEXT: vmovaps %ymm0, 32(%rsi)
115+
; AVX-LINUX-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,0,0,18446744073709551615]
116+
; AVX-LINUX-NEXT: vmovaps %ymm0, (%rsi)
117+
; AVX-LINUX-NEXT: vzeroupper
118+
; AVX-LINUX-NEXT: retq
119+
;
120+
; AVX-MSVC-LABEL: store_repeated_constants:
121+
; AVX-MSVC: # %bb.0:
122+
; AVX-MSVC-NEXT: vbroadcastf128 {{.*#+}} ymm0 = [18446744073709551615,0,18446744073709551615,0]
123+
; AVX-MSVC-NEXT: # ymm0 = mem[0,1,0,1]
124+
; AVX-MSVC-NEXT: vmovaps %ymm0, (%rcx)
125+
; AVX-MSVC-NEXT: vmovaps {{.*#+}} xmm0 = [18446744073709551615,0]
126+
; AVX-MSVC-NEXT: vmovaps %ymm0, 32(%rcx)
127+
; AVX-MSVC-NEXT: vxorps %xmm0, %xmm0, %xmm0
128+
; AVX-MSVC-NEXT: vmovaps %ymm0, 32(%rdx)
129+
; AVX-MSVC-NEXT: vmovaps {{.*#+}} ymm0 = [18446744073709551615,0,0,18446744073709551615]
130+
; AVX-MSVC-NEXT: vmovaps %ymm0, (%rdx)
131+
; AVX-MSVC-NEXT: vzeroupper
132+
; AVX-MSVC-NEXT: retq
133+
store volatile <8 x i64> <i64 -1, i64 0, i64 -1, i64 0, i64 -1, i64 0, i64 0, i64 0>, ptr %lo, align 64
134+
store volatile <8 x i64> <i64 -1, i64 0, i64 0, i64 -1, i64 0, i64 0, i64 0, i64 0>, ptr %hi, align 64
135+
ret void
136+
}

0 commit comments

Comments
 (0)