rahulana-quic | e1f056f | 2024-05-24 20:09:34 | [diff] [blame] | 1 | ; RUN: opt %loadNPMPolly -polly-allow-nonaffine '-passes=polly-dce,print<polly-ast>' -disable-output < %s | FileCheck %s |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 2 | ; |
| 3 | ; void f(int *A) { |
| 4 | ; for (int i = 0; i < 1024; i++) |
Tobias Grosser | a608569 | 2015-06-23 20:55:05 | [diff] [blame] | 5 | ; S1: A[bar(i)] = i; |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 6 | ; for (int i = 0; i < 1024; i++) |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 7 | ; S2: A[i2] = i; |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 8 | ; } |
| 9 | |
Tobias Grosser | c2920ff | 2014-07-14 08:32:01 | [diff] [blame] | 10 | ; We unfortunately do need to execute all iterations of S1, as we do not know |
| 11 | ; the size of A and as a result S1 may write for example to A[1024], which |
| 12 | ; is not overwritten by S2. |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 13 | |
Tobias Grosser | 808cd69 | 2015-07-14 09:33:13 | [diff] [blame] | 14 | ; CHECK: for (int c0 = 0; c0 <= 1023; c0 += 1) |
| 15 | ; CHECK: Stmt_S1(c0); |
| 16 | ; CHECK: for (int c0 = 0; c0 <= 1023; c0 += 1) |
| 17 | ; CHECK: Stmt_S2(c0); |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 18 | |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 19 | target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-n32-S64" |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 20 | |
Tobias Grosser | a608569 | 2015-06-23 20:55:05 | [diff] [blame] | 21 | declare i32 @bar(i32) #1 |
| 22 | |
Nikita Popov | b332499 | 2023-01-17 09:12:02 | [diff] [blame] | 23 | define void @f(ptr %A) { |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 24 | entry: |
| 25 | br label %for.cond |
| 26 | |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 27 | for.cond: |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 28 | %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ] |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 29 | %exitcond = icmp ne i32 %i.0, 1024 |
| 30 | br i1 %exitcond, label %S1, label %next |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 31 | |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 32 | S1: |
Tobias Grosser | a608569 | 2015-06-23 20:55:05 | [diff] [blame] | 33 | %nonaff = call i32 @bar(i32 %i.0) |
Nikita Popov | b332499 | 2023-01-17 09:12:02 | [diff] [blame] | 34 | %arrayidx = getelementptr inbounds i32, ptr %A, i32 %nonaff |
| 35 | store i32 %i.0, ptr %arrayidx, align 4 |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 36 | br label %for.inc |
| 37 | |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 38 | for.inc: |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 39 | %inc = add nsw i32 %i.0, 1 |
| 40 | br label %for.cond |
| 41 | |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 42 | next: |
| 43 | br label %for.cond.2 |
Tobias Grosser | c2920ff | 2014-07-14 08:32:01 | [diff] [blame] | 44 | |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 45 | for.cond.2: |
| 46 | %i.2 = phi i32 [ 0, %next ], [ %inc.2, %for.inc.2 ] |
| 47 | %exitcond.2 = icmp ne i32 %i.2, 1024 |
| 48 | br i1 %exitcond.2, label %S2, label %for.end |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 49 | |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 50 | S2: |
Nikita Popov | b332499 | 2023-01-17 09:12:02 | [diff] [blame] | 51 | %arrayidx.2 = getelementptr inbounds i32, ptr %A, i32 %i.2 |
| 52 | store i32 %i.2, ptr %arrayidx.2, align 4 |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 53 | br label %for.inc.2 |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 54 | |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 55 | for.inc.2: |
| 56 | %inc.2 = add nsw i32 %i.2, 1 |
| 57 | br label %for.cond.2 |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 58 | |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 59 | for.end: |
Tobias Grosser | 780ce0f | 2014-07-11 07:12:10 | [diff] [blame] | 60 | ret void |
| 61 | } |
Tobias Grosser | f4daf34 | 2014-08-16 09:08:55 | [diff] [blame] | 62 | |
Tobias Grosser | a608569 | 2015-06-23 20:55:05 | [diff] [blame] | 63 | attributes #1 = { nounwind readnone } |
| 64 | |