xref: /aosp_15_r20/external/llvm/test/CodeGen/X86/pr18846.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -O3 -disable-peephole -mcpu=corei7-avx -mattr=+avx < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
4*9880d681SAndroid Build Coastguard Workertarget triple = "x86_64-unknown-unknown"
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Worker; pr18846 - needless avx spill/reload
7*9880d681SAndroid Build Coastguard Worker; Test for unnecessary repeated spills due to eliminateRedundantSpills failing
8*9880d681SAndroid Build Coastguard Worker; to recognise unaligned ymm load/stores to the stack.
9*9880d681SAndroid Build Coastguard Worker; Bugpoint reduced testcase.
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: _Z16opt_kernel_cachePfS_S_
12*9880d681SAndroid Build Coastguard Worker;CHECK-NOT:   vmovups {{.*#+}} 32-byte Folded Spill
13*9880d681SAndroid Build Coastguard Worker;CHECK-NOT:   vmovups {{.*#+}} 32-byte Folded Reload
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker; Function Attrs: uwtable
16*9880d681SAndroid Build Coastguard Workerdefine void @_Z16opt_kernel_cachePfS_S_() #0 {
17*9880d681SAndroid Build Coastguard Workerentry:
18*9880d681SAndroid Build Coastguard Worker  br label %for.body29
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerfor.body29:                                       ; preds = %for.body29, %entry
21*9880d681SAndroid Build Coastguard Worker  br i1 undef, label %for.body29, label %for.body65
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerfor.body65:                                       ; preds = %for.body29
24*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* undef, align 4, !tbaa !1
25*9880d681SAndroid Build Coastguard Worker  %vecinit7.i4448 = insertelement <8 x float> undef, float %0, i32 7
26*9880d681SAndroid Build Coastguard Worker  %1 = load float, float* null, align 4, !tbaa !1
27*9880d681SAndroid Build Coastguard Worker  %vecinit7.i4304 = insertelement <8 x float> undef, float %1, i32 7
28*9880d681SAndroid Build Coastguard Worker  %2 = load float, float* undef, align 4, !tbaa !1
29*9880d681SAndroid Build Coastguard Worker  %vecinit7.i4196 = insertelement <8 x float> undef, float %2, i32 7
30*9880d681SAndroid Build Coastguard Worker  %3 = or i64 0, 16
31*9880d681SAndroid Build Coastguard Worker  %add.ptr111.sum4096 = add i64 %3, 0
32*9880d681SAndroid Build Coastguard Worker  %4 = load <8 x float>, <8 x float>* null, align 16, !tbaa !5
33*9880d681SAndroid Build Coastguard Worker  %add.ptr162 = getelementptr inbounds [65536 x float], [65536 x float]* null, i64 0, i64 %add.ptr111.sum4096
34*9880d681SAndroid Build Coastguard Worker  %__v.i4158 = bitcast float* %add.ptr162 to <8 x float>*
35*9880d681SAndroid Build Coastguard Worker  %5 = load <8 x float>, <8 x float>* %__v.i4158, align 16, !tbaa !5
36*9880d681SAndroid Build Coastguard Worker  %add.ptr158.sum40975066 = or i64 %add.ptr111.sum4096, 8
37*9880d681SAndroid Build Coastguard Worker  %add.ptr183 = getelementptr inbounds [65536 x float], [65536 x float]* null, i64 0, i64 %add.ptr158.sum40975066
38*9880d681SAndroid Build Coastguard Worker  %__v.i4162 = bitcast float* %add.ptr183 to <8 x float>*
39*9880d681SAndroid Build Coastguard Worker  %6 = load <8 x float>, <8 x float>* %__v.i4162, align 16, !tbaa !5
40*9880d681SAndroid Build Coastguard Worker  %add.ptr200.sum40995067 = or i64 undef, 8
41*9880d681SAndroid Build Coastguard Worker  %add.ptr225 = getelementptr inbounds [65536 x float], [65536 x float]* null, i64 0, i64 %add.ptr200.sum40995067
42*9880d681SAndroid Build Coastguard Worker  %__v.i4167 = bitcast float* %add.ptr225 to <8 x float>*
43*9880d681SAndroid Build Coastguard Worker  %7 = load <8 x float>, <8 x float>* %__v.i4167, align 4, !tbaa !5
44*9880d681SAndroid Build Coastguard Worker  %8 = load <8 x float>, <8 x float>* undef, align 16, !tbaa !5
45*9880d681SAndroid Build Coastguard Worker  %add.ptr242.sum41015068 = or i64 0, 8
46*9880d681SAndroid Build Coastguard Worker  %add.ptr267 = getelementptr inbounds [65536 x float], [65536 x float]* null, i64 0, i64 %add.ptr242.sum41015068
47*9880d681SAndroid Build Coastguard Worker  %__v.i4171 = bitcast float* %add.ptr267 to <8 x float>*
48*9880d681SAndroid Build Coastguard Worker  %9 = load <8 x float>, <8 x float>* %__v.i4171, align 4, !tbaa !5
49*9880d681SAndroid Build Coastguard Worker  %mul.i4690 = fmul <8 x float> %7, undef
50*9880d681SAndroid Build Coastguard Worker  %add.i4665 = fadd <8 x float> undef, undef
51*9880d681SAndroid Build Coastguard Worker  %mul.i4616 = fmul <8 x float> %8, undef
52*9880d681SAndroid Build Coastguard Worker  %mul.i4598 = fmul <8 x float> undef, undef
53*9880d681SAndroid Build Coastguard Worker  %add.i4597 = fadd <8 x float> undef, %mul.i4598
54*9880d681SAndroid Build Coastguard Worker  %mul.i4594 = fmul <8 x float> %6, undef
55*9880d681SAndroid Build Coastguard Worker  %add.i4593 = fadd <8 x float> undef, %mul.i4594
56*9880d681SAndroid Build Coastguard Worker  %mul.i4578 = fmul <8 x float> %9, undef
57*9880d681SAndroid Build Coastguard Worker  %add.i4577 = fadd <8 x float> %add.i4593, %mul.i4578
58*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4577) #1
59*9880d681SAndroid Build Coastguard Worker  %10 = load <8 x float>, <8 x float>* null, align 16, !tbaa !5
60*9880d681SAndroid Build Coastguard Worker  %11 = load <8 x float>, <8 x float>* undef, align 16, !tbaa !5
61*9880d681SAndroid Build Coastguard Worker  %mul.i4564 = fmul <8 x float> %4, undef
62*9880d681SAndroid Build Coastguard Worker  %add.i4563 = fadd <8 x float> %10, %mul.i4564
63*9880d681SAndroid Build Coastguard Worker  %mul.i4560 = fmul <8 x float> %5, undef
64*9880d681SAndroid Build Coastguard Worker  %add.i4559 = fadd <8 x float> %11, %mul.i4560
65*9880d681SAndroid Build Coastguard Worker  %add.i4547 = fadd <8 x float> %add.i4563, undef
66*9880d681SAndroid Build Coastguard Worker  %mul.i4546 = fmul <8 x float> %7, undef
67*9880d681SAndroid Build Coastguard Worker  %add.i4545 = fadd <8 x float> undef, %mul.i4546
68*9880d681SAndroid Build Coastguard Worker  %mul.i4544 = fmul <8 x float> %8, undef
69*9880d681SAndroid Build Coastguard Worker  %add.i4543 = fadd <8 x float> %add.i4559, %mul.i4544
70*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4547) #1
71*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4545) #1
72*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4543) #1
73*9880d681SAndroid Build Coastguard Worker  %add.i4455 = fadd <8 x float> undef, undef
74*9880d681SAndroid Build Coastguard Worker  %mul.i4454 = fmul <8 x float> undef, undef
75*9880d681SAndroid Build Coastguard Worker  %add.i4453 = fadd <8 x float> undef, %mul.i4454
76*9880d681SAndroid Build Coastguard Worker  %mul.i4440 = fmul <8 x float> zeroinitializer, %vecinit7.i4448
77*9880d681SAndroid Build Coastguard Worker  %add.i4439 = fadd <8 x float> %add.i4455, %mul.i4440
78*9880d681SAndroid Build Coastguard Worker  %mul.i4438 = fmul <8 x float> %7, %vecinit7.i4448
79*9880d681SAndroid Build Coastguard Worker  %add.i4437 = fadd <8 x float> %add.i4453, %mul.i4438
80*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4439) #1
81*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4437) #1
82*9880d681SAndroid Build Coastguard Worker  %add.i4413 = fadd <8 x float> zeroinitializer, undef
83*9880d681SAndroid Build Coastguard Worker  %mul.i4400 = fmul <8 x float> %8, undef
84*9880d681SAndroid Build Coastguard Worker  %add.i4399 = fadd <8 x float> undef, %mul.i4400
85*9880d681SAndroid Build Coastguard Worker  %add.i4397 = fadd <8 x float> %add.i4413, zeroinitializer
86*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> zeroinitializer) #1
87*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4399) #1
88*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4397) #1
89*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> undef) #1
90*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> undef) #1
91*9880d681SAndroid Build Coastguard Worker  %mul.i4330 = fmul <8 x float> %7, undef
92*9880d681SAndroid Build Coastguard Worker  %add.i4329 = fadd <8 x float> undef, %mul.i4330
93*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4329) #1
94*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> undef) #1
95*9880d681SAndroid Build Coastguard Worker  %mul.i4312 = fmul <8 x float> %4, undef
96*9880d681SAndroid Build Coastguard Worker  %add.i4311 = fadd <8 x float> undef, %mul.i4312
97*9880d681SAndroid Build Coastguard Worker  %mul.i4306 = fmul <8 x float> %6, undef
98*9880d681SAndroid Build Coastguard Worker  %add.i4305 = fadd <8 x float> undef, %mul.i4306
99*9880d681SAndroid Build Coastguard Worker  %add.i4295 = fadd <8 x float> %add.i4311, undef
100*9880d681SAndroid Build Coastguard Worker  %mul.i4294 = fmul <8 x float> %7, %vecinit7.i4304
101*9880d681SAndroid Build Coastguard Worker  %add.i4293 = fadd <8 x float> undef, %mul.i4294
102*9880d681SAndroid Build Coastguard Worker  %mul.i4292 = fmul <8 x float> %8, %vecinit7.i4304
103*9880d681SAndroid Build Coastguard Worker  %add.i4291 = fadd <8 x float> undef, %mul.i4292
104*9880d681SAndroid Build Coastguard Worker  %mul.i4290 = fmul <8 x float> %9, %vecinit7.i4304
105*9880d681SAndroid Build Coastguard Worker  %add.i4289 = fadd <8 x float> %add.i4305, %mul.i4290
106*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4295) #1
107*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4293) #1
108*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4291) #1
109*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4289) #1
110*9880d681SAndroid Build Coastguard Worker  %12 = load <8 x float>, <8 x float>* undef, align 16, !tbaa !5
111*9880d681SAndroid Build Coastguard Worker  %mul.i4274 = fmul <8 x float> undef, undef
112*9880d681SAndroid Build Coastguard Worker  %add.i4273 = fadd <8 x float> %12, %mul.i4274
113*9880d681SAndroid Build Coastguard Worker  %mul.i4258 = fmul <8 x float> %7, undef
114*9880d681SAndroid Build Coastguard Worker  %add.i4257 = fadd <8 x float> %add.i4273, %mul.i4258
115*9880d681SAndroid Build Coastguard Worker  %mul.i4254 = fmul <8 x float> %9, undef
116*9880d681SAndroid Build Coastguard Worker  %add.i4253 = fadd <8 x float> undef, %mul.i4254
117*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4257) #1
118*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i4253) #1
119*9880d681SAndroid Build Coastguard Worker  %mul.i = fmul <8 x float> %9, %vecinit7.i4196
120*9880d681SAndroid Build Coastguard Worker  %add.i = fadd <8 x float> undef, %mul.i
121*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> zeroinitializer) #1
122*9880d681SAndroid Build Coastguard Worker  call void @llvm.x86.avx.storeu.ps.256(i8* undef, <8 x float> %add.i) #1
123*9880d681SAndroid Build Coastguard Worker  unreachable
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Worker; Function Attrs: nounwind
127*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.x86.avx.storeu.ps.256(i8*, <8 x float>) #1
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Workerattributes #0 = { uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
130*9880d681SAndroid Build Coastguard Workerattributes #1 = { nounwind }
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Worker!llvm.ident = !{!0}
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Worker!0 = !{!"clang version 3.5 "}
135*9880d681SAndroid Build Coastguard Worker!1 = !{!2, !2, i64 0}
136*9880d681SAndroid Build Coastguard Worker!2 = !{!"float", !3, i64 0}
137*9880d681SAndroid Build Coastguard Worker!3 = !{!"omnipotent char", !4, i64 0}
138*9880d681SAndroid Build Coastguard Worker!4 = !{!"Simple C/C++ TBAA"}
139*9880d681SAndroid Build Coastguard Worker!5 = !{!3, !3, i64 0}
140