Fix Polly
[polly-mirror.git] / test / ScheduleOptimizer / SIMDInParallelFor.ll
bloba5d65c81caf8ef17c575163e4a96410e0e986636
1 ; RUN: opt %loadPolly -polly-parallel -polly-vectorizer=stripmine -polly-codegen-verify -polly-opt-isl -polly-ast -polly-codegen -analyze < %s | FileCheck %s
3 ; Check that there are no nested #pragma omp parallel for inside a
4 ; #pragma omp parallel for loop.
5 ; See llvm.org/PR38073 and llvm.org/PR33153
7 ; This test unfortunately is very dependent on the result of the schedule
8 ; optimizer (-polly-opt-isl).
10 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
12 @b = external dso_local unnamed_addr global [1984 x [1984 x double]], align 16
13 @c = external dso_local unnamed_addr global [1984 x [1984 x double]], align 16
15 define dso_local void @main() local_unnamed_addr {
16 entry:
17   %cond = select i1 undef, i32 undef, i32 1984
18   %tmp = zext i32 %cond to i64
19   %cond63 = select i1 undef, i32 undef, i32 1984
20   %tmp1 = zext i32 %cond63 to i64
21   br label %for.cond51.preheader
23 for.cond51.preheader:
24   %indvars.iv213 = phi i64 [ 0, %entry ], [ %indvars.iv.next214, %for.inc98 ]
25   %cond73 = select i1 undef, i32 undef, i32 1984
26   %tmp2 = zext i32 %cond73 to i64
27   br label %for.cond56.preheader
29 for.cond56.preheader:
30   %indvars.iv223 = phi i64 [ 0, %for.cond51.preheader ], [ %indvars.iv.next224, %for.inc95 ]
31   br label %for.cond66.preheader
33 for.cond66.preheader:
34   %indvars.iv219 = phi i64 [ %indvars.iv.next220, %for.inc92 ], [ 0, %for.cond56.preheader ]
35   br label %for.body75
37 for.body75:
38   %indvars.iv215 = phi i64 [ %indvars.iv213, %for.cond66.preheader ], [ %indvars.iv.next216, %for.body75 ]
39   %arrayidx83 = getelementptr inbounds [1984 x [1984 x double]], [1984 x [1984 x double]]* @b, i64 0, i64 %indvars.iv219, i64 %indvars.iv215
40   %tmp3 = load double, double* %arrayidx83, align 8
41   %arrayidx87 = getelementptr inbounds [1984 x [1984 x double]], [1984 x [1984 x double]]* @c, i64 0, i64 %indvars.iv223, i64 %indvars.iv215
42   store double undef, double* %arrayidx87, align 8
43   %indvars.iv.next216 = add nuw nsw i64 %indvars.iv215, 1
44   %cmp74 = icmp ult i64 %indvars.iv.next216, %tmp2
45   br i1 %cmp74, label %for.body75, label %for.inc92
47 for.inc92:
48   %indvars.iv.next220 = add nuw nsw i64 %indvars.iv219, 1
49   %cmp64 = icmp ult i64 %indvars.iv.next220, %tmp1
50   br i1 %cmp64, label %for.cond66.preheader, label %for.inc95
52 for.inc95:
53   %indvars.iv.next224 = add nuw nsw i64 %indvars.iv223, 1
54   %cmp54 = icmp ult i64 %indvars.iv.next224, %tmp
55   br i1 %cmp54, label %for.cond56.preheader, label %for.inc98
57 for.inc98:
58   %indvars.iv.next214 = add nuw nsw i64 %indvars.iv213, 48
59   br label %for.cond51.preheader
62 ; No parallel loop except the to outermost.
63 ; CHECK: #pragma omp parallel for
64 ; CHECK: #pragma omp parallel for
65 ; CHECK-NOT: #pragma omp parallel for