| ; 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 |
| } |