1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
; 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
}
|