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