152 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=slp-vectorizer,verify -slp-threshold=-99999 -mtriple=aarch64-unknown-linux -S -pass-remarks-output=%t | FileCheck %s3; RUN: FileCheck --input-file=%t --check-prefix=YAML %s4 5; YAML-LABEL: --- !Passed6; YAML-NEXT: Pass: slp-vectorizer7; YAML-NEXT: Name: VectorizedList8; YAML-NEXT: Function: foo9; YAML-NEXT: Args:10; YAML-NEXT: - String: 'SLP vectorized with cost '11; YAML-NEXT: - Cost: '2'12; YAML-NEXT: - String: ' and with tree size '13; YAML-NEXT: - TreeSize: '2'14 15; YAML-LABEL: --- !Passed16; YAML-NEXT: Pass: slp-vectorizer17; YAML-NEXT: Name: VectorizedList18; YAML-NEXT: Function: foo19; YAML-NEXT: Args:20; YAML-NEXT: - String: 'SLP vectorized with cost '21; YAML-NEXT: - Cost: '0'22; YAML-NEXT: - String: ' and with tree size '23; YAML-NEXT: - TreeSize: '3'24 25; YAML-LABEL: --- !Passed26; YAML-NEXT: Pass: slp-vectorizer27; YAML-NEXT: Name: VectorizedList28; YAML-NEXT: Function: foo29; YAML-NEXT: Args:30; YAML-NEXT: - String: 'SLP vectorized with cost '31; YAML-NEXT: - Cost: '8'32; YAML-NEXT: - String: ' and with tree size '33; YAML-NEXT: - TreeSize: '5'34 35define void @foo() personality ptr @bar {36; CHECK-LABEL: @foo(37; CHECK-NEXT: bb1:38; CHECK-NEXT: br label [[BB3:%.*]]39; CHECK: bb2.loopexit:40; CHECK-NEXT: br label [[BB2:%.*]]41; CHECK: bb2:42; CHECK-NEXT: [[TMP0:%.*]] = phi <2 x i64> [ poison, [[BB9:%.*]] ], [ poison, [[BB2_LOOPEXIT:%.*]] ]43; CHECK-NEXT: [[TMP1:%.*]] = phi <2 x i64> [ [[TMP7:%.*]], [[BB9]] ], [ poison, [[BB2_LOOPEXIT]] ]44; CHECK-NEXT: ret void45; CHECK: bb3:46; CHECK-NEXT: [[TMP2:%.*]] = phi <2 x i64> [ [[TMP4:%.*]], [[BB6:%.*]] ], [ poison, [[BB1:%.*]] ]47; CHECK-NEXT: [[TMP5:%.*]] = extractelement <2 x i64> [[TMP2]], i32 048; CHECK-NEXT: [[TMP10:%.*]] = extractelement <2 x i64> [[TMP2]], i32 149; CHECK-NEXT: [[TMP3:%.*]] = invoke i64 poison(ptr addrspace(1) nonnull poison, i64 0, i64 0, i64 poison) [ "deopt"() ]50; CHECK-NEXT: to label [[BB4:%.*]] unwind label [[BB10:%.*]]51; CHECK: bb4:52; CHECK-NEXT: br i1 poison, label [[BB11:%.*]], label [[BB5:%.*]]53; CHECK: bb5:54; CHECK-NEXT: br label [[BB7:%.*]]55; CHECK: bb6:56; CHECK-NEXT: [[TMP4]] = phi <2 x i64> [ <i64 0, i64 poison>, [[BB8:%.*]] ]57; CHECK-NEXT: br label [[BB3]]58; CHECK: bb7:59; CHECK-NEXT: [[LOCAL_5_84111:%.*]] = phi i64 [ poison, [[BB8]] ], [ poison, [[BB5]] ]60; CHECK-NEXT: [[TMP6:%.*]] = invoke i64 poison(ptr addrspace(1) nonnull poison, i64 poison, i64 poison, i64 poison) [ "deopt"() ]61; CHECK-NEXT: to label [[BB8]] unwind label [[BB12:%.*]]62; CHECK: bb8:63; CHECK-NEXT: br i1 poison, label [[BB7]], label [[BB6]]64; CHECK: bb9:65; CHECK-NEXT: [[INDVARS_IV528799:%.*]] = phi i64 [ poison, [[BB10]] ], [ poison, [[BB12]] ]66; CHECK-NEXT: [[TMP7]] = phi <2 x i64> [ [[TMP8:%.*]], [[BB10]] ], [ [[TMP9:%.*]], [[BB12]] ]67; CHECK-NEXT: br label [[BB2]]68; CHECK: bb10:69; CHECK-NEXT: [[LOCAL_10_38123_LCSSA:%.*]] = phi i64 [ [[TMP10]], [[BB3]] ]70; CHECK-NEXT: [[LOCAL_5_33118_LCSSA:%.*]] = phi i64 [ [[TMP5]], [[BB3]] ]71; CHECK-NEXT: [[LANDING_PAD68:%.*]] = landingpad { ptr, i64 }72; CHECK-NEXT: cleanup73; CHECK-NEXT: [[TMP12:%.*]] = insertelement <2 x i64> poison, i64 [[LOCAL_10_38123_LCSSA]], i32 074; CHECK-NEXT: [[TMP8]] = insertelement <2 x i64> [[TMP12]], i64 [[LOCAL_5_33118_LCSSA]], i32 175; CHECK-NEXT: br label [[BB9]]76; CHECK: bb11:77; CHECK-NEXT: ret void78; CHECK: bb12:79; CHECK-NEXT: [[LOCAL_10_89113_LCSSA:%.*]] = phi i64 [ poison, [[BB7]] ]80; CHECK-NEXT: [[LOCAL_5_84111_LCSSA:%.*]] = phi i64 [ [[LOCAL_5_84111]], [[BB7]] ]81; CHECK-NEXT: [[LANDING_PAD149:%.*]] = landingpad { ptr, i64 }82; CHECK-NEXT: cleanup83; CHECK-NEXT: [[TMP11:%.*]] = insertelement <2 x i64> poison, i64 [[LOCAL_10_89113_LCSSA]], i32 084; CHECK-NEXT: [[TMP9]] = insertelement <2 x i64> [[TMP11]], i64 [[LOCAL_5_84111_LCSSA]], i32 185; CHECK-NEXT: br label [[BB9]]86;87bb1:88 br label %bb389 90bb2.loopexit:91 br label %bb292 93bb2:94 %local_8_3681 = phi i64 [ poison, %bb9 ], [ 1, %bb2.loopexit ]95 %local_2_44 = phi i64 [ poison, %bb9 ], [ poison, %bb2.loopexit ]96 %local_5_47 = phi i64 [ %local_5_19, %bb9 ], [ poison, %bb2.loopexit ]97 %local_10_52 = phi i64 [ %local_10_24, %bb9 ], [ poison, %bb2.loopexit ]98 ret void99 100bb3:101 %local_10_38123 = phi i64 [ %.lcssa773, %bb6 ], [ poison, %bb1 ]102 %local_5_33118 = phi i64 [ poison, %bb6 ], [ poison, %bb1 ]103 %0 = invoke i64 poison(ptr addrspace(1) nonnull poison, i64 0, i64 0, i64 poison) [ "deopt"() ]104 to label %bb4 unwind label %bb10105 106bb4:107 br i1 poison, label %bb11, label %bb5108 109bb5:110 br label %bb7111 112bb6:113 %.lcssa773 = phi i64 [ poison, %bb8 ]114 %.lcssa770 = phi i64 [ 0, %bb8 ]115 br label %bb3116 117bb7:118 %local_5_84111 = phi i64 [ poison, %bb8 ], [ poison, %bb5 ]119 %1 = invoke i64 poison(ptr addrspace(1) nonnull poison, i64 poison, i64 poison, i64 poison) [ "deopt"() ]120 to label %bb8 unwind label %bb12121 122bb8:123 br i1 poison, label %bb7, label %bb6124 125bb9:126 %indvars.iv528799 = phi i64 [ poison, %bb10 ], [ poison, %bb12 ]127 %local_5_19 = phi i64 [ %local_5_33118.lcssa, %bb10 ], [ %local_5_84111.lcssa, %bb12 ]128 %local_10_24 = phi i64 [ %local_10_38123.lcssa, %bb10 ], [ %local_10_89113.lcssa, %bb12 ]129 br label %bb2130 131bb10:132 %local_10_38123.lcssa = phi i64 [ %local_10_38123, %bb3 ]133 %local_5_33118.lcssa = phi i64 [ %local_5_33118, %bb3 ]134 %landing_pad68 = landingpad { ptr, i64 }135 cleanup136 br label %bb9137 138bb11:139 ret void140 141bb12:142 %local_10_89113.lcssa = phi i64 [ poison, %bb7 ]143 %local_5_84111.lcssa = phi i64 [ %local_5_84111, %bb7 ]144 %landing_pad149 = landingpad { ptr, i64 }145 cleanup146 br label %bb9147}148 149declare ptr @bar()150 151 152