[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / polly / test / ScopInfo / reduction_long_reduction_chain.ll
blob62ae1fef187b63575889496ffab6b6f3fe6cca61
1 ; RUN: opt %loadPolly -basic-aa -polly-print-scops -disable-output < %s | FileCheck %s
3 ; CHECK: Reduction Type: +
4 ; CHECK: MemRef_sum
5 ; CHECK: Reduction Type: NONE
6 ; CHECK: MemRef_A
7 ; CHECK: Reduction Type: +
8 ; CHECK: MemRef_sum
9 ; CHECK-NOT: MemRef_A
11 ;    void f(int *restrict sum, int *restrict A) {
12 ;      for (int i = 0; i < 1024; i++)
13 ;        *sum = (A[i + 3] * (i - 14)) + ((A[i] + *sum + A[0]) + A[1023]) +
14 ;               (A[i + 2] * A[i - 1]);
15 ;    }
17 target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64"
19 define void @f(i32* noalias %sum, i32* noalias %A) {
20 entry:
21   br label %for.cond
23 for.cond:                                         ; preds = %for.inc, %entry
24   %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
25   %exitcond = icmp ne i32 %i.0, 1024
26   br i1 %exitcond, label %for.body, label %for.end
28 for.body:                                         ; preds = %for.cond
29   %add = add nsw i32 %i.0, 3
30   %arrayidx = getelementptr inbounds i32, i32* %A, i32 %add
31   %tmp = load i32, i32* %arrayidx, align 4
32   %sub = add nsw i32 %i.0, -14
33   %mul = mul nsw i32 %tmp, %sub
34   %arrayidx1 = getelementptr inbounds i32, i32* %A, i32 %i.0
35   %tmp1 = load i32, i32* %arrayidx1, align 4
36   %tmp2 = load i32, i32* %sum, align 4
37   %add2 = add nsw i32 %tmp1, %tmp2
38   %tmp3 = load i32, i32* %A, align 4
39   %add4 = add nsw i32 %add2, %tmp3
40   %arrayidx5 = getelementptr inbounds i32, i32* %A, i32 1023
41   %tmp4 = load i32, i32* %arrayidx5, align 4
42   %add6 = add nsw i32 %add4, %tmp4
43   %add7 = add nsw i32 %mul, %add6
44   %add8 = add nsw i32 %i.0, 2
45   %arrayidx9 = getelementptr inbounds i32, i32* %A, i32 %add8
46   %tmp5 = load i32, i32* %arrayidx9, align 4
47   %sub10 = add nsw i32 %i.0, -1
48   %arrayidx11 = getelementptr inbounds i32, i32* %A, i32 %sub10
49   %tmp6 = load i32, i32* %arrayidx11, align 4
50   %mul12 = mul nsw i32 %tmp5, %tmp6
51   %add13 = add nsw i32 %add7, %mul12
52   store i32 %add13, i32* %sum, align 4
53   br label %for.inc
55 for.inc:                                          ; preds = %for.body
56   %inc = add nsw i32 %i.0, 1
57   br label %for.cond
59 for.end:                                          ; preds = %for.cond
60   ret void