| ; RUN: opt %loadPolly -pass-remarks-analysis="polly-scops" -polly-scops \ |
| ; RUN: < %s 2>&1 | FileCheck %s |
| |
| ; We build a scop of the following form to check that the domain construction |
| ; does not take a huge amount of time, but that we instead just bail out. |
| ; |
| ; loop.header |
| ; / | \ \ |
| ; A0 A2 A4 \ |
| ; \ / \ / \ |
| ; A1 A3 \ |
| ; / \ / \ | |
| ; B0 B2 B4 | |
| ; \ / \ / | |
| ; B1 B3 ^ |
| ; / \ / \ | |
| ; C0 C2 C4 | |
| ; \ / \ / / |
| ; C1 C3 / |
| ; \ / / |
| ; loop backedge |
| |
| ; CHECK: Low complexity assumption: { : false } |
| |
| define void @foo(float* %A, float* %B, float* %C, float* %D, float* %E, |
| i64 %A1.p, i64 %A2.p, i64 %A3.p, |
| i64 %B1.p, i64 %B2.p, i64 %B3.p, |
| i64 %C1.p, i64 %C2.p, i64 %C3.p, |
| i64 %D1.p, i64 %D2.p, i64 %D3.p, |
| i64 %E1.p, i64 %E2.p, i64 %E3.p) { |
| entry: |
| br label %loop.header |
| |
| loop.header: |
| %indvar = phi i64 [0, %entry], [%indvar.next, %loop.backedge] |
| switch i2 0, label %A0 [i2 1, label %A2 i2 2, label %A4] |
| |
| A0: |
| %val.A0 = load float, float* %A |
| store float %val.A0, float* %A |
| br label %A1 |
| |
| A2: |
| %val.A2 = load float, float* %A |
| store float %val.A2, float* %A |
| %A2.cmp = icmp eq i64 %A2.p, 0 |
| br i1 %A2.cmp, label %A1, label %A3 |
| |
| A4: |
| %val.A4 = load float, float* %A |
| store float %val.A4, float* %A |
| br label %A3 |
| |
| A1: |
| %val.A1 = load float, float* %A |
| store float %val.A1, float* %A |
| %A1.cmp = icmp eq i64 %A1.p, 0 |
| br i1 %A1.cmp, label %B0, label %B2 |
| |
| A3: |
| %val.A3 = load float, float* %A |
| store float %val.A3, float* %A |
| %A3.cmp = icmp eq i64 %A3.p, 0 |
| br i1 %A3.cmp, label %B2, label %B4 |
| |
| B0: |
| %val.B0 = load float, float* %B |
| store float %val.B0, float* %B |
| br label %B1 |
| |
| B2: |
| %val.B2 = load float, float* %B |
| store float %val.B2, float* %B |
| %B2.cmp = icmp eq i64 %B2.p, 0 |
| br i1 %B2.cmp, label %B1, label %B3 |
| |
| B4: |
| %val.B4 = load float, float* %B |
| store float %val.B4, float* %B |
| br label %B3 |
| |
| B1: |
| %val.B1 = load float, float* %B |
| store float %val.B1, float* %B |
| %B1.cmp = icmp eq i64 %B1.p, 0 |
| br i1 %B1.cmp, label %C0, label %C2 |
| |
| B3: |
| %val.B3 = load float, float* %A |
| store float %val.B3, float* %A |
| %B3.cmp = icmp eq i64 %A3.p, 0 |
| br i1 %B3.cmp, label %C2, label %C4 |
| |
| C0: |
| %val.C0 = load float, float* %C |
| store float %val.C0, float* %C |
| br label %C1 |
| |
| C2: |
| %val.C2 = load float, float* %C |
| store float %val.C2, float* %C |
| %C2.cmp = icmp eq i64 %C2.p, 0 |
| br i1 %C2.cmp, label %C1, label %C3 |
| |
| C4: |
| %val.C4 = load float, float* %C |
| store float %val.C4, float* %C |
| br label %C3 |
| |
| C1: |
| %val.C1 = load float, float* %C |
| store float %val.C1, float* %C |
| %C1.cmp = icmp eq i64 %C1.p, 0 |
| br i1 %C1.cmp, label %D0, label %D2 |
| |
| C3: |
| %val.C3 = load float, float* %C |
| store float %val.C3, float* %C |
| %C3.cmp = icmp eq i64 %C3.p, 0 |
| br i1 %C3.cmp, label %D2, label %D4 |
| |
| D0: |
| %val.D0 = load float, float* %D |
| store float %val.D0, float* %D |
| br label %D1 |
| |
| D2: |
| %val.D2 = load float, float* %D |
| store float %val.D2, float* %D |
| %D2.cmp = icmp eq i64 %D2.p, 0 |
| br i1 %D2.cmp, label %D1, label %D3 |
| |
| D4: |
| %val.D4 = load float, float* %D |
| store float %val.D4, float* %D |
| br label %D3 |
| |
| D1: |
| %val.D1 = load float, float* %D |
| store float %val.D1, float* %D |
| %D1.cmp = icmp eq i64 %D1.p, 0 |
| br i1 %D1.cmp, label %E0, label %E2 |
| |
| D3: |
| %val.D3 = load float, float* %D |
| store float %val.D3, float* %D |
| %D3.cmp = icmp eq i64 %D3.p, 0 |
| br i1 %D3.cmp, label %E2, label %E4 |
| |
| E0: |
| %val.E0 = load float, float* %E |
| store float %val.E0, float* %E |
| br label %E1 |
| |
| E2: |
| %val.E2 = load float, float* %E |
| store float %val.E2, float* %E |
| %E2.cmp = icmp eq i64 %E2.p, 0 |
| br i1 %E2.cmp, label %E1, label %E3 |
| |
| E4: |
| %val.E4 = load float, float* %E |
| store float %val.E4, float* %E |
| br label %E3 |
| |
| E1: |
| %val.E1 = load float, float* %E |
| store float %val.E1, float* %E |
| %E1.cmp = icmp eq i64 %E1.p, 0 |
| br i1 %E1.cmp, label %F0, label %F2 |
| |
| E3: |
| %val.E3 = load float, float* %E |
| store float %val.E3, float* %E |
| %E3.cmp = icmp eq i64 %E3.p, 0 |
| br i1 %E3.cmp, label %F2, label %F4 |
| |
| F0: |
| br label %loop.backedge |
| |
| F2: |
| br label %loop.backedge |
| |
| F4: |
| br label %loop.backedge |
| |
| loop.backedge: |
| %indvar.next = add i64 %indvar, 1 |
| %cmp = icmp ne i64 %indvar, 1000 |
| br i1 %cmp, label %loop.header, label %exit |
| |
| exit: |
| ret void |
| |
| } |