258 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<scops>' -polly-print-scops -disable-output < %s 2>&1 | FileCheck %s2;3; #define N 4004;5; void first_higher_dimensional(float A[][N]) {6; for (long i = 0; i < N; i++)7; for (long j = 0; j < N; j++)8; A[i][j] += i + j;9;10; A[0][0] += A[100][100];11;12; for (long i = 0; i < N; i++)13; for (long j = 0; j < N; j++)14; A[i][j] += i + j;15; }16 17; void first_lower_dimensional(float A[][N], float B[][N]) {18; for (long i = 0; i < N; i++)19; for (long j = 0; j < N; j++)20; B[i][j] += i + j;21;22; A[0][0] += B[100][100];23;24; for (long i = 0; i < N; i++)25; for (long j = 0; j < N; j++)26; A[i][j] += i + j;27; }28 29; CHECK: Statements {30; CHECK-NEXT: Stmt_bb731; CHECK-NEXT: Domain :=32; CHECK-NEXT: { Stmt_bb7[i0, i1] : 0 <= i0 <= 399 and 0 <= i1 <= 399 };33; CHECK-NEXT: Schedule :=34; CHECK-NEXT: { Stmt_bb7[i0, i1] -> [0, i0, i1] };35; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]36; CHECK-NEXT: { Stmt_bb7[i0, i1] -> MemRef_A[i0, i1] };37; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]38; CHECK-NEXT: { Stmt_bb7[i0, i1] -> MemRef_A[i0, i1] };39; CHECK-NEXT: Stmt_bb1740; CHECK-NEXT: Domain :=41; CHECK-NEXT: { Stmt_bb17[] };42; CHECK-NEXT: Schedule :=43; CHECK-NEXT: { Stmt_bb17[] -> [1, 0, 0] };44; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]45; CHECK-NEXT: { Stmt_bb17[] -> MemRef_A[100, 100] };46; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]47; CHECK-NEXT: { Stmt_bb17[] -> MemRef_A[0, 0] };48; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]49; CHECK-NEXT: { Stmt_bb17[] -> MemRef_A[0, 0] };50; CHECK-NEXT: Stmt_bb2651; CHECK-NEXT: Domain :=52; CHECK-NEXT: { Stmt_bb26[i0, i1] : 0 <= i0 <= 399 and 0 <= i1 <= 399 };53; CHECK-NEXT: Schedule :=54; CHECK-NEXT: { Stmt_bb26[i0, i1] -> [2, i0, i1] };55; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]56; CHECK-NEXT: { Stmt_bb26[i0, i1] -> MemRef_A[i0, i1] };57; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]58; CHECK-NEXT: { Stmt_bb26[i0, i1] -> MemRef_A[i0, i1] };59; CHECK-NEXT: }60;61; CHECK: Statements {62; CHECK-NEXT: Stmt_bb763; CHECK-NEXT: Domain :=64; CHECK-NEXT: { Stmt_bb7[i0, i1] : 0 <= i0 <= 399 and 0 <= i1 <= 399 };65; CHECK-NEXT: Schedule :=66; CHECK-NEXT: { Stmt_bb7[i0, i1] -> [0, i0, i1] };67; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]68; CHECK-NEXT: { Stmt_bb7[i0, i1] -> MemRef_B[i0, i1] };69; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]70; CHECK-NEXT: { Stmt_bb7[i0, i1] -> MemRef_B[i0, i1] };71; CHECK-NEXT: Stmt_bb1772; CHECK-NEXT: Domain :=73; CHECK-NEXT: { Stmt_bb17[] };74; CHECK-NEXT: Schedule :=75; CHECK-NEXT: { Stmt_bb17[] -> [1, 0, 0] };76; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]77; CHECK-NEXT: { Stmt_bb17[] -> MemRef_B[100, 100] };78; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]79; CHECK-NEXT: { Stmt_bb17[] -> MemRef_A[0, 0] };80; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]81; CHECK-NEXT: { Stmt_bb17[] -> MemRef_A[0, 0] };82; CHECK-NEXT: Stmt_bb2683; CHECK-NEXT: Domain :=84; CHECK-NEXT: { Stmt_bb26[i0, i1] : 0 <= i0 <= 399 and 0 <= i1 <= 399 };85; CHECK-NEXT: Schedule :=86; CHECK-NEXT: { Stmt_bb26[i0, i1] -> [2, i0, i1] };87; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0]88; CHECK-NEXT: { Stmt_bb26[i0, i1] -> MemRef_A[i0, i1] };89; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]90; CHECK-NEXT: { Stmt_bb26[i0, i1] -> MemRef_A[i0, i1] };91; CHECK-NEXT: }92 93target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"94 95define void @first_higher_dimensional(ptr %A) {96bb:97 br label %bb498 99bb4: ; preds = %bb15, %bb100 %i.0 = phi i64 [ 0, %bb ], [ %tmp16, %bb15 ]101 %exitcond3 = icmp ne i64 %i.0, 400102 br i1 %exitcond3, label %bb5, label %bb17103 104bb5: ; preds = %bb4105 br label %bb6106 107bb6: ; preds = %bb12, %bb5108 %j.0 = phi i64 [ 0, %bb5 ], [ %tmp13, %bb12 ]109 %exitcond2 = icmp ne i64 %j.0, 400110 br i1 %exitcond2, label %bb7, label %bb14111 112bb7: ; preds = %bb6113 %tmp = add nuw nsw i64 %i.0, %j.0114 %tmp8 = sitofp i64 %tmp to float115 %tmp9 = getelementptr inbounds [400 x float], ptr %A, i64 %i.0, i64 %j.0116 %tmp10 = load float, ptr %tmp9, align 4117 %tmp11 = fadd float %tmp10, %tmp8118 store float %tmp11, ptr %tmp9, align 4119 br label %bb12120 121bb12: ; preds = %bb7122 %tmp13 = add nuw nsw i64 %j.0, 1123 br label %bb6124 125bb14: ; preds = %bb6126 br label %bb15127 128bb15: ; preds = %bb14129 %tmp16 = add nuw nsw i64 %i.0, 1130 br label %bb4131 132bb17: ; preds = %bb4133 %tmp18 = getelementptr inbounds [400 x float], ptr %A, i64 100, i64 100134 %tmp19 = load float, ptr %tmp18, align 4135 %tmp21 = load float, ptr %A, align 4136 %tmp22 = fadd float %tmp21, %tmp19137 store float %tmp22, ptr %A, align 4138 br label %bb23139 140bb23: ; preds = %bb35, %bb17141 %i1.0 = phi i64 [ 0, %bb17 ], [ %tmp36, %bb35 ]142 %exitcond1 = icmp ne i64 %i1.0, 400143 br i1 %exitcond1, label %bb24, label %bb37144 145bb24: ; preds = %bb23146 br label %bb25147 148bb25: ; preds = %bb32, %bb24149 %j2.0 = phi i64 [ 0, %bb24 ], [ %tmp33, %bb32 ]150 %exitcond = icmp ne i64 %j2.0, 400151 br i1 %exitcond, label %bb26, label %bb34152 153bb26: ; preds = %bb25154 %tmp27 = add nuw nsw i64 %i1.0, %j2.0155 %tmp28 = sitofp i64 %tmp27 to float156 %tmp29 = getelementptr inbounds [400 x float], ptr %A, i64 %i1.0, i64 %j2.0157 %tmp30 = load float, ptr %tmp29, align 4158 %tmp31 = fadd float %tmp30, %tmp28159 store float %tmp31, ptr %tmp29, align 4160 br label %bb32161 162bb32: ; preds = %bb26163 %tmp33 = add nuw nsw i64 %j2.0, 1164 br label %bb25165 166bb34: ; preds = %bb25167 br label %bb35168 169bb35: ; preds = %bb34170 %tmp36 = add nuw nsw i64 %i1.0, 1171 br label %bb23172 173bb37: ; preds = %bb23174 ret void175}176 177define void @first_lower_dimensional(ptr %A, ptr %B) {178bb:179 br label %bb4180 181bb4: ; preds = %bb15, %bb182 %i.0 = phi i64 [ 0, %bb ], [ %tmp16, %bb15 ]183 %exitcond3 = icmp ne i64 %i.0, 400184 br i1 %exitcond3, label %bb5, label %bb17185 186bb5: ; preds = %bb4187 br label %bb6188 189bb6: ; preds = %bb12, %bb5190 %j.0 = phi i64 [ 0, %bb5 ], [ %tmp13, %bb12 ]191 %exitcond2 = icmp ne i64 %j.0, 400192 br i1 %exitcond2, label %bb7, label %bb14193 194bb7: ; preds = %bb6195 %tmp = add nuw nsw i64 %i.0, %j.0196 %tmp8 = sitofp i64 %tmp to float197 %tmp9 = getelementptr inbounds [400 x float], ptr %B, i64 %i.0, i64 %j.0198 %tmp10 = load float, ptr %tmp9, align 4199 %tmp11 = fadd float %tmp10, %tmp8200 store float %tmp11, ptr %tmp9, align 4201 br label %bb12202 203bb12: ; preds = %bb7204 %tmp13 = add nuw nsw i64 %j.0, 1205 br label %bb6206 207bb14: ; preds = %bb6208 br label %bb15209 210bb15: ; preds = %bb14211 %tmp16 = add nuw nsw i64 %i.0, 1212 br label %bb4213 214bb17: ; preds = %bb4215 %tmp18 = getelementptr inbounds [400 x float], ptr %B, i64 100, i64 100216 %tmp19 = load float, ptr %tmp18, align 4217 %tmp21 = load float, ptr %A, align 4218 %tmp22 = fadd float %tmp21, %tmp19219 store float %tmp22, ptr %A, align 4220 br label %bb23221 222bb23: ; preds = %bb35, %bb17223 %i1.0 = phi i64 [ 0, %bb17 ], [ %tmp36, %bb35 ]224 %exitcond1 = icmp ne i64 %i1.0, 400225 br i1 %exitcond1, label %bb24, label %bb37226 227bb24: ; preds = %bb23228 br label %bb25229 230bb25: ; preds = %bb32, %bb24231 %j2.0 = phi i64 [ 0, %bb24 ], [ %tmp33, %bb32 ]232 %exitcond = icmp ne i64 %j2.0, 400233 br i1 %exitcond, label %bb26, label %bb34234 235bb26: ; preds = %bb25236 %tmp27 = add nuw nsw i64 %i1.0, %j2.0237 %tmp28 = sitofp i64 %tmp27 to float238 %tmp29 = getelementptr inbounds [400 x float], ptr %A, i64 %i1.0, i64 %j2.0239 %tmp30 = load float, ptr %tmp29, align 4240 %tmp31 = fadd float %tmp30, %tmp28241 store float %tmp31, ptr %tmp29, align 4242 br label %bb32243 244bb32: ; preds = %bb26245 %tmp33 = add nuw nsw i64 %j2.0, 1246 br label %bb25247 248bb34: ; preds = %bb25249 br label %bb35250 251bb35: ; preds = %bb34252 %tmp36 = add nuw nsw i64 %i1.0, 1253 br label %bb23254 255bb37: ; preds = %bb23256 ret void257}258