summaryrefslogtreecommitdiffstats
path: root/polly/test/Isl/CodeGen/OpenMP/single_loop_with_param.ll
diff options
context:
space:
mode:
authorTobias Grosser <tobias@grosser.es>2015-08-31 11:06:19 +0000
committerTobias Grosser <tobias@grosser.es>2015-08-31 11:06:19 +0000
commit9f3d55cf3dfec5f2353ac91e32ba9312b1a6fc70 (patch)
tree06d56c71184d2511120d6e8a3dbb93dbea94075b /polly/test/Isl/CodeGen/OpenMP/single_loop_with_param.ll
parent5830b1991729774e812b9802880c377f784e77e7 (diff)
downloadbcm5719-llvm-9f3d55cf3dfec5f2353ac91e32ba9312b1a6fc70.tar.gz
bcm5719-llvm-9f3d55cf3dfec5f2353ac91e32ba9312b1a6fc70.zip
Generate scalar initialization loads at the beginning of the start BB
Our OpenMP code generation generated part of its launching code directly into the start basic block and without this change the scalar initialization was run _after_ the OpenMP threads have been launched. This resulted in uninitialized scalar values to be used. llvm-svn: 246427
Diffstat (limited to 'polly/test/Isl/CodeGen/OpenMP/single_loop_with_param.ll')
-rw-r--r--polly/test/Isl/CodeGen/OpenMP/single_loop_with_param.ll45
1 files changed, 45 insertions, 0 deletions
diff --git a/polly/test/Isl/CodeGen/OpenMP/single_loop_with_param.ll b/polly/test/Isl/CodeGen/OpenMP/single_loop_with_param.ll
new file mode 100644
index 00000000000..535af3a9c73
--- /dev/null
+++ b/polly/test/Isl/CodeGen/OpenMP/single_loop_with_param.ll
@@ -0,0 +1,45 @@
+; RUN: opt %loadPolly -polly-detect-unprofitable -polly-parallel \
+; RUN: -polly-parallel-force -polly-codegen -S -verify-dom-info < %s \
+; RUN: | FileCheck %s -check-prefix=IR
+
+; #define N 1024
+; float A[N];
+;
+; void single_parallel_loop(float alpha) {
+; for (long i = 0; i < N; i++)
+; A[i] = alpha;
+; }
+
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
+
+; Ensure the scalars are initialized before the OpenMP code is launched.
+
+; IR-LABEL: polly.start:
+; IR-NEXT: store float %alpha, float* %alpha.s2a
+
+; IR: GOMP_parallel_loop_runtime_start
+
+@A = common global [1024 x float] zeroinitializer, align 16
+
+define void @single_parallel_loop(float %alpha) nounwind {
+entry:
+ br label %for.i
+
+for.i:
+ %indvar = phi i64 [ %indvar.next, %for.inc], [ 0, %entry ]
+ %scevgep = getelementptr [1024 x float], [1024 x float]* @A, i64 0, i64 %indvar
+ %exitcond = icmp ne i64 %indvar, 1024
+ br i1 %exitcond, label %S, label %exit
+
+S:
+ %alphaplus = fadd float 1.0, %alpha
+ store float %alphaplus, float* %scevgep
+ br label %for.inc
+
+for.inc:
+ %indvar.next = add i64 %indvar, 1
+ br label %for.i
+
+exit:
+ ret void
+}
OpenPOWER on IntegriCloud