blob: 2e684320ba10e2d693e2f1b7b28c894004c2e57b [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=aarch64-unknown-linux-gnu < %s | FileCheck %s
define void @test() {
; CHECK-LABEL: define void @test() {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: br label %[[BB61:.*]]
; CHECK: [[BB61]]:
; CHECK-NEXT: br label %[[BB64:.*]]
; CHECK: [[BB62:.*]]:
; CHECK-NEXT: br i1 poison, label %[[BB63:.*]], label %[[BB64]]
; CHECK: [[BB63]]:
; CHECK-NEXT: br label %[[BB64]]
; CHECK: [[BB64]]:
; CHECK-NEXT: [[I65:%.*]] = phi nsz float [ poison, %[[BB61]] ], [ poison, %[[BB63]] ], [ poison, %[[BB62]] ]
; CHECK-NEXT: [[I77:%.*]] = phi nsz float [ poison, %[[BB61]] ], [ poison, %[[BB63]] ], [ poison, %[[BB62]] ]
; CHECK-NEXT: [[I66:%.*]] = load float, ptr poison, align 16
; CHECK-NEXT: [[I67:%.*]] = load float, ptr poison, align 4
; CHECK-NEXT: [[I68:%.*]] = load float, ptr poison, align 8
; CHECK-NEXT: [[I69:%.*]] = load float, ptr poison, align 4
; CHECK-NEXT: [[I70:%.*]] = load float, ptr poison, align 4
; CHECK-NEXT: [[I71:%.*]] = load float, ptr poison, align 16
; CHECK-NEXT: [[I72:%.*]] = load float, ptr poison, align 4
; CHECK-NEXT: [[I73:%.*]] = load float, ptr poison, align 8
; CHECK-NEXT: [[I74:%.*]] = load float, ptr poison, align 4
; CHECK-NEXT: [[I75:%.*]] = load float, ptr poison, align 16
; CHECK-NEXT: [[I76:%.*]] = load float, ptr poison, align 4
; CHECK-NEXT: br i1 poison, label %[[BB167:.*]], label %[[BB77:.*]]
; CHECK: [[BB77]]:
; CHECK-NEXT: br label %[[BB78:.*]]
; CHECK: [[BB78]]:
; CHECK-NEXT: [[I85:%.*]] = phi nsz float [ [[I66]], %[[BB77]] ], [ [[I103:%.*]], %[[BB78]] ]
; CHECK-NEXT: [[I80:%.*]] = phi nsz float [ [[I67]], %[[BB77]] ], [ [[I104:%.*]], %[[BB78]] ]
; CHECK-NEXT: [[I81:%.*]] = phi nsz float [ [[I68]], %[[BB77]] ], [ [[I105:%.*]], %[[BB78]] ]
; CHECK-NEXT: [[I82:%.*]] = phi nsz float [ poison, %[[BB77]] ], [ [[I106:%.*]], %[[BB78]] ]
; CHECK-NEXT: [[I84:%.*]] = phi nsz float [ poison, %[[BB77]] ], [ [[I123:%.*]], %[[BB78]] ]
; CHECK-NEXT: [[I127:%.*]] = phi nsz float [ [[I69]], %[[BB77]] ], [ [[I124:%.*]], %[[BB78]] ]
; CHECK-NEXT: [[I131:%.*]] = phi nsz float [ poison, %[[BB77]] ], [ [[I125:%.*]], %[[BB78]] ]
; CHECK-NEXT: [[I86:%.*]] = phi nsz float [ [[I70]], %[[BB77]] ], [ [[I126:%.*]], %[[BB78]] ]
; CHECK-NEXT: [[I87:%.*]] = fmul fast float [[I85]], poison
; CHECK-NEXT: [[I88:%.*]] = fmul fast float [[I80]], poison
; CHECK-NEXT: [[I89:%.*]] = fmul fast float [[I81]], poison
; CHECK-NEXT: [[I90:%.*]] = fmul fast float [[I82]], poison
; CHECK-NEXT: [[I91:%.*]] = fmul fast float [[I84]], poison
; CHECK-NEXT: [[I92:%.*]] = fadd fast float [[I91]], [[I87]]
; CHECK-NEXT: [[I93:%.*]] = fmul fast float [[I127]], poison
; CHECK-NEXT: [[I94:%.*]] = fadd fast float [[I93]], [[I88]]
; CHECK-NEXT: [[I95:%.*]] = fmul fast float [[I131]], poison
; CHECK-NEXT: [[I96:%.*]] = fadd fast float [[I95]], [[I89]]
; CHECK-NEXT: [[I97:%.*]] = fmul fast float [[I86]], poison
; CHECK-NEXT: [[I98:%.*]] = fadd fast float [[I97]], [[I90]]
; CHECK-NEXT: [[I99:%.*]] = fadd fast float [[I92]], poison
; CHECK-NEXT: [[I100:%.*]] = fadd fast float [[I94]], poison
; CHECK-NEXT: [[I101:%.*]] = fadd fast float [[I96]], poison
; CHECK-NEXT: [[I102:%.*]] = fadd fast float [[I98]], poison
; CHECK-NEXT: [[I103]] = fadd fast float [[I99]], poison
; CHECK-NEXT: [[I104]] = fadd fast float [[I100]], poison
; CHECK-NEXT: [[I105]] = fadd fast float [[I101]], poison
; CHECK-NEXT: [[I106]] = fadd fast float [[I102]], poison
; CHECK-NEXT: [[I107:%.*]] = fmul fast float [[I85]], poison
; CHECK-NEXT: [[I108:%.*]] = fmul fast float [[I80]], poison
; CHECK-NEXT: [[I109:%.*]] = fmul fast float [[I81]], poison
; CHECK-NEXT: [[I110:%.*]] = fmul fast float [[I82]], poison
; CHECK-NEXT: [[I111:%.*]] = fmul fast float [[I84]], poison
; CHECK-NEXT: [[I112:%.*]] = fadd fast float [[I111]], [[I107]]
; CHECK-NEXT: [[I113:%.*]] = fmul fast float [[I127]], poison
; CHECK-NEXT: [[I114:%.*]] = fadd fast float [[I113]], [[I108]]
; CHECK-NEXT: [[I115:%.*]] = fmul fast float [[I131]], poison
; CHECK-NEXT: [[I116:%.*]] = fadd fast float [[I115]], [[I109]]
; CHECK-NEXT: [[I117:%.*]] = fmul fast float [[I86]], poison
; CHECK-NEXT: [[I118:%.*]] = fadd fast float [[I117]], [[I110]]
; CHECK-NEXT: [[I119:%.*]] = fadd fast float [[I112]], poison
; CHECK-NEXT: [[I120:%.*]] = fadd fast float [[I114]], poison
; CHECK-NEXT: [[I121:%.*]] = fadd fast float [[I116]], poison
; CHECK-NEXT: [[I122:%.*]] = fadd fast float [[I118]], poison
; CHECK-NEXT: [[I123]] = fadd fast float [[I119]], poison
; CHECK-NEXT: [[I124]] = fadd fast float [[I120]], poison
; CHECK-NEXT: [[I125]] = fadd fast float [[I121]], poison
; CHECK-NEXT: [[I126]] = fadd fast float [[I122]], poison
; CHECK-NEXT: [[I135:%.*]] = fmul fast float [[I85]], [[I65]]
; CHECK-NEXT: [[I128:%.*]] = fmul fast float [[I80]], [[I65]]
; CHECK-NEXT: [[I129:%.*]] = fmul fast float [[I81]], [[I65]]
; CHECK-NEXT: [[I130:%.*]] = fmul fast float [[I82]], [[I65]]
; CHECK-NEXT: [[I133:%.*]] = fmul fast float [[I84]], [[I77]]
; CHECK-NEXT: [[I134:%.*]] = fadd fast float [[I133]], [[I135]]
; CHECK-NEXT: [[I136:%.*]] = fmul fast float [[I127]], [[I77]]
; CHECK-NEXT: [[TMP51:%.*]] = fadd fast float [[I136]], [[I128]]
; CHECK-NEXT: [[I138:%.*]] = fmul fast float [[I131]], [[I77]]
; CHECK-NEXT: [[TMP52:%.*]] = fadd fast float [[I138]], [[I129]]
; CHECK-NEXT: [[I137:%.*]] = fmul fast float [[I86]], [[I77]]
; CHECK-NEXT: [[I139:%.*]] = fadd fast float [[I137]], [[I130]]
; CHECK-NEXT: [[I140:%.*]] = fadd fast float [[I134]], poison
; CHECK-NEXT: [[I141:%.*]] = fadd fast float [[TMP51]], poison
; CHECK-NEXT: [[I142:%.*]] = fadd fast float [[TMP52]], poison
; CHECK-NEXT: [[I143:%.*]] = fadd fast float [[I139]], poison
; CHECK-NEXT: [[I144:%.*]] = fadd fast float [[I140]], poison
; CHECK-NEXT: [[I145:%.*]] = fadd fast float [[I141]], poison
; CHECK-NEXT: [[I146:%.*]] = fadd fast float [[I142]], poison
; CHECK-NEXT: [[I152:%.*]] = fadd fast float [[I143]], poison
; CHECK-NEXT: [[I147:%.*]] = fmul fast float [[I85]], poison
; CHECK-NEXT: [[I148:%.*]] = fmul fast float [[I80]], poison
; CHECK-NEXT: [[I149:%.*]] = fmul fast float [[I81]], poison
; CHECK-NEXT: [[I150:%.*]] = fmul fast float [[I82]], poison
; CHECK-NEXT: [[I151:%.*]] = fmul fast float [[I84]], poison
; CHECK-NEXT: [[TMP57:%.*]] = fadd fast float [[I151]], [[I147]]
; CHECK-NEXT: [[I153:%.*]] = fmul fast float [[I127]], poison
; CHECK-NEXT: [[TMP58:%.*]] = fadd fast float [[I153]], [[I148]]
; CHECK-NEXT: [[I155:%.*]] = fmul fast float [[I131]], poison
; CHECK-NEXT: [[TMP59:%.*]] = fadd fast float [[I155]], [[I149]]
; CHECK-NEXT: [[I157:%.*]] = fmul fast float [[I86]], poison
; CHECK-NEXT: [[TMP60:%.*]] = fadd fast float [[I157]], [[I150]]
; CHECK-NEXT: [[I159:%.*]] = fadd fast float [[TMP57]], poison
; CHECK-NEXT: [[I160:%.*]] = fadd fast float [[TMP58]], poison
; CHECK-NEXT: [[I161:%.*]] = fadd fast float [[TMP59]], poison
; CHECK-NEXT: [[I162:%.*]] = fadd fast float [[TMP60]], poison
; CHECK-NEXT: [[I163:%.*]] = fadd fast float [[I159]], poison
; CHECK-NEXT: [[I164:%.*]] = fadd fast float [[I160]], poison
; CHECK-NEXT: [[I165:%.*]] = fadd fast float [[I161]], poison
; CHECK-NEXT: [[I166:%.*]] = fadd fast float [[I162]], poison
; CHECK-NEXT: br i1 poison, label %[[BB78]], label %[[BB167]]
; CHECK: [[BB167]]:
; CHECK-NEXT: [[I168:%.*]] = phi nsz float [ [[I76]], %[[BB64]] ], [ [[I166]], %[[BB78]] ]
; CHECK-NEXT: [[I169:%.*]] = phi nsz float [ poison, %[[BB64]] ], [ [[I165]], %[[BB78]] ]
; CHECK-NEXT: [[I170:%.*]] = phi nsz float [ poison, %[[BB64]] ], [ [[I164]], %[[BB78]] ]
; CHECK-NEXT: [[I171:%.*]] = phi nsz float [ [[I75]], %[[BB64]] ], [ [[I163]], %[[BB78]] ]
; CHECK-NEXT: [[I172:%.*]] = phi nsz float [ [[I74]], %[[BB64]] ], [ [[I152]], %[[BB78]] ]
; CHECK-NEXT: [[I173:%.*]] = phi nsz float [ [[I73]], %[[BB64]] ], [ [[I146]], %[[BB78]] ]
; CHECK-NEXT: [[TMP34:%.*]] = phi nsz float [ [[I72]], %[[BB64]] ], [ [[I145]], %[[BB78]] ]
; CHECK-NEXT: [[I175:%.*]] = phi nsz float [ [[I71]], %[[BB64]] ], [ [[I144]], %[[BB78]] ]
; CHECK-NEXT: [[I176:%.*]] = phi nsz float [ [[I70]], %[[BB64]] ], [ [[I126]], %[[BB78]] ]
; CHECK-NEXT: [[I177:%.*]] = phi nsz float [ poison, %[[BB64]] ], [ [[I125]], %[[BB78]] ]
; CHECK-NEXT: [[I178:%.*]] = phi nsz float [ [[I69]], %[[BB64]] ], [ [[I124]], %[[BB78]] ]
; CHECK-NEXT: [[I179:%.*]] = phi nsz float [ poison, %[[BB64]] ], [ [[I123]], %[[BB78]] ]
; CHECK-NEXT: [[I180:%.*]] = phi nsz float [ poison, %[[BB64]] ], [ [[I106]], %[[BB78]] ]
; CHECK-NEXT: [[I181:%.*]] = phi nsz float [ [[I68]], %[[BB64]] ], [ [[I105]], %[[BB78]] ]
; CHECK-NEXT: [[TMP33:%.*]] = phi nsz float [ [[I67]], %[[BB64]] ], [ [[I104]], %[[BB78]] ]
; CHECK-NEXT: [[I183:%.*]] = phi nsz float [ [[I66]], %[[BB64]] ], [ [[I103]], %[[BB78]] ]
; CHECK-NEXT: store float [[TMP33]], ptr poison, align 1
; CHECK-NEXT: store float [[TMP34]], ptr poison, align 1
; CHECK-NEXT: br i1 poison, label %[[BB186:.*]], label %[[BB184:.*]]
; CHECK: [[BB184]]:
; CHECK-NEXT: br label %[[BB185:.*]]
; CHECK: [[BB185]]:
; CHECK-NEXT: br i1 poison, label %[[BB185]], label %[[BB186]]
; CHECK: [[BB186]]:
; CHECK-NEXT: [[I187:%.*]] = phi nsz float [ [[I178]], %[[BB167]] ], [ poison, %[[BB185]] ]
; CHECK-NEXT: ret void
;
entry:
br label %bb61
bb61:
br label %bb64
bb62:
br i1 poison, label %bb63, label %bb64
bb63:
br label %bb64
bb64:
%i = phi nsz float [ poison, %bb61 ], [ poison, %bb63 ], [ poison, %bb62 ]
%i65 = phi nsz float [ poison, %bb61 ], [ poison, %bb63 ], [ poison, %bb62 ]
%i66 = load float, ptr poison, align 16
%i67 = load float, ptr poison, align 4
%i68 = load float, ptr poison, align 8
%i69 = load float, ptr poison, align 4
%i70 = load float, ptr poison, align 4
%i71 = load float, ptr poison, align 16
%i72 = load float, ptr poison, align 4
%i73 = load float, ptr poison, align 8
%i74 = load float, ptr poison, align 4
%i75 = load float, ptr poison, align 16
%i76 = load float, ptr poison, align 4
br i1 poison, label %bb167, label %bb77
bb77:
br label %bb78
bb78:
%i79 = phi nsz float [ %i66, %bb77 ], [ %i103, %bb78 ]
%i80 = phi nsz float [ %i67, %bb77 ], [ %i104, %bb78 ]
%i81 = phi nsz float [ %i68, %bb77 ], [ %i105, %bb78 ]
%i82 = phi nsz float [ poison, %bb77 ], [ %i106, %bb78 ]
%i83 = phi nsz float [ poison, %bb77 ], [ %i123, %bb78 ]
%i84 = phi nsz float [ %i69, %bb77 ], [ %i124, %bb78 ]
%i85 = phi nsz float [ poison, %bb77 ], [ %i125, %bb78 ]
%i86 = phi nsz float [ %i70, %bb77 ], [ %i126, %bb78 ]
%i87 = fmul fast float %i79, poison
%i88 = fmul fast float %i80, poison
%i89 = fmul fast float %i81, poison
%i90 = fmul fast float %i82, poison
%i91 = fmul fast float %i83, poison
%i92 = fadd fast float %i91, %i87
%i93 = fmul fast float %i84, poison
%i94 = fadd fast float %i93, %i88
%i95 = fmul fast float %i85, poison
%i96 = fadd fast float %i95, %i89
%i97 = fmul fast float %i86, poison
%i98 = fadd fast float %i97, %i90
%i99 = fadd fast float %i92, poison
%i100 = fadd fast float %i94, poison
%i101 = fadd fast float %i96, poison
%i102 = fadd fast float %i98, poison
%i103 = fadd fast float %i99, poison
%i104 = fadd fast float %i100, poison
%i105 = fadd fast float %i101, poison
%i106 = fadd fast float %i102, poison
%i107 = fmul fast float %i79, poison
%i108 = fmul fast float %i80, poison
%i109 = fmul fast float %i81, poison
%i110 = fmul fast float %i82, poison
%i111 = fmul fast float %i83, poison
%i112 = fadd fast float %i111, %i107
%i113 = fmul fast float %i84, poison
%i114 = fadd fast float %i113, %i108
%i115 = fmul fast float %i85, poison
%i116 = fadd fast float %i115, %i109
%i117 = fmul fast float %i86, poison
%i118 = fadd fast float %i117, %i110
%i119 = fadd fast float %i112, poison
%i120 = fadd fast float %i114, poison
%i121 = fadd fast float %i116, poison
%i122 = fadd fast float %i118, poison
%i123 = fadd fast float %i119, poison
%i124 = fadd fast float %i120, poison
%i125 = fadd fast float %i121, poison
%i126 = fadd fast float %i122, poison
%i127 = fmul fast float %i79, %i
%i128 = fmul fast float %i80, %i
%i129 = fmul fast float %i81, %i
%i130 = fmul fast float %i82, %i
%i131 = fmul fast float %i83, %i65
%i132 = fadd fast float %i131, %i127
%i133 = fmul fast float %i84, %i65
%i134 = fadd fast float %i133, %i128
%i135 = fmul fast float %i85, %i65
%i136 = fadd fast float %i135, %i129
%i137 = fmul fast float %i86, %i65
%i138 = fadd fast float %i137, %i130
%i139 = fadd fast float %i132, poison
%i140 = fadd fast float %i134, poison
%i141 = fadd fast float %i136, poison
%i142 = fadd fast float %i138, poison
%i143 = fadd fast float %i139, poison
%i144 = fadd fast float %i140, poison
%i145 = fadd fast float %i141, poison
%i146 = fadd fast float %i142, poison
%i147 = fmul fast float %i79, poison
%i148 = fmul fast float %i80, poison
%i149 = fmul fast float %i81, poison
%i150 = fmul fast float %i82, poison
%i151 = fmul fast float %i83, poison
%i152 = fadd fast float %i151, %i147
%i153 = fmul fast float %i84, poison
%i154 = fadd fast float %i153, %i148
%i155 = fmul fast float %i85, poison
%i156 = fadd fast float %i155, %i149
%i157 = fmul fast float %i86, poison
%i158 = fadd fast float %i157, %i150
%i159 = fadd fast float %i152, poison
%i160 = fadd fast float %i154, poison
%i161 = fadd fast float %i156, poison
%i162 = fadd fast float %i158, poison
%i163 = fadd fast float %i159, poison
%i164 = fadd fast float %i160, poison
%i165 = fadd fast float %i161, poison
%i166 = fadd fast float %i162, poison
br i1 poison, label %bb78, label %bb167
bb167:
%i168 = phi nsz float [ %i76, %bb64 ], [ %i166, %bb78 ]
%i169 = phi nsz float [ poison, %bb64 ], [ %i165, %bb78 ]
%i170 = phi nsz float [ poison, %bb64 ], [ %i164, %bb78 ]
%i171 = phi nsz float [ %i75, %bb64 ], [ %i163, %bb78 ]
%i172 = phi nsz float [ %i74, %bb64 ], [ %i146, %bb78 ]
%i173 = phi nsz float [ %i73, %bb64 ], [ %i145, %bb78 ]
%i174 = phi nsz float [ %i72, %bb64 ], [ %i144, %bb78 ]
%i175 = phi nsz float [ %i71, %bb64 ], [ %i143, %bb78 ]
%i176 = phi nsz float [ %i70, %bb64 ], [ %i126, %bb78 ]
%i177 = phi nsz float [ poison, %bb64 ], [ %i125, %bb78 ]
%i178 = phi nsz float [ %i69, %bb64 ], [ %i124, %bb78 ]
%i179 = phi nsz float [ poison, %bb64 ], [ %i123, %bb78 ]
%i180 = phi nsz float [ poison, %bb64 ], [ %i106, %bb78 ]
%i181 = phi nsz float [ %i68, %bb64 ], [ %i105, %bb78 ]
%i182 = phi nsz float [ %i67, %bb64 ], [ %i104, %bb78 ]
%i183 = phi nsz float [ %i66, %bb64 ], [ %i103, %bb78 ]
store float %i182, ptr poison, align 1
store float %i174, ptr poison, align 1
br i1 poison, label %bb186, label %bb184
bb184:
br label %bb185
bb185:
br i1 poison, label %bb185, label %bb186
bb186:
%i187 = phi nsz float [ %i178, %bb167 ], [ poison, %bb185 ]
ret void
}