1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -passes=slp-vectorizer,verify -slp-threshold=-99999 -S | FileCheck %s 3 4target triple = "x86_64-unknown-linux-gnu" 5 6define void @foo() personality ptr @bar { 7; CHECK-LABEL: @foo( 8; CHECK-NEXT: bb1: 9; CHECK-NEXT: br label [[BB3:%.*]] 10; CHECK: bb2.loopexit: 11; CHECK-NEXT: br label [[BB2:%.*]] 12; CHECK: bb2: 13; CHECK-NEXT: [[TMP0:%.*]] = phi <4 x i32> [ [[TMP7:%.*]], [[BB9:%.*]] ], [ poison, [[BB2_LOOPEXIT:%.*]] ] 14; CHECK-NEXT: ret void 15; CHECK: bb3: 16; CHECK-NEXT: [[TMP1:%.*]] = phi <2 x i32> [ [[TMP3:%.*]], [[BB6:%.*]] ], [ poison, [[BB1:%.*]] ] 17; CHECK-NEXT: [[TMP4:%.*]] = extractelement <2 x i32> [[TMP1]], i32 0 18; CHECK-NEXT: [[TMP10:%.*]] = extractelement <2 x i32> [[TMP1]], i32 1 19; CHECK-NEXT: [[TMP2:%.*]] = invoke i32 poison(ptr addrspace(1) nonnull poison, i32 0, i32 0, i32 poison) [ "deopt"() ] 20; CHECK-NEXT: to label [[BB4:%.*]] unwind label [[BB10:%.*]] 21; CHECK: bb4: 22; CHECK-NEXT: br i1 poison, label [[BB11:%.*]], label [[BB5:%.*]] 23; CHECK: bb5: 24; CHECK-NEXT: br label [[BB7:%.*]] 25; CHECK: bb6: 26; CHECK-NEXT: [[TMP3]] = phi <2 x i32> [ <i32 0, i32 poison>, [[BB8:%.*]] ] 27; CHECK-NEXT: br label [[BB3]] 28; CHECK: bb7: 29; CHECK-NEXT: [[LOCAL_5_84111:%.*]] = phi i32 [ poison, [[BB8]] ], [ poison, [[BB5]] ] 30; CHECK-NEXT: [[TMP5:%.*]] = invoke i32 poison(ptr addrspace(1) nonnull poison, i32 poison, i32 poison, i32 poison) [ "deopt"() ] 31; CHECK-NEXT: to label [[BB8]] unwind label [[BB12:%.*]] 32; CHECK: bb8: 33; CHECK-NEXT: br i1 poison, label [[BB7]], label [[BB6]] 34; CHECK: bb9: 35; CHECK-NEXT: [[INDVARS_IV528799:%.*]] = phi i64 [ poison, [[BB10]] ], [ poison, [[BB12]] ] 36; CHECK-NEXT: [[TMP7]] = phi <4 x i32> [ [[TMP9:%.*]], [[BB10]] ], [ [[TMP11:%.*]], [[BB12]] ] 37; CHECK-NEXT: br label [[BB2]] 38; CHECK: bb10: 39; CHECK-NEXT: [[LOCAL_10_38123_LCSSA:%.*]] = phi i32 [ [[TMP10]], [[BB3]] ] 40; CHECK-NEXT: [[LOCAL_5_33118_LCSSA:%.*]] = phi i32 [ [[TMP4]], [[BB3]] ] 41; CHECK-NEXT: [[LANDING_PAD68:%.*]] = landingpad { ptr, i32 } 42; CHECK-NEXT: cleanup 43; CHECK-NEXT: [[TMP8:%.*]] = insertelement <4 x i32> poison, i32 [[LOCAL_10_38123_LCSSA]], i32 2 44; CHECK-NEXT: [[TMP9]] = insertelement <4 x i32> [[TMP8]], i32 [[LOCAL_5_33118_LCSSA]], i32 3 45; CHECK-NEXT: br label [[BB9]] 46; CHECK: bb11: 47; CHECK-NEXT: ret void 48; CHECK: bb12: 49; CHECK-NEXT: [[LOCAL_10_89113_LCSSA:%.*]] = phi i32 [ poison, [[BB7]] ] 50; CHECK-NEXT: [[LOCAL_5_84111_LCSSA:%.*]] = phi i32 [ [[LOCAL_5_84111]], [[BB7]] ] 51; CHECK-NEXT: [[LANDING_PAD149:%.*]] = landingpad { ptr, i32 } 52; CHECK-NEXT: cleanup 53; CHECK-NEXT: [[TMP12:%.*]] = insertelement <4 x i32> poison, i32 [[LOCAL_10_89113_LCSSA]], i32 2 54; CHECK-NEXT: [[TMP11]] = insertelement <4 x i32> [[TMP12]], i32 [[LOCAL_5_84111_LCSSA]], i32 3 55; CHECK-NEXT: br label [[BB9]] 56; 57bb1: 58 br label %bb3 59 60bb2.loopexit: 61 br label %bb2 62 63bb2: 64 %local_8_3681 = phi i32 [ poison, %bb9 ], [ 1, %bb2.loopexit ] 65 %local_2_44 = phi i32 [ poison, %bb9 ], [ poison, %bb2.loopexit ] 66 %local_5_47 = phi i32 [ %local_5_19, %bb9 ], [ poison, %bb2.loopexit ] 67 %local_10_52 = phi i32 [ %local_10_24, %bb9 ], [ poison, %bb2.loopexit ] 68 ret void 69 70bb3: 71 %local_10_38123 = phi i32 [ %.lcssa773, %bb6 ], [ poison, %bb1 ] 72 %local_5_33118 = phi i32 [ poison, %bb6 ], [ poison, %bb1 ] 73 %0 = invoke i32 poison(ptr addrspace(1) nonnull poison, i32 0, i32 0, i32 poison) [ "deopt"() ] 74 to label %bb4 unwind label %bb10 75 76bb4: 77 br i1 poison, label %bb11, label %bb5 78 79bb5: 80 br label %bb7 81 82bb6: 83 %.lcssa773 = phi i32 [ poison, %bb8 ] 84 %.lcssa770 = phi i32 [ 0, %bb8 ] 85 br label %bb3 86 87bb7: 88 %local_5_84111 = phi i32 [ poison, %bb8 ], [ poison, %bb5 ] 89 %1 = invoke i32 poison(ptr addrspace(1) nonnull poison, i32 poison, i32 poison, i32 poison) [ "deopt"() ] 90 to label %bb8 unwind label %bb12 91 92bb8: 93 br i1 poison, label %bb7, label %bb6 94 95bb9: 96 %indvars.iv528799 = phi i64 [ poison, %bb10 ], [ poison, %bb12 ] 97 %local_5_19 = phi i32 [ %local_5_33118.lcssa, %bb10 ], [ %local_5_84111.lcssa, %bb12 ] 98 %local_10_24 = phi i32 [ %local_10_38123.lcssa, %bb10 ], [ %local_10_89113.lcssa, %bb12 ] 99 br label %bb2 100 101bb10: 102 %local_10_38123.lcssa = phi i32 [ %local_10_38123, %bb3 ] 103 %local_5_33118.lcssa = phi i32 [ %local_5_33118, %bb3 ] 104 %landing_pad68 = landingpad { ptr, i32 } 105 cleanup 106 br label %bb9 107 108bb11: 109 ret void 110 111bb12: 112 %local_10_89113.lcssa = phi i32 [ poison, %bb7 ] 113 %local_5_84111.lcssa = phi i32 [ %local_5_84111, %bb7 ] 114 %landing_pad149 = landingpad { ptr, i32 } 115 cleanup 116 br label %bb9 117} 118 119declare ptr @bar() 120 121 122