1; RUN: opt --vec-extabi=true -passes='default<O3>' -mcpu=pwr10 \ 2; RUN: -pgo-kind=pgo-instr-gen-pipeline -mtriple=powerpc-ibm-aix -S < %s | \ 3; RUN: FileCheck %s 4; RUN: opt -passes='default<O3>' -mcpu=pwr10 -pgo-kind=pgo-instr-gen-pipeline \ 5; RUN: -mtriple=powerpc64le-unknown-linux-gnu -S < %s | FileCheck %s 6 7; When running this test case under opt + PGO, the SLPVectorizer previously had 8; an opportunity to produce wide vector types (such as <256 x i1>) within the 9; IR as it deemed these wide vector types to be cheap enough to produce. 10; Having this test ensures that the optimizer no longer generates wide vectors 11; within the IR. 12 13%0 = type <{ double }> 14%1 = type <{ ptr, i8, i8, i8, i8, i32, i32, i32, [1 x i32], [1 x i32], [1 x i32], [24 x i8] }> 15declare ptr @__malloc() 16; CHECK-NOT: <256 x i1> 17; CHECK-NOT: <512 x i1> 18define dso_local void @test(ptr %arg, ptr %arg1, ptr %arg2, ptr %arg3, ptr %arg4) { 19 %i = alloca ptr, align 4 20 store ptr %arg, ptr %i, align 4 21 %i7 = alloca ptr, align 4 22 store ptr %arg1, ptr %i7, align 4 23 %i9 = alloca ptr, align 4 24 store ptr %arg2, ptr %i9, align 4 25 %i10 = alloca ptr, align 4 26 store ptr %arg3, ptr %i10, align 4 27 %i11 = alloca ptr, align 4 28 store ptr %arg4, ptr %i11, align 4 29 %i14 = alloca %1, align 4 30 %i15 = alloca i32, align 4 31 %i16 = alloca i32, align 4 32 %i17 = alloca i32, align 4 33 %i18 = alloca i32, align 4 34 %i20 = alloca i32, align 4 35 %i21 = alloca i32, align 4 36 %i22 = alloca i32, align 4 37 %i23 = alloca i32, align 4 38 %i25 = alloca double, align 8 39 %i26 = load ptr, ptr %i9, align 4 40 %i27 = load i32, ptr %i26, align 4 41 %i28 = select i1 false, i32 0, i32 %i27 42 store i32 %i28, ptr %i15, align 4 43 %i29 = load ptr, ptr %i7, align 4 44 %i30 = load i32, ptr %i29, align 4 45 %i31 = select i1 false, i32 0, i32 %i30 46 store i32 %i31, ptr %i16, align 4 47 %i32 = load i32, ptr %i15, align 4 48 %i33 = mul i32 8, %i32 49 store i32 %i33, ptr %i17, align 4 50 %i34 = load i32, ptr %i17, align 4 51 %i35 = load i32, ptr %i16, align 4 52 %i36 = mul i32 %i34, %i35 53 store i32 %i36, ptr %i18, align 4 54 %i37 = load ptr, ptr %i9, align 4 55 %i38 = load i32, ptr %i37, align 4 56 %i39 = select i1 false, i32 0, i32 %i38 57 store i32 %i39, ptr %i22, align 4 58 %i40 = load ptr, ptr %i10, align 4 59 %i41 = load i32, ptr %i40, align 4 60 %i42 = select i1 false, i32 0, i32 %i41 61 store i32 %i42, ptr %i23, align 4 62 %i43 = getelementptr inbounds %1, ptr %i14, i32 0, i32 10 63 %i45 = getelementptr i8, ptr %i43, i32 -12 64 %i46 = getelementptr inbounds i8, ptr %i45, i32 12 65 %i48 = load i32, ptr %i23, align 4 66 %i49 = select i1 false, i32 0, i32 %i48 67 %i50 = load i32, ptr %i22, align 4 68 %i51 = select i1 false, i32 0, i32 %i50 69 %i52 = mul i32 %i51, 8 70 %i53 = mul i32 %i49, %i52 71 store i32 %i53, ptr %i46, align 4 72 %i54 = getelementptr inbounds %1, ptr %i14, i32 0, i32 10 73 %i56 = getelementptr i8, ptr %i54, i32 -12 74 %i57 = getelementptr inbounds i8, ptr %i56, i32 36 75 store i32 8, ptr %i57, align 4 76 %i61 = call ptr @__malloc() 77 store ptr %i61, ptr %i14, align 4 78 br label %bb63 79bb63: ; preds = %bb66, %bb 80 %i64 = load ptr, ptr %i11, align 4 81 %i65 = load i32, ptr %i64, align 4 82 br label %bb66 83bb66: ; preds = %bb165, %bb63 84 %i67 = load i32, ptr %i21, align 4 85 %i68 = icmp sle i32 %i67, %i65 86 br i1 %i68, label %bb69, label %bb63 87bb69: ; preds = %bb66 88 store i32 1, ptr %i20, align 4 89 br label %bb70 90bb70: ; preds = %bb163, %bb69 91 %i71 = load i32, ptr %i20, align 4 92 %i72 = icmp sle i32 %i71, 11 93 br i1 %i72, label %bb73, label %bb165 94bb73: ; preds = %bb70 95 %i74 = load i32, ptr %i21, align 4 96 %i76 = mul i32 %i74, 8 97 %i77 = getelementptr inbounds i8, ptr null, i32 %i76 98 %i79 = load double, ptr %i77, align 8 99 %i80 = fcmp fast olt double %i79, 0.000000e+00 100 %i81 = zext i1 %i80 to i32 101 %i82 = trunc i32 %i81 to i1 102 br i1 %i82, label %bb83, label %bb102 103bb83: ; preds = %bb73 104 %i85 = load ptr, ptr %i14, align 4 105 %i88 = load i32, ptr %i20, align 4 106 %i89 = getelementptr inbounds %1, ptr %i14, i32 0, i32 10 107 %i91 = load i32, ptr %i89, align 4 108 %i92 = mul i32 %i88, %i91 109 %i93 = getelementptr inbounds i8, ptr %i85, i32 %i92 110 %i95 = load i32, ptr %i21, align 4 111 %i96 = getelementptr inbounds %1, ptr %i14, i32 0, i32 10 112 %i97 = getelementptr inbounds [1 x i32], ptr %i96, i32 0, i32 6 113 %i98 = load i32, ptr %i97, align 4 114 %i99 = mul i32 %i95, %i98 115 %i100 = getelementptr inbounds i8, ptr %i93, i32 %i99 116 store double 0.000000e+00, ptr %i100, align 8 117 br label %bb163 118bb102: ; preds = %bb73 119 %i103 = getelementptr i8, ptr null, i32 -8 120 %i104 = getelementptr inbounds i8, ptr %i103, i32 undef 121 %i106 = load double, ptr %i104, align 8 122 %i107 = load ptr, ptr %i, align 4 123 %i109 = getelementptr i8, ptr %i107, i32 -8 124 %i110 = getelementptr inbounds i8, ptr %i109, i32 undef 125 %i112 = load double, ptr %i110, align 8 126 %i113 = fmul fast double %i106, %i112 127 %i114 = fcmp fast ogt double 0.000000e+00, %i113 128 %i115 = zext i1 %i114 to i32 129 %i116 = trunc i32 %i115 to i1 130 br i1 %i116, label %bb117, label %bb136 131bb117: ; preds = %bb102 132 %i119 = load ptr, ptr %i14, align 4 133 %i122 = load i32, ptr %i20, align 4 134 %i123 = getelementptr inbounds %1, ptr %i14, i32 0, i32 10 135 %i125 = load i32, ptr %i123, align 4 136 %i126 = mul i32 %i122, %i125 137 %i127 = getelementptr inbounds i8, ptr %i119, i32 %i126 138 %i129 = load i32, ptr %i21, align 4 139 %i130 = getelementptr inbounds %1, ptr %i14, i32 0, i32 10 140 %i131 = getelementptr inbounds [1 x i32], ptr %i130, i32 0, i32 6 141 %i132 = load i32, ptr %i131, align 4 142 %i133 = mul i32 %i129, %i132 143 %i134 = getelementptr inbounds i8, ptr %i127, i32 %i133 144 store double 0.000000e+00, ptr %i134, align 8 145 br label %bb163 146bb136: ; preds = %bb102 147 %i137 = load double, ptr null, align 8 148 %i138 = load double, ptr null, align 8 149 %i139 = fmul fast double %i137, %i138 150 %i140 = fsub fast double 0.000000e+00, %i139 151 store double %i140, ptr %i25, align 8 152 %i141 = load i32, ptr %i21, align 4 153 %i143 = getelementptr inbounds [1 x i32], ptr null, i32 0, i32 6 154 %i144 = load i32, ptr %i143, align 4 155 %i145 = mul i32 %i141, %i144 156 %i146 = getelementptr inbounds i8, ptr null, i32 %i145 157 %i148 = load i32, ptr %i20, align 4 158 %i149 = load i32, ptr %i18, align 4 159 %i151 = mul i32 %i148, %i149 160 %i152 = getelementptr i8, ptr null, i32 %i151 161 %i156 = load double, ptr %i152, align 8 162 %i157 = load double, ptr %i25, align 8 163 %i158 = fmul fast double %i156, %i157 164 %i159 = fadd fast double 0.000000e+00, %i158 165 %i160 = load double, ptr %i25, align 8 166 %i161 = fadd fast double 0.000000e+00, %i160 167 %i162 = fdiv fast double %i159, %i161 168 store double %i162, ptr %i146, align 8 169 br label %bb163 170bb163: ; preds = %bb136, %bb117, %bb83 171 %i164 = add nsw i32 %i71, 1 172 store i32 %i164, ptr %i20, align 4 173 br label %bb70 174bb165: ; preds = %bb70 175 %i166 = add nsw i32 %i67, 1 176 store i32 %i166, ptr %i21, align 4 177 br label %bb66 178} 179