1; RUN: opt %loadPolly -polly-scops -analyze < %s | FileCheck %s 2; 3; CHECK: Assumed Context: 4; CHECK-NEXT: { : } 5; 6; Make sure the large number of read-only accesses does not cause make us 7; invalidate the scop. 8; 9; void many_read_only_accesses(float A[], float B[]) { 10; for (long i = 0; i < 1024; i++) { 11; for (long j = 0; j < 1024; j++) { 12; A[j] += B[i] + B[i + 1] + B[i + 2] + B[i + 3] + B[i + 4] + B[i + 5] + 13; B[i + 6] + B[i + 7] + B[i + 8] + B[i + 9] + B[i + 0] + B[i + 11] + 14; B[i + 12] + B[i + 13] + B[i + 14] + B[i + 15] + B[i + 16] + 15; B[i + 17] + B[i + 18] + B[i + 19] + B[i + 10] + B[i + 21] + 16; B[i + 22] + B[i + 23] + B[i + 24] + B[i + 25] + B[i + 26] + 17; B[i + 27] + B[i + 28] + B[i + 29] + B[i + 20] + B[i + 31] + 18; B[i + 32] + B[i + 33] + B[i + 34] + B[i + 35] + B[i + 36] + 19; B[i + 37] + B[i + 38] + B[i + 39] + B[i + 30]; 20; } 21; } 22; } 23; 24target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 25 26define void @many_read_only_accesses(float* %A, float* %B) { 27bb: 28 br label %bb2 29 30bb2: ; preds = %bb172, %bb 31 %i.0 = phi i64 [ 0, %bb ], [ %tmp173, %bb172 ] 32 %exitcond1 = icmp ne i64 %i.0, 1024 33 br i1 %exitcond1, label %bb3, label %bb174 34 35bb3: ; preds = %bb2 36 br label %bb4 37 38bb4: ; preds = %bb169, %bb3 39 %j.0 = phi i64 [ 0, %bb3 ], [ %tmp170, %bb169 ] 40 %exitcond = icmp ne i64 %j.0, 1024 41 br i1 %exitcond, label %bb5, label %bb171 42 43bb5: ; preds = %bb4 44 %tmp = getelementptr inbounds float, float* %B, i64 %i.0 45 %tmp6 = load float, float* %tmp, align 4 46 %tmp7 = add nuw nsw i64 %i.0, 1 47 %tmp8 = getelementptr inbounds float, float* %B, i64 %tmp7 48 %tmp9 = load float, float* %tmp8, align 4 49 %tmp10 = fadd float %tmp6, %tmp9 50 %tmp11 = add nuw nsw i64 %i.0, 2 51 %tmp12 = getelementptr inbounds float, float* %B, i64 %tmp11 52 %tmp13 = load float, float* %tmp12, align 4 53 %tmp14 = fadd float %tmp10, %tmp13 54 %tmp15 = add nuw nsw i64 %i.0, 3 55 %tmp16 = getelementptr inbounds float, float* %B, i64 %tmp15 56 %tmp17 = load float, float* %tmp16, align 4 57 %tmp18 = fadd float %tmp14, %tmp17 58 %tmp19 = add nuw nsw i64 %i.0, 4 59 %tmp20 = getelementptr inbounds float, float* %B, i64 %tmp19 60 %tmp21 = load float, float* %tmp20, align 4 61 %tmp22 = fadd float %tmp18, %tmp21 62 %tmp23 = add nuw nsw i64 %i.0, 5 63 %tmp24 = getelementptr inbounds float, float* %B, i64 %tmp23 64 %tmp25 = load float, float* %tmp24, align 4 65 %tmp26 = fadd float %tmp22, %tmp25 66 %tmp27 = add nuw nsw i64 %i.0, 6 67 %tmp28 = getelementptr inbounds float, float* %B, i64 %tmp27 68 %tmp29 = load float, float* %tmp28, align 4 69 %tmp30 = fadd float %tmp26, %tmp29 70 %tmp31 = add nuw nsw i64 %i.0, 7 71 %tmp32 = getelementptr inbounds float, float* %B, i64 %tmp31 72 %tmp33 = load float, float* %tmp32, align 4 73 %tmp34 = fadd float %tmp30, %tmp33 74 %tmp35 = add nuw nsw i64 %i.0, 8 75 %tmp36 = getelementptr inbounds float, float* %B, i64 %tmp35 76 %tmp37 = load float, float* %tmp36, align 4 77 %tmp38 = fadd float %tmp34, %tmp37 78 %tmp39 = add nuw nsw i64 %i.0, 9 79 %tmp40 = getelementptr inbounds float, float* %B, i64 %tmp39 80 %tmp41 = load float, float* %tmp40, align 4 81 %tmp42 = fadd float %tmp38, %tmp41 82 %tmp43 = getelementptr inbounds float, float* %B, i64 %i.0 83 %tmp44 = load float, float* %tmp43, align 4 84 %tmp45 = fadd float %tmp42, %tmp44 85 %tmp46 = add nuw nsw i64 %i.0, 11 86 %tmp47 = getelementptr inbounds float, float* %B, i64 %tmp46 87 %tmp48 = load float, float* %tmp47, align 4 88 %tmp49 = fadd float %tmp45, %tmp48 89 %tmp50 = add nuw nsw i64 %i.0, 12 90 %tmp51 = getelementptr inbounds float, float* %B, i64 %tmp50 91 %tmp52 = load float, float* %tmp51, align 4 92 %tmp53 = fadd float %tmp49, %tmp52 93 %tmp54 = add nuw nsw i64 %i.0, 13 94 %tmp55 = getelementptr inbounds float, float* %B, i64 %tmp54 95 %tmp56 = load float, float* %tmp55, align 4 96 %tmp57 = fadd float %tmp53, %tmp56 97 %tmp58 = add nuw nsw i64 %i.0, 14 98 %tmp59 = getelementptr inbounds float, float* %B, i64 %tmp58 99 %tmp60 = load float, float* %tmp59, align 4 100 %tmp61 = fadd float %tmp57, %tmp60 101 %tmp62 = add nuw nsw i64 %i.0, 15 102 %tmp63 = getelementptr inbounds float, float* %B, i64 %tmp62 103 %tmp64 = load float, float* %tmp63, align 4 104 %tmp65 = fadd float %tmp61, %tmp64 105 %tmp66 = add nuw nsw i64 %i.0, 16 106 %tmp67 = getelementptr inbounds float, float* %B, i64 %tmp66 107 %tmp68 = load float, float* %tmp67, align 4 108 %tmp69 = fadd float %tmp65, %tmp68 109 %tmp70 = add nuw nsw i64 %i.0, 17 110 %tmp71 = getelementptr inbounds float, float* %B, i64 %tmp70 111 %tmp72 = load float, float* %tmp71, align 4 112 %tmp73 = fadd float %tmp69, %tmp72 113 %tmp74 = add nuw nsw i64 %i.0, 18 114 %tmp75 = getelementptr inbounds float, float* %B, i64 %tmp74 115 %tmp76 = load float, float* %tmp75, align 4 116 %tmp77 = fadd float %tmp73, %tmp76 117 %tmp78 = add nuw nsw i64 %i.0, 19 118 %tmp79 = getelementptr inbounds float, float* %B, i64 %tmp78 119 %tmp80 = load float, float* %tmp79, align 4 120 %tmp81 = fadd float %tmp77, %tmp80 121 %tmp82 = add nuw nsw i64 %i.0, 10 122 %tmp83 = getelementptr inbounds float, float* %B, i64 %tmp82 123 %tmp84 = load float, float* %tmp83, align 4 124 %tmp85 = fadd float %tmp81, %tmp84 125 %tmp86 = add nuw nsw i64 %i.0, 21 126 %tmp87 = getelementptr inbounds float, float* %B, i64 %tmp86 127 %tmp88 = load float, float* %tmp87, align 4 128 %tmp89 = fadd float %tmp85, %tmp88 129 %tmp90 = add nuw nsw i64 %i.0, 22 130 %tmp91 = getelementptr inbounds float, float* %B, i64 %tmp90 131 %tmp92 = load float, float* %tmp91, align 4 132 %tmp93 = fadd float %tmp89, %tmp92 133 %tmp94 = add nuw nsw i64 %i.0, 23 134 %tmp95 = getelementptr inbounds float, float* %B, i64 %tmp94 135 %tmp96 = load float, float* %tmp95, align 4 136 %tmp97 = fadd float %tmp93, %tmp96 137 %tmp98 = add nuw nsw i64 %i.0, 24 138 %tmp99 = getelementptr inbounds float, float* %B, i64 %tmp98 139 %tmp100 = load float, float* %tmp99, align 4 140 %tmp101 = fadd float %tmp97, %tmp100 141 %tmp102 = add nuw nsw i64 %i.0, 25 142 %tmp103 = getelementptr inbounds float, float* %B, i64 %tmp102 143 %tmp104 = load float, float* %tmp103, align 4 144 %tmp105 = fadd float %tmp101, %tmp104 145 %tmp106 = add nuw nsw i64 %i.0, 26 146 %tmp107 = getelementptr inbounds float, float* %B, i64 %tmp106 147 %tmp108 = load float, float* %tmp107, align 4 148 %tmp109 = fadd float %tmp105, %tmp108 149 %tmp110 = add nuw nsw i64 %i.0, 27 150 %tmp111 = getelementptr inbounds float, float* %B, i64 %tmp110 151 %tmp112 = load float, float* %tmp111, align 4 152 %tmp113 = fadd float %tmp109, %tmp112 153 %tmp114 = add nuw nsw i64 %i.0, 28 154 %tmp115 = getelementptr inbounds float, float* %B, i64 %tmp114 155 %tmp116 = load float, float* %tmp115, align 4 156 %tmp117 = fadd float %tmp113, %tmp116 157 %tmp118 = add nuw nsw i64 %i.0, 29 158 %tmp119 = getelementptr inbounds float, float* %B, i64 %tmp118 159 %tmp120 = load float, float* %tmp119, align 4 160 %tmp121 = fadd float %tmp117, %tmp120 161 %tmp122 = add nuw nsw i64 %i.0, 20 162 %tmp123 = getelementptr inbounds float, float* %B, i64 %tmp122 163 %tmp124 = load float, float* %tmp123, align 4 164 %tmp125 = fadd float %tmp121, %tmp124 165 %tmp126 = add nuw nsw i64 %i.0, 31 166 %tmp127 = getelementptr inbounds float, float* %B, i64 %tmp126 167 %tmp128 = load float, float* %tmp127, align 4 168 %tmp129 = fadd float %tmp125, %tmp128 169 %tmp130 = add nuw nsw i64 %i.0, 32 170 %tmp131 = getelementptr inbounds float, float* %B, i64 %tmp130 171 %tmp132 = load float, float* %tmp131, align 4 172 %tmp133 = fadd float %tmp129, %tmp132 173 %tmp134 = add nuw nsw i64 %i.0, 33 174 %tmp135 = getelementptr inbounds float, float* %B, i64 %tmp134 175 %tmp136 = load float, float* %tmp135, align 4 176 %tmp137 = fadd float %tmp133, %tmp136 177 %tmp138 = add nuw nsw i64 %i.0, 34 178 %tmp139 = getelementptr inbounds float, float* %B, i64 %tmp138 179 %tmp140 = load float, float* %tmp139, align 4 180 %tmp141 = fadd float %tmp137, %tmp140 181 %tmp142 = add nuw nsw i64 %i.0, 35 182 %tmp143 = getelementptr inbounds float, float* %B, i64 %tmp142 183 %tmp144 = load float, float* %tmp143, align 4 184 %tmp145 = fadd float %tmp141, %tmp144 185 %tmp146 = add nuw nsw i64 %i.0, 36 186 %tmp147 = getelementptr inbounds float, float* %B, i64 %tmp146 187 %tmp148 = load float, float* %tmp147, align 4 188 %tmp149 = fadd float %tmp145, %tmp148 189 %tmp150 = add nuw nsw i64 %i.0, 37 190 %tmp151 = getelementptr inbounds float, float* %B, i64 %tmp150 191 %tmp152 = load float, float* %tmp151, align 4 192 %tmp153 = fadd float %tmp149, %tmp152 193 %tmp154 = add nuw nsw i64 %i.0, 38 194 %tmp155 = getelementptr inbounds float, float* %B, i64 %tmp154 195 %tmp156 = load float, float* %tmp155, align 4 196 %tmp157 = fadd float %tmp153, %tmp156 197 %tmp158 = add nuw nsw i64 %i.0, 39 198 %tmp159 = getelementptr inbounds float, float* %B, i64 %tmp158 199 %tmp160 = load float, float* %tmp159, align 4 200 %tmp161 = fadd float %tmp157, %tmp160 201 %tmp162 = add nuw nsw i64 %i.0, 30 202 %tmp163 = getelementptr inbounds float, float* %B, i64 %tmp162 203 %tmp164 = load float, float* %tmp163, align 4 204 %tmp165 = fadd float %tmp161, %tmp164 205 %tmp166 = getelementptr inbounds float, float* %A, i64 %j.0 206 %tmp167 = load float, float* %tmp166, align 4 207 %tmp168 = fadd float %tmp167, %tmp165 208 store float %tmp168, float* %tmp166, align 4 209 br label %bb169 210 211bb169: ; preds = %bb5 212 %tmp170 = add nuw nsw i64 %j.0, 1 213 br label %bb4 214 215bb171: ; preds = %bb4 216 br label %bb172 217 218bb172: ; preds = %bb171 219 %tmp173 = add nuw nsw i64 %i.0, 1 220 br label %bb2 221 222bb174: ; preds = %bb2 223 ret void 224} 225