blob: 79aba19ab02e1c524c12b3d832c8c90cc5045026 [file] [log] [blame]
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux -mcpu=cascadelake < %s | FileCheck %s
@solid_ = external global [608 x i8]
define void @test(ptr noalias %0) {
; CHECK-LABEL: define void @test(
; CHECK-SAME: ptr noalias [[TMP0:%.*]]) #[[ATTR0:[0-9]+]] {
; CHECK-NEXT: [[_LR_PH1019:.*:]]
; CHECK-NEXT: [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i64 8
; CHECK-NEXT: [[TMP2:%.*]] = getelementptr i8, ptr [[TMP0]], i64 32
; CHECK-NEXT: [[TMP3:%.*]] = getelementptr i8, ptr [[TMP0]], i64 128
; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i64 200
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i64 208
; CHECK-NEXT: [[TMP6:%.*]] = getelementptr i8, ptr [[TMP0]], i64 232
; CHECK-NEXT: [[TMP7:%.*]] = getelementptr i8, ptr [[TMP0]], i64 288
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr [[TMP0]], i64 320
; CHECK-NEXT: [[TMP9:%.*]] = getelementptr i8, ptr [[TMP0]], i64 304
; CHECK-NEXT: [[TMP10:%.*]] = getelementptr i8, ptr [[TMP0]], i64 424
; CHECK-NEXT: [[TMP11:%.*]] = getelementptr i8, ptr [[TMP0]], i64 480
; CHECK-NEXT: [[TMP12:%.*]] = getelementptr i8, ptr [[TMP0]], i64 504
; CHECK-NEXT: [[TMP13:%.*]] = getelementptr i8, ptr [[TMP0]], i64 632
; CHECK-NEXT: [[TMP14:%.*]] = getelementptr i8, ptr [[TMP0]], i64 720
; CHECK-NEXT: [[TMP15:%.*]] = load double, ptr [[TMP1]], align 8
; CHECK-NEXT: [[TMP16:%.*]] = load double, ptr [[TMP2]], align 8
; CHECK-NEXT: [[TMP17:%.*]] = fadd double [[TMP16]], [[TMP15]]
; CHECK-NEXT: [[TMP18:%.*]] = load double, ptr [[TMP3]], align 8
; CHECK-NEXT: [[TMP19:%.*]] = load double, ptr [[TMP4]], align 8
; CHECK-NEXT: [[TMP20:%.*]] = load double, ptr [[TMP5]], align 8
; CHECK-NEXT: [[TMP21:%.*]] = load double, ptr [[TMP6]], align 8
; CHECK-NEXT: [[TMP22:%.*]] = fadd double [[TMP21]], [[TMP20]]
; CHECK-NEXT: [[TMP23:%.*]] = load double, ptr [[TMP7]], align 8
; CHECK-NEXT: [[TMP24:%.*]] = load double, ptr [[TMP8]], align 8
; CHECK-NEXT: [[TMP25:%.*]] = load double, ptr [[TMP9]], align 8
; CHECK-NEXT: [[TMP26:%.*]] = load double, ptr [[TMP10]], align 8
; CHECK-NEXT: [[TMP27:%.*]] = load double, ptr [[TMP11]], align 8
; CHECK-NEXT: [[TMP28:%.*]] = load double, ptr [[TMP12]], align 8
; CHECK-NEXT: [[TMP29:%.*]] = fadd double [[TMP28]], [[TMP27]]
; CHECK-NEXT: [[TMP30:%.*]] = fmul double [[TMP22]], [[TMP18]]
; CHECK-NEXT: [[TMP31:%.*]] = fmul double [[TMP30]], 0.000000e+00
; CHECK-NEXT: [[TMP32:%.*]] = fsub double 0.000000e+00, [[TMP25]]
; CHECK-NEXT: [[TMP33:%.*]] = fmul double [[TMP32]], 0.000000e+00
; CHECK-NEXT: [[TMP34:%.*]] = fadd double [[TMP33]], 0.000000e+00
; CHECK-NEXT: [[TMP35:%.*]] = fmul double [[TMP34]], 0.000000e+00
; CHECK-NEXT: [[TMP36:%.*]] = fmul double [[TMP29]], [[TMP26]]
; CHECK-NEXT: [[TMP37:%.*]] = fmul double [[TMP36]], 0.000000e+00
; CHECK-NEXT: [[TMP38:%.*]] = fadd double [[TMP37]], 0.000000e+00
; CHECK-NEXT: [[TMP39:%.*]] = fsub double [[TMP17]], [[TMP19]]
; CHECK-NEXT: [[TMP40:%.*]] = fmul double [[TMP39]], [[TMP23]]
; CHECK-NEXT: [[TMP41:%.*]] = fmul double [[TMP40]], 0.000000e+00
; CHECK-NEXT: [[TMP42:%.*]] = load double, ptr [[TMP0]], align 8
; CHECK-NEXT: [[TMP43:%.*]] = load double, ptr [[TMP13]], align 8
; CHECK-NEXT: [[TMP44:%.*]] = fmul double [[TMP43]], [[TMP31]]
; CHECK-NEXT: [[TMP45:%.*]] = load double, ptr [[TMP14]], align 8
; CHECK-NEXT: [[TMP46:%.*]] = fmul double [[TMP35]], 0.000000e+00
; CHECK-NEXT: [[TMP47:%.*]] = fadd double [[TMP44]], 0.000000e+00
; CHECK-NEXT: [[TMP48:%.*]] = fmul double [[TMP45]], [[TMP38]]
; CHECK-NEXT: [[TMP49:%.*]] = fmul double [[TMP45]], [[TMP41]]
; CHECK-NEXT: store double [[TMP46]], ptr getelementptr inbounds (i8, ptr @solid_, i64 384), align 8
; CHECK-NEXT: store double [[TMP47]], ptr getelementptr inbounds (i8, ptr @solid_, i64 408), align 8
; CHECK-NEXT: store double [[TMP48]], ptr getelementptr inbounds (i8, ptr @solid_, i64 392), align 8
; CHECK-NEXT: store double [[TMP49]], ptr getelementptr inbounds (i8, ptr @solid_, i64 400), align 8
; CHECK-NEXT: [[DOTNEG965:%.*]] = fmul double [[TMP48]], [[TMP24]]
; CHECK-NEXT: [[REASS_ADD993:%.*]] = fadd double [[DOTNEG965]], 0.000000e+00
; CHECK-NEXT: [[TMP50:%.*]] = fadd double [[TMP42]], [[REASS_ADD993]]
; CHECK-NEXT: [[TMP51:%.*]] = fsub double 0.000000e+00, [[TMP50]]
; CHECK-NEXT: store double [[TMP51]], ptr getelementptr inbounds (i8, ptr @solid_, i64 296), align 8
; CHECK-NEXT: [[DOTNEG969:%.*]] = fmul double [[TMP49]], 0.000000e+00
; CHECK-NEXT: [[REASS_ADD996:%.*]] = fadd double [[DOTNEG969]], 0.000000e+00
; CHECK-NEXT: [[TMP52:%.*]] = fadd double [[TMP45]], [[REASS_ADD996]]
; CHECK-NEXT: [[TMP53:%.*]] = fsub double 0.000000e+00, [[TMP52]]
; CHECK-NEXT: store double [[TMP53]], ptr getelementptr inbounds (i8, ptr @solid_, i64 304), align 8
; CHECK-NEXT: ret void
;
.lr.ph1019:
%1 = getelementptr i8, ptr %0, i64 8
%2 = getelementptr i8, ptr %0, i64 32
%3 = getelementptr i8, ptr %0, i64 128
%4 = getelementptr i8, ptr %0, i64 200
%5 = getelementptr i8, ptr %0, i64 208
%6 = getelementptr i8, ptr %0, i64 232
%7 = getelementptr i8, ptr %0, i64 288
%8 = getelementptr i8, ptr %0, i64 320
%9 = getelementptr i8, ptr %0, i64 304
%10 = getelementptr i8, ptr %0, i64 424
%11 = getelementptr i8, ptr %0, i64 480
%12 = getelementptr i8, ptr %0, i64 504
%13 = getelementptr i8, ptr %0, i64 632
%14 = getelementptr i8, ptr %0, i64 720
%15 = load double, ptr %1, align 8
%16 = load double, ptr %2, align 8
%17 = fadd double %16, %15
%18 = load double, ptr %3, align 8
%19 = load double, ptr %4, align 8
%20 = load double, ptr %5, align 8
%21 = load double, ptr %6, align 8
%22 = fadd double %21, %20
%23 = load double, ptr %7, align 8
%24 = load double, ptr %8, align 8
%25 = load double, ptr %9, align 8
%26 = load double, ptr %10, align 8
%27 = load double, ptr %11, align 8
%28 = load double, ptr %12, align 8
%29 = fadd double %28, %27
%30 = fmul double %22, %18
%31 = fmul double %30, 0.000000e+00
%32 = fsub double 0.000000e+00, %25
%33 = fmul double %32, 0.000000e+00
%34 = fadd double %33, 0.000000e+00
%35 = fmul double %34, 0.000000e+00
%36 = fmul double %29, %26
%37 = fmul double %36, 0.000000e+00
%38 = fadd double %37, 0.000000e+00
%39 = fsub double %17, %19
%40 = fmul double %39, %23
%41 = fmul double %40, 0.000000e+00
%42 = load double, ptr %0, align 8
%43 = load double, ptr %13, align 8
%44 = fmul double %43, %31
%45 = load double, ptr %14, align 8
%46 = fmul double %35, 0.000000e+00
%47 = fadd double %44, 0.000000e+00
%48 = fmul double %45, %38
%49 = fmul double %45, %41
store double %46, ptr getelementptr inbounds (i8, ptr @solid_, i64 384), align 8
store double %47, ptr getelementptr inbounds (i8, ptr @solid_, i64 408), align 8
store double %48, ptr getelementptr inbounds (i8, ptr @solid_, i64 392), align 8
store double %49, ptr getelementptr inbounds (i8, ptr @solid_, i64 400), align 8
%.neg965 = fmul double %48, %24
%reass.add993 = fadd double %.neg965, 0.000000e+00
%50 = fadd double %42, %reass.add993
%51 = fsub double 0.000000e+00, %50
store double %51, ptr getelementptr inbounds (i8, ptr @solid_, i64 296), align 8
%.neg969 = fmul double %49, 0.000000e+00
%reass.add996 = fadd double %.neg969, 0.000000e+00
%52 = fadd double %45, %reass.add996
%53 = fsub double 0.000000e+00, %52
store double %53, ptr getelementptr inbounds (i8, ptr @solid_, i64 304), align 8
ret void
}