1; RUN: opt -basic-aa %loadPolly -polly-scops -analyze < %s | FileCheck %s 2; 3; CHECK: Stmt_for_body 4; CHECK: Reduction Type: * 5; CHECK: MemRef_sum 6; CHECK: Reduction Type: * 7; CHECK: MemRef_sum 8; CHECK: Stmt_for_body3 9; CHECK: Reduction Type: NONE 10; CHECK: MemRef_A 11; CHECK: Reduction Type: + 12; CHECK: MemRef_sum 13; CHECK: Reduction Type: + 14; CHECK: MemRef_sum 15; CHECK: Stmt_for_end 16; CHECK: Reduction Type: * 17; CHECK: MemRef_sum 18; CHECK: Reduction Type: * 19; CHECK: MemRef_sum 20; 21; void f(int *restrict A, int *restrict sum) { 22; int i, j; 23; for (i = 0; i < 100; i++) { 24; *sum *= 7; 25; for (j = 0; j < 100; j++) { 26; *sum += A[i + j]; 27; } 28; *sum *= 5; 29; } 30; } 31target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64" 32 33define void @f(i32* noalias %A, i32* noalias %sum) { 34entry: 35 br label %for.cond 36 37for.cond: ; preds = %for.inc6, %entry 38 %i.0 = phi i32 [ 0, %entry ], [ %inc7, %for.inc6 ] 39 %exitcond1 = icmp ne i32 %i.0, 100 40 br i1 %exitcond1, label %for.body, label %for.end8 41 42for.body: ; preds = %for.cond 43 %tmp = load i32, i32* %sum, align 4 44 %mul = mul nsw i32 %tmp, 7 45 store i32 %mul, i32* %sum, align 4 46 br label %for.cond1 47 48for.cond1: ; preds = %for.inc, %for.body 49 %j.0 = phi i32 [ 0, %for.body ], [ %inc, %for.inc ] 50 %exitcond = icmp ne i32 %j.0, 100 51 br i1 %exitcond, label %for.body3, label %for.end 52 53for.body3: ; preds = %for.cond1 54 %add = add nsw i32 %i.0, %j.0 55 %arrayidx = getelementptr inbounds i32, i32* %A, i32 %add 56 %tmp2 = load i32, i32* %arrayidx, align 4 57 %tmp3 = load i32, i32* %sum, align 4 58 %add4 = add nsw i32 %tmp3, %tmp2 59 store i32 %add4, i32* %sum, align 4 60 br label %for.inc 61 62for.inc: ; preds = %for.body3 63 %inc = add nsw i32 %j.0, 1 64 br label %for.cond1 65 66for.end: ; preds = %for.cond1 67 %tmp4 = load i32, i32* %sum, align 4 68 %mul5 = mul nsw i32 %tmp4, 5 69 store i32 %mul5, i32* %sum, align 4 70 br label %for.inc6 71 72for.inc6: ; preds = %for.end 73 %inc7 = add nsw i32 %i.0, 1 74 br label %for.cond 75 76for.end8: ; preds = %for.cond 77 ret void 78} 79